View | Details | Raw Unified | Return to bug 16924
Collapse All | Expand All

(-)tmpfile.c (-3 / +20 lines)
Lines 47-52 Link Here
47
#include <stdio.h>
47
#include <stdio.h>
48
#include <string.h>
48
#include <string.h>
49
#include <paths.h>
49
#include <paths.h>
50
#include <stdlib.h>
50
51
51
FILE *
52
FILE *
52
tmpfile()
53
tmpfile()
Lines 55-64 Link Here
55
	FILE *fp;
56
	FILE *fp;
56
	int fd, sverrno;
57
	int fd, sverrno;
57
#define	TRAILER	"tmp.XXXXXX"
58
#define	TRAILER	"tmp.XXXXXX"
58
	char buf[sizeof(_PATH_TMP) + sizeof(TRAILER)];
59
	char *buf;
60
	char *envtmpdir;
61
	int envtmpdirlen;
59
62
60
	(void)memcpy(buf, _PATH_TMP, sizeof(_PATH_TMP) - 1);
63
	if ((envtmpdir = getenv("TMPDIR")) != NULL)
61
	(void)memcpy(buf + sizeof(_PATH_TMP) - 1, TRAILER, sizeof(TRAILER));
64
	{
65
		envtmpdirlen = strlen(envtmpdir);
66
		buf = malloc(envtmpdirlen + 1 + sizeof(TRAILER));
67
		(void)memcpy(buf, envtmpdir, envtmpdirlen);
68
		buf[envtmpdirlen] = '/';
69
		(void)memcpy(buf + envtmpdirlen + 1, TRAILER, sizeof(TRAILER));
70
	}
71
	else
72
	{
73
		buf = malloc(sizeof(_PATH_TMP) + sizeof(TRAILER) - 1);
74
		(void)memcpy(buf, _PATH_TMP, sizeof(_PATH_TMP) - 1);
75
		(void)memcpy(buf + sizeof(_PATH_TMP) - 1, TRAILER, sizeof(TRAILER));
76
	}
62
77
63
	sigfillset(&set);
78
	sigfillset(&set);
64
	(void)sigprocmask(SIG_BLOCK, &set, &oset);
79
	(void)sigprocmask(SIG_BLOCK, &set, &oset);
Lines 66-71 Link Here
66
	fd = mkstemp(buf);
81
	fd = mkstemp(buf);
67
	if (fd != -1)
82
	if (fd != -1)
68
		(void)unlink(buf);
83
		(void)unlink(buf);
84
85
	free(buf);
69
86
70
	(void)sigprocmask(SIG_SETMASK, &oset, NULL);
87
	(void)sigprocmask(SIG_SETMASK, &oset, NULL);

Return to bug 16924