aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2017-12-15 17:08:13 +0100
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2018-01-11 10:16:17 +0100
commit1b6649e5b361b862f2a3534e3552992bfe71569e (patch)
treecdc2b7c8ec8c40d3f917eb5086430300e02ff608
parentsystemctl: don't show vendor preset state for generated/transient units (#7711) (diff)
downloadsystemd-1b6649e5b361b862f2a3534e3552992bfe71569e.tar.gz
systemd-1b6649e5b361b862f2a3534e3552992bfe71569e.tar.bz2
systemd-1b6649e5b361b862f2a3534e3552992bfe71569e.zip
Add mkdir_errno_wrapper() and use instead of mkdir() in various places
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. (cherry picked from commit dae8b82eb9ef391e0566ba69534b5a8f140d6c88)
-rw-r--r--src/basic/cgroup-util.c12
-rw-r--r--src/basic/label.c6
-rw-r--r--src/basic/mkdir.c28
-rw-r--r--src/basic/mkdir.h1
-rw-r--r--src/machine/machine-dbus.c2
-rw-r--r--src/nspawn/nspawn-mount.c9
-rw-r--r--src/nspawn/nspawn.c24
-rw-r--r--src/udev/udevd.c6
8 files changed, 49 insertions, 39 deletions
diff --git a/src/basic/cgroup-util.c b/src/basic/cgroup-util.c
index f599d0f0f..7c0ba9211 100644
--- a/src/basic/cgroup-util.c
+++ b/src/basic/cgroup-util.c
@@ -779,13 +779,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)
diff --git a/src/basic/label.c b/src/basic/label.c
index ce81d286a..38eebb581 100644
--- a/src/basic/label.c
+++ b/src/basic/label.c
@@ -24,6 +24,7 @@
#include "label.h"
#include "macro.h"
+#include "mkdir.h"
#include "selinux-util.h"
#include "smack-util.h"
@@ -50,11 +51,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;
diff --git a/src/basic/mkdir.c b/src/basic/mkdir.c
index 4386b38c4..de4746c86 100644
--- a/src/basic/mkdir.c
+++ b/src/basic/mkdir.c
@@ -35,6 +35,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)
@@ -68,8 +70,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) {
@@ -77,6 +85,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;
@@ -104,8 +113,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;
@@ -116,13 +124,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) {
@@ -130,17 +138,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);
}
diff --git a/src/basic/mkdir.h b/src/basic/mkdir.h
index 04a537f8a..d6c2d579a 100644
--- a/src/basic/mkdir.h
+++ b/src/basic/mkdir.h
@@ -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);
diff --git a/src/machine/machine-dbus.c b/src/machine/machine-dbus.c
index 3761267b5..2d3d28584 100644
--- a/src/machine/machine-dbus.c
+++ b/src/machine/machine-dbus.c
@@ -931,7 +931,7 @@ int bus_machine_method_bind_mount(sd_bus_message *message, void *userdata, sd_bu
/* Second, we mount the source file or directory to a directory inside of our MS_SLAVE playground. */
mount_tmp = strjoina(mount_slave, "/mount");
if (S_ISDIR(st.st_mode))
- r = mkdir(mount_tmp, 0700) < 0 ? -errno : 0;
+ r = mkdir_errno_wrapper(mount_tmp, 0700);
else
r = touch(mount_tmp);
if (r < 0) {
diff --git a/src/nspawn/nspawn-mount.c b/src/nspawn/nspawn-mount.c
index 920e11471..c9236ea3d 100644
--- a/src/nspawn/nspawn-mount.c
+++ b/src/nspawn/nspawn-mount.c
@@ -474,9 +474,9 @@ static int mkdir_userns(const char *path, mode_t mode, MountSettingsMask mask, u
assert(path);
- r = mkdir(path, mode);
- if (r < 0 && errno != EEXIST)
- return -errno;
+ r = mkdir_errno_wrapper(path, mode);
+ if (r < 0 && r != -EEXIST)
+ return r;
if ((mask & MOUNT_USE_USERNS) == 0)
return 0;
@@ -484,8 +484,7 @@ static int mkdir_userns(const char *path, mode_t mode, MountSettingsMask mask, u
if (mask & MOUNT_IN_USERNS)
return 0;
- r = lchown(path, uid_shift, uid_shift);
- if (r < 0)
+ if (lchown(path, uid_shift, uid_shift) < 0)
return -errno;
return 0;
diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c
index 71b14e230..f646971c3 100644
--- a/src/nspawn/nspawn.c
+++ b/src/nspawn/nspawn.c
@@ -1313,13 +1313,14 @@ static int userns_lchown(const char *p, uid_t uid, gid_t gid) {
static int userns_mkdir(const char *root, const char *path, mode_t mode, uid_t uid, gid_t gid) {
const char *q;
+ int r;
q = prefix_roota(root, path);
- if (mkdir(q, mode) < 0) {
- if (errno == EEXIST)
- return 0;
- return -errno;
- }
+ r = mkdir_errno_wrapper(q, mode);
+ if (r == -EEXIST)
+ return 0;
+ if (r < 0)
+ return r;
return userns_lchown(q, uid, gid);
}
@@ -1599,8 +1600,10 @@ static int setup_pts(const char *dest) {
/* Mount /dev/pts itself */
p = prefix_roota(dest, "/dev/pts");
- if (mkdir(p, 0755) < 0)
- return log_error_errno(errno, "Failed to create /dev/pts: %m");
+ r = mkdir_errno_wrapper(p, 0755);
+ if (r < 0)
+ return log_error_errno(r, "Failed to create /dev/pts: %m");
+
r = mount_verbose(LOG_ERR, "devpts", p, "devpts", MS_NOSUID|MS_NOEXEC, options);
if (r < 0)
return r;
@@ -1846,12 +1849,13 @@ static int setup_journal(const char *directory) {
/* don't create parents here — if the host doesn't have
* permanent journal set up, don't force it here */
- if (mkdir(p, 0755) < 0 && errno != EEXIST) {
+ r = mkdir_errno_wrapper(p, 0755);
+ if (r < 0 && r != -EEXIST) {
if (try) {
- log_debug_errno(errno, "Failed to create %s, skipping journal setup: %m", p);
+ log_debug_errno(r, "Failed to create %s, skipping journal setup: %m", p);
return 0;
} else
- return log_error_errno(errno, "Failed to create %s: %m", p);
+ return log_error_errno(r, "Failed to create %s: %m", p);
}
} else if (access(p, F_OK) < 0)
diff --git a/src/udev/udevd.c b/src/udev/udevd.c
index 1644935ff..5c757d513 100644
--- a/src/udev/udevd.c
+++ b/src/udev/udevd.c
@@ -1700,9 +1700,9 @@ int main(int argc, char *argv[]) {
goto exit;
}
- r = mkdir("/run/udev", 0755);
- if (r < 0 && errno != EEXIST) {
- r = log_error_errno(errno, "could not create /run/udev: %m");
+ r = mkdir_errno_wrapper("/run/udev", 0755);
+ if (r < 0 && r != -EEXIST) {
+ log_error_errno(r, "could not create /run/udev: %m");
goto exit;
}