chiark / gitweb /
Add mkdir_errno_wrapper() and use instead of mkdir() in various places
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Fri, 15 Dec 2017 16:08:13 +0000 (17:08 +0100)
committerSven Eden <yamakuzure@gmx.net>
Wed, 30 May 2018 05:49:41 +0000 (07:49 +0200)
We'd pass pointers to mkdir and mkdir_label to call in various places. mkdir
returns the error in errno while mkdir_label returns the error directly.

src/basic/cgroup-util.c
src/basic/label.c
src/basic/mkdir.c
src/basic/mkdir.h

index 3fb2fac318285f717f7ab657f9b8a2000c7538da..a11ec58eda498564cf10174a7870577ff6b9f27f 100644 (file)
@@ -785,13 +785,11 @@ int cg_create(const char *controller, const char *path) {
         if (r < 0)
                 return r;
 
-        if (mkdir(fs, 0755) < 0) {
-
-                if (errno == EEXIST)
-                        return 0;
-
-                return -errno;
-        }
+        r = mkdir_errno_wrapper(fs, 0755);
+        if (r == -EEXIST)
+                return 0;
+        if (r < 0)
+                return r;
 
         r = cg_hybrid_unified();
         if (r < 0)
index 8a2d87818befb0a3c895371fff7113bed2136d63..19d2bca10b216e9a9270de72c1fc52372d7e6f4f 100644 (file)
@@ -22,7 +22,6 @@
 #include <sys/stat.h>
 #include <unistd.h>
 
-//#include "btrfs-util.h"
 #include "label.h"
 #include "macro.h"
 #include "selinux-util.h"
@@ -51,11 +50,8 @@ int mkdir_label(const char *path, mode_t mode) {
         if (r < 0)
                 return r;
 
-        if (mkdir(path, mode) < 0)
-                r = -errno;
-
+        r = mkdir_errno_wrapper(path, mode);
         mac_selinux_create_file_clear();
-
         if (r < 0)
                 return r;
 
@@ -84,21 +80,3 @@ int symlink_label(const char *old_path, const char *new_path) {
         return mac_smack_fix(new_path, false, false);
 }
 #endif // 0
-
-int btrfs_subvol_make_label(const char *path) {
-        int r;
-
-        assert(path);
-
-        r = mac_selinux_create_file_prepare(path, S_IFDIR);
-        if (r < 0)
-                return r;
-
-        r = btrfs_subvol_make(path);
-        mac_selinux_create_file_clear();
-
-        if (r < 0)
-                return r;
-
-        return mac_smack_fix(path, false, false);
-}
index bab166b4d835d7c0fd315d6bf6101db2add4c21d..198d815c1cc30f7ffd0b68e37a85b768554cbb90 100644 (file)
@@ -38,6 +38,8 @@ int mkdir_safe_internal(const char *path, mode_t mode, uid_t uid, gid_t gid, boo
         struct stat st;
         int r;
 
+        assert(_mkdir != mkdir);
+
         if (_mkdir(path, mode) >= 0) {
                 r = chmod_and_chown(path, mode, uid, gid);
                 if (r < 0)
@@ -71,8 +73,14 @@ int mkdir_safe_internal(const char *path, mode_t mode, uid_t uid, gid_t gid, boo
         return 0;
 }
 
+int mkdir_errno_wrapper(const char *pathname, mode_t mode) {
+        if (mkdir(pathname, mode) < 0)
+                return -errno;
+        return 0;
+}
+
 int mkdir_safe(const char *path, mode_t mode, uid_t uid, gid_t gid, bool follow_symlink) {
-        return mkdir_safe_internal(path, mode, uid, gid, follow_symlink, mkdir);
+        return mkdir_safe_internal(path, mode, uid, gid, follow_symlink, mkdir_errno_wrapper);
 }
 
 int mkdir_parents_internal(const char *prefix, const char *path, mode_t mode, mkdir_func_t _mkdir) {
@@ -80,6 +88,7 @@ int mkdir_parents_internal(const char *prefix, const char *path, mode_t mode, mk
         int r;
 
         assert(path);
+        assert(_mkdir != mkdir);
 
         if (prefix && !path_startswith(path, prefix))
                 return -ENOTDIR;
@@ -107,8 +116,7 @@ int mkdir_parents_internal(const char *prefix, const char *path, mode_t mode, mk
                 e = p + strcspn(p, "/");
                 p = e + strspn(e, "/");
 
-                /* Is this the last component? If so, then we're
-                 * done */
+                /* Is this the last component? If so, then we're done */
                 if (*p == 0)
                         return 0;
 
@@ -119,13 +127,13 @@ int mkdir_parents_internal(const char *prefix, const char *path, mode_t mode, mk
                         continue;
 
                 r = _mkdir(t, mode);
-                if (r < 0 && errno != EEXIST)
-                        return -errno;
+                if (r < 0 && r != -EEXIST)
+                        return r;
         }
 }
 
 int mkdir_parents(const char *path, mode_t mode) {
-        return mkdir_parents_internal(NULL, path, mode, mkdir);
+        return mkdir_parents_internal(NULL, path, mode, mkdir_errno_wrapper);
 }
 
 int mkdir_p_internal(const char *prefix, const char *path, mode_t mode, mkdir_func_t _mkdir) {
@@ -133,17 +141,19 @@ int mkdir_p_internal(const char *prefix, const char *path, mode_t mode, mkdir_fu
 
         /* Like mkdir -p */
 
+        assert(_mkdir != mkdir);
+
         r = mkdir_parents_internal(prefix, path, mode, _mkdir);
         if (r < 0)
                 return r;
 
         r = _mkdir(path, mode);
-        if (r < 0 && (errno != EEXIST || is_dir(path, true) <= 0))
-                return -errno;
+        if (r < 0 && (r != -EEXIST || is_dir(path, true) <= 0))
+                return r;
 
         return 0;
 }
 
 int mkdir_p(const char *path, mode_t mode) {
-        return mkdir_p_internal(NULL, path, mode, mkdir);
+        return mkdir_p_internal(NULL, path, mode, mkdir_errno_wrapper);
 }
index 58d25a3593225fbc3a89757ef689c98bdd77b420..428cfb2a905c0837318cefd396e81507b77d0266 100644 (file)
@@ -23,6 +23,7 @@
 
 #include <sys/types.h>
 
+int mkdir_errno_wrapper(const char *pathname, mode_t mode);
 int mkdir_safe(const char *path, mode_t mode, uid_t uid, gid_t gid, bool follow_symlink);
 int mkdir_parents(const char *path, mode_t mode);
 int mkdir_p(const char *path, mode_t mode);