[pulseaudio-discuss] [PATCH v2] core-util: Make pa_make_secure_dir() act like mkdir -p
Arun Raghavan
arun.raghavan at collabora.co.uk
Mon Jun 11 02:14:13 PDT 2012
(Sorry, that was the wrong patch. This is the correct v2, amended for working
with win32).
This makes pa_make_secure_dir() create any missing parent directories in
the given path as well. This is useful, for example, on a pristine
system with a clean $HOME that needs ~/.config/pulse/ to be created when
~/.config does not exist.
---
src/pulsecore/core-util.c | 10 ++++++++++
1 files changed, 10 insertions(+), 0 deletions(-)
diff --git a/src/pulsecore/core-util.c b/src/pulsecore/core-util.c
index 82480c6..dc9412f 100644
--- a/src/pulsecore/core-util.c
+++ b/src/pulsecore/core-util.c
@@ -220,9 +220,11 @@ void pa_make_fd_cloexec(int fd) {
int pa_make_secure_dir(const char* dir, mode_t m, uid_t uid, gid_t gid) {
struct stat st;
int r, saved_errno;
+ pa_bool_t retry = TRUE;
pa_assert(dir);
+again:
#ifdef OS_IS_WIN32
r = mkdir(dir);
#else
@@ -234,6 +236,14 @@ int pa_make_secure_dir(const char* dir, mode_t m, uid_t uid, gid_t gid) {
}
#endif
+ if (r < 0 && errno == ENOENT && retry) {
+ /* If a parent directory in the path doesn't exist, try to create that
+ * first, then try again. */
+ pa_make_secure_parent_dir(dir, m, uid, gid);
+ retry = FALSE;
+ goto again;
+ }
+
if (r < 0 && errno != EEXIST)
return -1;
--
1.7.8.6
More information about the pulseaudio-discuss
mailing list