summaryrefslogtreecommitdiff
path: root/Src/utils.c
diff options
context:
space:
mode:
authorWayne Davison <wayned@users.sourceforge.net>2004-10-18 19:07:46 +0000
committerWayne Davison <wayned@users.sourceforge.net>2004-10-18 19:07:46 +0000
commit1637c4eba690a60cd90dde0d81a3b1ebb0dac68b (patch)
treef0662b9229268b065b5eb91f1c44792363bf4578 /Src/utils.c
parent945a40f7e69dcbd194a2a45889512c8849dce2c9 (diff)
downloadzsh-1637c4eba690a60cd90dde0d81a3b1ebb0dac68b.tar.gz
zsh-1637c4eba690a60cd90dde0d81a3b1ebb0dac68b.zip
Made gettempname() take a prefix arg and a use_heap arg. When prefix is
non-NULL, it uses the specified prefix instead of $TMPPREFIX.
Diffstat (limited to 'Src/utils.c')
-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();