[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: [PATCH 3/7] Remove mkdirChain() from isys, use g_mkdir_with_parents()



Ack.

--
Martin Sivák
msivak redhat com
Red Hat Czech
Anaconda team / Brno, CZ

----- "David Cantrell" <dcantrell redhat com> wrote:

> Replace uses of mkdirChain() with g_mkdir_with_parents() and
> remove the existing mkdirChain() code from isys/imount.*
> ---
>  loader/driverdisk.c      |   15 +++++++++---
>  loader/loader.c          |    6 +++-
>  loader/method.c          |    6 +++-
>  pyanaconda/isys/imount.c |   52
> +--------------------------------------------
>  pyanaconda/isys/imount.h |    1 -
>  5 files changed, 21 insertions(+), 59 deletions(-)
> 
> diff --git a/loader/driverdisk.c b/loader/driverdisk.c
> index 2688c82..9b4c710 100644
> --- a/loader/driverdisk.c
> +++ b/loader/driverdisk.c
> @@ -265,9 +265,15 @@ static int loadDriverDisk(struct loaderData_s
> *loaderData, char *mntpt) {
>      logMessage(DEBUGLVL, "Kernel version: %s", kernelver);
>  
>      sprintf(file, DD_RPMDIR_TEMPLATE, disknum);
> -    mkdirChain(file);
> -    mkdirChain(DD_MODULES);
> -    mkdirChain(DD_FIRMWARE);
> +
> +    if (g_mkdir_with_parents(file, 0755) == -1)
> +        logMessage(ERROR, "mkdir error on %s: %m", file);
> +
> +    if (g_mkdir_with_parents(DD_MODULES, 0755) == -1)
> +        logMessage(ERROR, "mkdir error on %s: %m", DD_MODULES);
> +
> +    if (g_mkdir_with_parents(DD_FIRMWARE, 0755) == -1)
> +        logMessage(ERROR, "mkdir error on %s: %m", DD_FIRMWARE);
>  
>      if (!FL_CMDLINE(flags)) {
>          startNewt();
> @@ -293,7 +299,8 @@ static int loadDriverDisk(struct loaderData_s
> *loaderData, char *mntpt) {
>  
>      /* ensure updates directory exists */
>      sprintf(file, "/lib/modules/%s/updates", kernelver);
> -    mkdirChain(file);
> +    if (g_mkdir_with_parents(file, 0755) == -1)
> +        logMessage(ERROR, "mkdir error on %s: %m", file);
>  
>      /* make sure driver update are referenced from system module dir
>         but from a different subdir, initrd overlays use the main
> diff --git a/loader/loader.c b/loader/loader.c
> index 88d7a7a..50daeb0 100644
> --- a/loader/loader.c
> +++ b/loader/loader.c
> @@ -2146,8 +2146,10 @@ int main(int argc, char ** argv) {
>  
>      /* make sure /tmp/updates exists so that magic in anaconda to */
>      /* symlink rhpl/ will work                                    */
> -    if (access("/tmp/updates", F_OK))
> -        mkdirChain("/tmp/updates");
> +    if (access("/tmp/updates", F_OK)) {
> +        if (g_mkdir_with_parents("/tmp/updates", 0755) == -1)
> +            logMessage(ERROR, "mkdir error on /tmp/updates: %m");
> +    }
>  
>      add_fw_search_dir(&loaderData, "/tmp/updates/firmware");
>      add_fw_search_dir(&loaderData, "/tmp/product/firmware");
> diff --git a/loader/method.c b/loader/method.c
> index 844048f..d84a2e8 100644
> --- a/loader/method.c
> +++ b/loader/method.c
> @@ -313,8 +313,10 @@ int unpackCpioBall(char * ballPath, char *
> rootDir) {
>      if (access(ballPath, R_OK))
>          return 1;
>  
> -    if (access(rootDir, R_OK))
> -        mkdirChain(rootDir);
> +    if (access(rootDir, R_OK)) {
> +        if (g_mkdir_with_parents(rootDir, 0755) == -1)
> +            logMessage(ERROR, "mkdir error on %s: %m", rootDir);
> +    }
>  
>      buf = (char *)malloc(PATH_MAX);
>      cwd = getcwd(buf, PATH_MAX);
> diff --git a/pyanaconda/isys/imount.c b/pyanaconda/isys/imount.c
> index ed0f5a7..39265a0 100644
> --- a/pyanaconda/isys/imount.c
> +++ b/pyanaconda/isys/imount.c
> @@ -27,14 +27,13 @@
>  #include <sys/types.h>
>  #include <sys/wait.h>
>  #include <unistd.h>
> +#include <glib.h>
>  
>  #include "imount.h"
>  #include "log.h"
>  
>  #define _(foo) foo
>  
> -static int mkdirIfNone(char * directory);
> -
>  static int readFD(int fd, char **buf) {
>      char *p;
>      size_t size = 4096;
> @@ -88,7 +87,7 @@ int mountCommandWrapper(int mode, char *dev, char
> *where, char *fs,
>      case IMOUNT_MODE_MOUNT:
>      case IMOUNT_MODE_BIND:
>          cmd = "/bin/mount";
> -        if (mkdirChain(where))
> +        if (g_mkdir_with_parents(where, 0755))
>              return IMOUNT_ERR_ERRNO;
>          break;
>      case IMOUNT_MODE_UMOUNT:
> @@ -264,31 +263,6 @@ int doPwUmount(char *where, char **err) {
>                                 NULL, where, NULL, NULL, err);
>  }
>  
> -int mkdirChain(char * origChain) {
> -    char * chain;
> -    char * chptr;
> -
> -    chain = alloca(strlen(origChain) + 1);
> -    strcpy(chain, origChain);
> -    chptr = chain;
> -
> -    while ((chptr = strchr(chptr, '/'))) {
> -	*chptr = '\0';
> -	if (mkdirIfNone(chain)) {
> -	    *chptr = '/';
> -	    return IMOUNT_ERR_ERRNO;
> -	}
> -
> -	*chptr = '/';
> -	chptr++;
> -    }
> -
> -    if (mkdirIfNone(chain))
> -	return IMOUNT_ERR_ERRNO;
> -
> -    return 0;
> -}
> -
>  /* Returns true iff it is possible that the mount command that have
> returned
>   * 'errno' might succeed at a later time (think e.g. not yet
> initialized USB
>   * device, etc.) */
> @@ -304,25 +278,3 @@ int mountMightSucceedLater(int mountRc)
>      }
>      return rc;
>  }
> -
> -static int mkdirIfNone(char * directory) {
> -    int rc, mkerr;
> -    char * chptr;
> -
> -    /* If the file exists it *better* be a directory -- I'm not going
> to
> -       actually check or anything */
> -    if (!access(directory, X_OK)) return 0;
> -
> -    /* if the path is '/' we get ENOFILE not found" from mkdir,
> rather
> -       then EEXIST which is weird */
> -    for (chptr = directory; *chptr; chptr++)
> -        if (*chptr != '/') break;
> -    if (!*chptr) return 0;
> -
> -    rc = mkdir(directory, 0755);
> -    mkerr = errno;
> -
> -    if (!rc || mkerr == EEXIST) return 0;
> -
> -    return IMOUNT_ERR_ERRNO;
> -}
> diff --git a/pyanaconda/isys/imount.h b/pyanaconda/isys/imount.h
> index d1b7cf3..3ce6387 100644
> --- a/pyanaconda/isys/imount.h
> +++ b/pyanaconda/isys/imount.h
> @@ -44,7 +44,6 @@
>  int doBindMount(char* path, char *where, char **err);
>  int doPwMount(char *dev, char *where, char *fs, char *options, char
> **err);
>  int doPwUmount(char *where, char **err);
> -int mkdirChain(char * origChain);
>  int mountMightSucceedLater(int mountRc);
>  
>  #endif
> -- 
> 1.7.2.3
> 
> _______________________________________________
> Anaconda-devel-list mailing list
> Anaconda-devel-list redhat com
> https://www.redhat.com/mailman/listinfo/anaconda-devel-list


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]