Use utils mkdir recursive in runas.c
[lttng-tools.git] / src / common / runas.c
index cb697feee797a0baf36a4e70e008f2e33cb3f787..d75eb21027ce0ae2b7df768698d8c913bb4297ea 100644 (file)
@@ -31,6 +31,7 @@
 #include <sys/signal.h>
 
 #include <common/error.h>
 #include <sys/signal.h>
 
 #include <common/error.h>
+#include <common/utils.h>
 #include <common/compat/mman.h>
 #include <common/compat/clone.h>
 
 #include <common/compat/mman.h>
 #include <common/compat/clone.h>
 
@@ -84,56 +85,12 @@ int _mkdir_recursive(void *_data)
 {
        struct run_as_mkdir_data *data = _data;
        const char *path;
 {
        struct run_as_mkdir_data *data = _data;
        const char *path;
-       char *p, tmp[PATH_MAX];
-       struct stat statbuf;
        mode_t mode;
        mode_t mode;
-       size_t len;
-       int ret;
 
        path = data->path;
        mode = data->mode;
 
 
        path = data->path;
        mode = data->mode;
 
-       ret = snprintf(tmp, sizeof(tmp), "%s", path);
-       if (ret < 0) {
-               PERROR("snprintf mkdir");
-               goto error;
-       }
-
-       len = ret;
-       if (tmp[len - 1] == '/') {
-               tmp[len - 1] = 0;
-       }
-
-       for (p = tmp + 1; *p; p++) {
-               if (*p == '/') {
-                       *p = 0;
-                       ret = stat(tmp, &statbuf);
-                       if (ret < 0) {
-                               ret = mkdir(tmp, mode);
-                               if (ret < 0) {
-                                       if (!(errno == EEXIST)) {
-                                               PERROR("mkdir recursive");
-                                               ret = -errno;
-                                               goto error;
-                                       }
-                               }
-                       }
-                       *p = '/';
-               }
-       }
-
-       ret = mkdir(tmp, mode);
-       if (ret < 0) {
-               if (!(errno == EEXIST)) {
-                       PERROR("mkdir recursive last piece");
-                       ret = -errno;
-               } else {
-                       ret = 0;
-               }
-       }
-
-error:
-       return ret;
+       return utils_mkdir_recursive(path, mode);
 }
 
 static
 }
 
 static
@@ -313,7 +270,14 @@ end:
 static
 int run_as_noclone(int (*cmd)(void *data), void *data, uid_t uid, gid_t gid)
 {
 static
 int run_as_noclone(int (*cmd)(void *data), void *data, uid_t uid, gid_t gid)
 {
-       return cmd(data);
+       int ret;
+       mode_t old_mask;
+
+       old_mask = umask(0);
+       ret = cmd(data);
+       umask(old_mask);
+
+       return ret;
 }
 
 static
 }
 
 static
This page took 0.023908 seconds and 4 git commands to generate.