summaryrefslogtreecommitdiff
path: root/Src
diff options
context:
space:
mode:
Diffstat (limited to 'Src')
-rw-r--r--Src/utils.c24
1 files changed, 15 insertions, 9 deletions
diff --git a/Src/utils.c b/Src/utils.c
index f07cd7811..31e9c2b26 100644
--- a/Src/utils.c
+++ b/Src/utils.c
@@ -1122,28 +1122,34 @@ zclose(int fd)
return -1;
}
-/* Get a file name relative to $TMPPREFIX which *
- * is unique, for use as a temporary file. */
-
#ifdef HAVE__MKTEMP
extern char *_mktemp(char *);
#endif
+/* Get a unique filename for use as a temporary file. If "prefix" is
+ * NULL, the name is relative to $TMPPREFIX; If it is non-NULL, the
+ * unique suffix includes a prefixed '.' for improved readability. If
+ * "use_heap" is true, we allocate the returned name on the heap. */
+
/**/
mod_export char *
-gettempname(void)
+gettempname(const char *prefix, int use_heap)
{
- char *s, *ret;
+ char *ret, *suffix = prefix ? ".XXXXXX" : "XXXXXX";
queue_signals();
- if (!(s = getsparam("TMPPREFIX")))
- s = DEFAULT_TMPPREFIX;
+ if (!prefix && !(prefix = getsparam("TMPPREFIX")))
+ prefix = DEFAULT_TMPPREFIX;
+ if (use_heap)
+ ret = dyncat(unmeta(prefix), suffix);
+ else
+ ret = bicat(unmeta(prefix), suffix);
#ifdef HAVE__MKTEMP
/* Zsh uses mktemp() safely, so silence the warnings */
- ret = ((char *) _mktemp(dyncat(unmeta(s), "XXXXXX")));
+ ret = (char *) _mktemp(ret);
#else
- ret = ((char *) mktemp(dyncat(unmeta(s), "XXXXXX")));
+ ret = (char *) mktemp(ret);
#endif
unqueue_signals();