summaryrefslogtreecommitdiffstats
path: root/src/pulsecore
diff options
context:
space:
mode:
authorStelian Ionescu <stelian.ionescu-zeus@poste.it>2008-09-23 00:26:31 +0200
committerLennart Poettering <lennart@poettering.net>2008-09-29 21:59:57 +0200
commit564ef2b71fe67b58c5dfd6dd767467dad13f475e (patch)
tree848b1a033fb87e7bc37a2eba2b77fea4f5b5a2e3 /src/pulsecore
parentf5c301d9f475ca62b32f48514d703266bf9b6445 (diff)
have make_random_dir respect $TMPDIR
with the attached patch, make_random_dir first tries to use $TMPDIR, then $TMP finally defaulting to "/tmp" Signed-off-by: Lennart Poettering <lennart@poettering.net>
Diffstat (limited to 'src/pulsecore')
-rw-r--r--src/pulsecore/core-util.c26
1 files changed, 19 insertions, 7 deletions
diff --git a/src/pulsecore/core-util.c b/src/pulsecore/core-util.c
index a9e2a703..d7c5caf8 100644
--- a/src/pulsecore/core-util.c
+++ b/src/pulsecore/core-util.c
@@ -1315,31 +1315,43 @@ static char* make_random_dir(mode_t m) {
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"0123456789";
- char fn[24] = "/tmp/pulse-";
+ const char *tmpdir;
+ char *fn;
+ size_t pathlen;
- fn[sizeof(fn)-1] = 0;
+ if (!(tmpdir = getenv("TMPDIR")))
+ if (!(tmpdir = getenv("TMP")))
+ if (!(tmpdir = getenv("TEMP")))
+ tmpdir = getenv("TEMPDIR");
+
+ if (!tmpdir || !pa_is_path_absolute(tmpdir))
+ tmpdir = "/tmp";
+
+ fn = pa_sprintf_malloc("%s/pulse-XXXXXXXXXXXX", tmpdir);
+ pathlen = strlen(fn);
for (;;) {
- unsigned i;
+ size_t i;
int r;
mode_t u;
int saved_errno;
- for (i = 11; i < sizeof(fn)-1; i++)
+ for (i = pathlen - 12; i < pathlen; i++)
fn[i] = table[rand() % (sizeof(table)-1)];
u = umask((~m) & 0777);
r = mkdir(fn, m);
+
saved_errno = errno;
umask(u);
+ errno = saved_errno;
if (r >= 0)
- return pa_xstrdup(fn);
-
- errno = saved_errno;
+ return fn;
if (errno != EEXIST) {
pa_log_error("Failed to create random directory %s: %s", fn, pa_cstrerror(errno));
+ pa_xfree(fn);
return NULL;
}
}