summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2015-09-16 20:04:29 +0100
committerMaxime Coste <frrrwww@gmail.com>2015-09-16 20:17:31 +0100
commitc859e8ab5f45cb650a0b62d8756184d1e2d7bc98 (patch)
treed9e300e8370ccfffa2aeaffeac37ba5a1eb078ca /src
parent693d9a4861c7a6019c082c8d1f773c362a56e62e (diff)
Create directory with 0777 mode in make_directory
Fixes #408
Diffstat (limited to 'src')
-rw-r--r--src/file.cc10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/file.cc b/src/file.cc
index 65d01912..9810a3d5 100644
--- a/src/file.cc
+++ b/src/file.cc
@@ -304,8 +304,14 @@ void make_directory(StringView dir)
if (not S_ISDIR(st.st_mode))
throw runtime_error(format("Cannot make directory, '{}' exists but is not a directory", dirname));
}
- else if (mkdir(dirname.zstr(), S_IRWXU) != 0)
- throw runtime_error(format("mkdir failed for directory '{}' errno {}", dirname, errno));
+ else
+ {
+ auto old_mask = umask(0);
+ auto restore_mask = on_scope_end([old_mask]() { umask(old_mask); });
+
+ if (mkdir(dirname.zstr(), S_IRWXU | S_IRWXG | S_IRWXO) != 0)
+ throw runtime_error(format("mkdir failed for directory '{}' errno {}", dirname, errno));
+ }
}
}