Attempt to use the environment variable TMPDIR for the temporary
directory, defaulting to /tmp. PR: bin/16924 Reviewed by: dd MFC after: 2 weeks
This commit is contained in:
parent
3b2b0a59d0
commit
0bada8603d
@ -46,6 +46,7 @@ static char sccsid[] = "@(#)tmpfile.c 8.1 (Berkeley) 6/4/93";
|
||||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <paths.h>
|
||||
#include "un-namespace.h"
|
||||
@ -57,10 +58,17 @@ tmpfile()
|
||||
FILE *fp;
|
||||
int fd, sverrno;
|
||||
#define TRAILER "tmp.XXXXXX"
|
||||
char buf[sizeof(_PATH_TMP) + sizeof(TRAILER)];
|
||||
char *buf;
|
||||
const char *tmpdir;
|
||||
|
||||
(void)memcpy(buf, _PATH_TMP, sizeof(_PATH_TMP) - 1);
|
||||
(void)memcpy(buf + sizeof(_PATH_TMP) - 1, TRAILER, sizeof(TRAILER));
|
||||
tmpdir = getenv("TMPDIR");
|
||||
if (tmpdir == NULL)
|
||||
tmpdir = _PATH_TMP;
|
||||
|
||||
(void)asprintf(&buf, "%s%s%s", tmpdir,
|
||||
(tmpdir[strlen(tmpdir) - 1] == '/') ? "" : "/", TRAILER);
|
||||
if (buf == NULL)
|
||||
return (NULL);
|
||||
|
||||
sigfillset(&set);
|
||||
(void)_sigprocmask(SIG_BLOCK, &set, &oset);
|
||||
@ -69,6 +77,8 @@ tmpfile()
|
||||
if (fd != -1)
|
||||
(void)unlink(buf);
|
||||
|
||||
free(buf);
|
||||
|
||||
(void)_sigprocmask(SIG_SETMASK, &oset, NULL);
|
||||
|
||||
if (fd == -1)
|
||||
|
@ -67,6 +67,13 @@ returns, causing the file to be automatically deleted when the last
|
||||
reference to it is closed.
|
||||
The file is opened with the access value
|
||||
.Ql w+ .
|
||||
The file is created in the directory determined by the environment variable
|
||||
.Ev TMPDIR
|
||||
if set.
|
||||
The default location if
|
||||
.Ev TMPDIR
|
||||
is not set is
|
||||
.Pa /tmp .
|
||||
.Pp
|
||||
The
|
||||
.Fn tmpnam
|
||||
|
Loading…
Reference in New Issue
Block a user