[lxc-devel] [PATCH 1/2] Revert "utils: reimplement/fix mkdir_p()"
Stéphane Graber
stgraber at ubuntu.com
Thu Apr 18 08:32:28 UTC 2013
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 <stgraber at 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
More information about the lxc-devel
mailing list