diff options
author | Joseph Hunkeler <jhunkeler@users.noreply.github.com> | 2024-08-13 17:42:35 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-08-13 17:42:35 -0400 |
commit | d943633d4d925d7340708371be8abb09adf579fe (patch) | |
tree | 4fd9134ac7d7bd5e8b06eb6b32ee1b7cc0fe4781 /src/utils.c | |
parent | 4550b38cd0db6b89c913af0b3444dfd3f1beba36 (diff) | |
download | stasis-d943633d4d925d7340708371be8abb09adf579fe.tar.gz |
Move mkdirs() into utils module (#26)
Diffstat (limited to 'src/utils.c')
-rw-r--r-- | src/utils.c | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/src/utils.c b/src/utils.c index 70430e1..c0b3733 100644 --- a/src/utils.c +++ b/src/utils.c @@ -772,4 +772,31 @@ long get_cpu_count() { #else return 0; #endif -}
\ No newline at end of file +} + +int mkdirs(const char *_path, mode_t mode) { + int status; + char *token; + char pathbuf[PATH_MAX] = {0}; + char *path; + path = pathbuf; + strcpy(path, _path); + errno = 0; + + char result[PATH_MAX] = {0}; + status = 0; + while ((token = strsep(&path, "/")) != NULL && !status) { + if (token[0] == '.') + continue; + strcat(result, token); + strcat(result, "/"); + status = mkdir(result, mode); + if (status && errno == EEXIST) { + status = 0; + errno = 0; + continue; + } + } + return status; +} + |