This reverts commit 8de4140644f01180f2fdab55b0ab0f13d1c761c6.

This commit was preventing container startup on my machine, making them
all fail with various "No such file or directory" errors.

Signed-off-by: Stéphane Graber <stgra...@ubuntu.com>
---
 src/lxc/utils.c | 48 +++++++++++++++++++++++++++++++-----------------
 1 file changed, 31 insertions(+), 17 deletions(-)

diff --git a/src/lxc/utils.c b/src/lxc/utils.c
index 9794553..e07ca7b 100644
--- a/src/lxc/utils.c
+++ b/src/lxc/utils.c
@@ -95,25 +95,39 @@ 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)
 {
-       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 (!access(makeme, F_OK))
-                               return 0;
-                       if (mkdir(makeme, mode)) {
-                               SYSERROR("failed to create directory '%s'\n", 
makeme);
-                               return -1;
-                       }
-               }
-       } while(tmp != dir);
+       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;
+       }
 
        return 0;
 }
-- 
1.8.1.2


------------------------------------------------------------------------------
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

Reply via email to