diff --git a/src/bee-dep.c b/src/bee-dep.c index 65f53a0..a40a999 100644 --- a/src/bee-dep.c +++ b/src/bee-dep.c @@ -34,8 +34,6 @@ #include #include #include -#include -#include #include "graph.h" @@ -159,37 +157,24 @@ static FILE *open_and_lock(char *filename, char *mode) return f; } -/* create all directories in path with mode mode */ int mkdirp(char *path, mode_t mode) { - char *dir, *pdir, *end; - int ret; - - assert(path); - - dir = end = path; - - while(*dir) { - /* skip "/" */ - dir = end + strspn(end, "/"); - - /* skip non-"/" */ - end = dir + strcspn(dir, "/"); - - /* grab everything in path till current end */ - if(!(pdir = strndup(path, end - path))) - return -1; + char *dir, *pdir; + struct stat st; - /* create the directory ; ignore err if it already exists */ - ret = mkdir(pdir, mode); + if(path == NULL) { + return -1; + } - free(pdir); + dir = strdup(path); + pdir = dirname(dir); + if(stat(pdir, &st) == -1) { + mkdirp(pdir, mode); + } - if(ret == -1 && errno != EEXIST) - return -1; - } + free(dir); - return 0; + return mkdir(path, mode); } int main(int argc, char *argv[]) @@ -197,7 +182,7 @@ int main(int argc, char *argv[]) int c, help, rebuild, update, remove, print, options; char found; char cachefile[PATH_MAX + 1], path[PATH_MAX + 1], tmp[PATH_MAX + 1]; - char *bee_metadir, *bee_cachedir, *pkgname; + char *bee_metadir, *bee_cachedir, *dir, *pkgname; struct hash *graph; struct stat st; FILE *cache; @@ -272,11 +257,18 @@ int main(int argc, char *argv[]) exit(EXIT_FAILURE); } - if (mkdirp(bee_cachedir, 0755) == -1) { - perror("bee-dep: mkdirp"); + dir = strdup(cachefile); + dir = dirname(dir); + + if (stat(dir, &st) == -1 && mkdirp(dir, 0755) == -1) { + perror("bee-dep: mkdir"); exit(EXIT_FAILURE); } + free(dir); + + graph = NULL; + found = (stat(cachefile, &st) != -1 && S_ISREG(st.st_mode)); graph = hash_new();