#include #include #ifdef __BAREBOX__ #include #include #include #endif int make_directory(const char *dir) { char *s = strdup(dir); char *path = s; char c; do { c = 0; /* Bypass leading non-'/'s and then subsequent '/'s. */ while (*s) { if (*s == '/') { do { ++s; } while (*s == '/'); c = *s; /* Save the current char */ *s = 0; /* and replace it with nul. */ break; } ++s; } if (mkdir(path, 0777) < 0) { /* If we failed for any other reason than the directory * already exists, output a diagnostic and return -1.*/ #ifdef __BAREBOX__ if (errno != -EEXIST) #else if (errno != EEXIST) #endif break; } if (!c) goto out; /* Remove any inserted nul from the path (recursive mode). */ *s = c; } while (1); out: free(path); return errno; } #ifdef __BAREBOX__ EXPORT_SYMBOL(make_directory); #endif