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.
This commit is contained in:
Zbigniew Jędrzejewski-Szmek
2017-12-16 13:28:22 +01:00
parent a1b2c92d82
commit dae8b82eb9
8 changed files with 48 additions and 39 deletions
+5 -7
View File
@@ -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)
+1 -4
View File
@@ -50,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;
+19 -9
View File
@@ -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);
}
+1
View 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);