summaryrefslogtreecommitdiff
path: root/libbb/make_directory.c
diff options
context:
space:
mode:
Diffstat (limited to 'libbb/make_directory.c')
-rw-r--r--libbb/make_directory.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/libbb/make_directory.c b/libbb/make_directory.c
index 7b7fde9..a06a410 100644
--- a/libbb/make_directory.c
+++ b/libbb/make_directory.c
@@ -50,13 +50,17 @@ int make_directory (char *path, long mode, int flags)
if (stat (path, &st) < 0 && errno == ENOENT) {
int status;
- char *parent = dirname (path);
- mode_t mask = umask (0);
+ char *buf, *parent;
+ mode_t mask;
+
+ mask = umask (0);
umask (mask);
+ buf = xstrdup (path);
+ parent = dirname (buf);
status = make_directory (parent, (0777 & ~mask) | 0300,
FILEUTILS_RECUR);
- free (parent);
+ free (buf);
if (status < 0 || make_directory (path, mode, 0) < 0)
return -1;