aboutsummaryrefslogtreecommitdiff
path: root/src/utils.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/utils.c')
-rw-r--r--src/utils.c29
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;
+}
+