Quoting Richard Weinberger (rich...@nod.at): > Reimplement mkdir_p() such that it: > ...handles relativ paths correctly. (currently it crashes) > ...does not rely on dirname(). > ...is not recursive. > ...is shorter. ;-) > > Signed-off-by: Richard Weinberger <rich...@nod.at>
Thanks, this looks great. Acked-by: Serge E. Hallyn <serge.hal...@ubuntu.com> > --- > src/lxc/utils.c | 46 +++++++++++++++------------------------------- > 1 file changed, 15 insertions(+), 31 deletions(-) > > diff --git a/src/lxc/utils.c b/src/lxc/utils.c > index e07ca7b..6a154f9 100644 > --- a/src/lxc/utils.c > +++ b/src/lxc/utils.c > @@ -95,39 +95,23 @@ extern int get_u16(unsigned short *val, const char *arg, > int base) > return 0; > } > > -static int is_all_slashes(char *path) > -{ > - while (*path && *path == '/') > - path++; > - if (*path) > - return 0; > - return 1; > -} > - > extern int mkdir_p(char *dir, mode_t mode) > { > - int ret; > - char *d; > - > - if (is_all_slashes(dir)) > - return 0; > - > - d = strdup(dir); > - if (!d) > - return -1; > - > - ret = mkdir_p(dirname(d), mode); > - free(d); > - if (ret) > - return -1; > - > - if (!access(dir, F_OK)) > - return 0; > - > - if (mkdir(dir, mode)) { > - SYSERROR("failed to create directory '%s'\n", dir); > - return -1; > - } > + char *tmp = dir; > + char *orig = dir; > + char *makeme; > + > + do { > + dir = tmp + strspn(tmp, "/"); > + tmp = dir + strcspn(dir, "/"); > + makeme = strndupa(orig, dir - orig); > + if (*makeme) { > + if (mkdir(makeme, mode) && errno != EEXIST) { > + SYSERROR("failed to create directory '%s'\n", > makeme); > + return -1; > + } > + } > + } while(tmp != dir); > > return 0; > } > -- > 1.8.1.4 > ------------------------------------------------------------------------------ Precog is a next-generation analytics platform capable of advanced analytics on semi-structured data. The platform includes APIs for building apps and a phenomenal toolset for data science. Developers can use our toolset for easy data analysis & visualization. Get a free account! http://www2.precog.com/precogplatform/slashdotnewsletter _______________________________________________ Lxc-devel mailing list Lxc-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/lxc-devel