diff options
| author | Xavier Del Campo Romero <xavi.dcr@tutanota.com> | 2023-03-28 02:34:23 +0200 |
|---|---|---|
| committer | Xavier Del Campo Romero <xavi.dcr@tutanota.com> | 2023-03-28 02:34:23 +0200 |
| commit | ba58914cb1476b94d1b6b2e42bc12471c37ea6b3 (patch) | |
| tree | 4145e78eb837fa796b3b5d7b2c54b15ae1c373a5 | |
| parent | 8843785696053b63aa9113e6030979709bee4d68 (diff) | |
| download | mkdir_r-ba58914cb1476b94d1b6b2e42bc12471c37ea6b3.tar.gz | |
Allow user to specify OS-specific file mode flags
| -rw-r--r-- | mkdir_r.c | 4 | ||||
| -rw-r--r-- | mkdir_r.h | 4 | ||||
| -rw-r--r-- | posix.c | 4 | ||||
| -rw-r--r-- | private_include/mkdir_r_private.h | 4 | ||||
| -rw-r--r-- | win32.c | 2 |
5 files changed, 11 insertions, 7 deletions
@@ -20,7 +20,7 @@ #include <stdio.h> #include <errno.h> -int mkdir_r(const char *const path) +int mkdir_r(const char *const path, const int flags) { int ret = -1; char *dup = NULL; @@ -62,7 +62,7 @@ int mkdir_r(const char *const path) if (!*dir) /* Path starting with delimiter character. */ ; - else if (mkdir_r_port(dir)) + else if (mkdir_r_port(dir, flags)) goto exit; dir = dup; @@ -19,6 +19,8 @@ /** * Recursive directory creation. * @param path Directory path + * @param flags File mode. Might be ignored if the underlying implementation + * does not support it. * @return 0 if successful, -1 otherwise. * @note Sets @c errno to @c ENOMEM if internal dynamic allocation fails. * @note Sets @c errno to @c EINVAL if an invalid or empty directory path is @@ -26,6 +28,6 @@ * @note Sets @c errno to @c ENOTDIR if one of the elements from @c path is not * a directory. */ -int mkdir_r(const char *const path); +int mkdir_r(const char *const path, int flags); #endif /* MKDIR_R_H */ @@ -19,7 +19,7 @@ #include <sys/stat.h> #include <sys/types.h> -int mkdir_r_port(const char *const dir) +int mkdir_r_port(const char *const dir, const int flags) { if (!access(dir, 0)) { @@ -33,7 +33,7 @@ int mkdir_r_port(const char *const dir) return -1; } } - else if (mkdir(dir, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH)) + else if (mkdir(dir, flags)) return -1; return 0; diff --git a/private_include/mkdir_r_private.h b/private_include/mkdir_r_private.h index 12efdbb..b2e4482 100644 --- a/private_include/mkdir_r_private.h +++ b/private_include/mkdir_r_private.h @@ -19,10 +19,12 @@ /** * Creates a directory using OS-specific API. * @param dir Directory path. + * @param flags File mode. Might be ignored if the underlying implementation + * does not support it. * @return 0 if successful, -1 otherwise. * @note Sets @c errno to @c ENOTDIR if one of the elements from @c path is not * a directory. */ -int mkdir_r_port(const char *const dir); +int mkdir_r_port(const char *const dir, int flags); #endif /* MKDIR_R_PRIVATE_H */ @@ -17,7 +17,7 @@ #include <windows.h> #include <fileapi.h> -int mkdir_r_port(const char *const dir) +int mkdir_r_port(const char *const dir, const int flags) { if (!CreateDirectoryA(dir, NULL)) { |
