6895N/A===================================================================
6895N/A /* Don't complain if you can't unlink. Who cares of a tmp file? */
6895N/A+ * Securely generate a temp file, and make sure it gets
6895N/A+static unsigned ntempfiles;
6895N/A+ unlink(tempfiles[ntempfiles]);
6895N/A+safe_tempnam(const char *pfx)
6895N/A+ if (!(dirname = getenv("TMPDIR")))
6895N/A+ tempfiles = (char **) realloc(tempfiles,
6895N/A+ (ntempfiles+1) * sizeof(char *));
6895N/A+ filename = malloc(strlen(dirname) + strlen(pfx) + sizeof("/XXXXXX"));
6895N/A+ sprintf(filename, "%s/%sXXXXXX", dirname, pfx);
6895N/A+ if ((fd = mkstemp(filename)) < 0) {
6895N/A+ atexit(cleanup_tempfiles);
6895N/A+ tempfiles[ntempfiles++] = filename;
6895N/A===================================================================
6895N/A /* If _STR_ is not defined, give it a tempname in _TMPDIR_ */
6895N/A #define tempname_ensure(Str) \
6895N/A- (Str) = (Str) ? (Str) : tempnam (NULL, "a2_"); \
6895N/A+ (Str) = (Str) ? (Str) : safe_tempnam("a2_"); \
6895N/A+char * safe_tempnam(const char *);