treewide: replace local mkdir_p implementations
[project/procd.git] / jail / fs.c
index d3046aa7d6ff7e52e11c7d927fddaeb342d98437..26bc2825c6382dac75d325a965fc99a5d49e4d56 100644 (file)
--- a/jail/fs.c
+++ b/jail/fs.c
@@ -32,6 +32,7 @@
 #include <libubox/avl-cmp.h>
 #include <libubox/blobmsg.h>
 #include <libubox/list.h>
+#include <libubox/utils.h>
 
 #include "elf.h"
 #include "fs.h"
@@ -54,31 +55,6 @@ struct mount {
 
 struct avl_tree mounts;
 
-int mkdir_p(char *dir, mode_t mask)
-{
-       char *l = strrchr(dir, '/');
-       int ret;
-
-       if (!l)
-               return 0;
-
-       *l = '\0';
-
-       if (mkdir_p(dir, mask))
-               return -1;
-
-       *l = '/';
-
-       ret = mkdir(dir, mask);
-       if (ret && errno == EEXIST)
-               return 0;
-
-       if (ret)
-               ERROR("mkdir(%s, %d) failed: %m\n", dir, mask);
-
-       return ret;
-}
-
 static int do_mount(const char *root, const char *orig_source, const char *target, const char *filesystemtype,
                    unsigned long orig_mountflags, unsigned long propflags, const char *optstr, int error, bool inner)
 {
@@ -111,10 +87,10 @@ static int do_mount(const char *root, const char *orig_source, const char *targe
                                return error;
                } else {
                        /* mount-bind 0-sized file having mode 000 */
-                       if (mount(UJAIL_NOAFILE, new, NULL, MS_BIND, NULL))
+                       if (mount(UJAIL_NOAFILE, new, "bind", MS_BIND, NULL))
                                return error;
 
-                       if (mount(UJAIL_NOAFILE, new, NULL, MS_REMOUNT | MS_BIND | MS_RDONLY | MS_NOSUID | MS_NOEXEC | MS_NODEV | MS_NOATIME, NULL))
+                       if (mount(UJAIL_NOAFILE, new, "bind", MS_REMOUNT | MS_BIND | MS_RDONLY | MS_NOSUID | MS_NOEXEC | MS_NODEV | MS_NOATIME, NULL))
                                return error;
                }
 
@@ -137,7 +113,7 @@ static int do_mount(const char *root, const char *orig_source, const char *targe
        }
 
        if (is_bind) {
-               if (mount(source?:new, new, filesystemtype, MS_BIND | (mountflags & MS_REC), optstr)) {
+               if (mount(source?:new, new, filesystemtype?:"bind", MS_BIND | (mountflags & MS_REC), optstr)) {
                        if (error)
                                ERROR("failed to mount -B %s %s: %m\n", source, new);
 
@@ -150,7 +126,7 @@ static int do_mount(const char *root, const char *orig_source, const char *targe
        }
 
        const char *hack_fstype = ((!filesystemtype || strcmp(filesystemtype, "cgroup"))?filesystemtype:"cgroup2");
-       if (mount(source?:(is_bind?new:NULL), new, hack_fstype, mountflags, optstr)) {
+       if (mount(source?:(is_bind?new:NULL), new, hack_fstype?:"none", mountflags, optstr)) {
                if (error)
                        ERROR("failed to mount %s %s: %m\n", source, new);
 
@@ -163,7 +139,7 @@ static int do_mount(const char *root, const char *orig_source, const char *targe
        DEBUG("mount %s%s %s (%s)\n", (mountflags & MS_BIND)?"-B ":"", source, new,
              (mountflags & MS_RDONLY)?"ro":"rw");
 
-       if (propflags && mount(NULL, new, NULL, propflags, NULL)) {
+       if (propflags && mount("none", new, "none", propflags, NULL)) {
                if (error)
                        ERROR("failed to mount --make-... %s \n", new);