diff options
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; +} + |