|
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); |