#include #include #include "stdio_impl.h" #include "pthread_impl.h" #define MAXTRIES 100 char *__randname(char *); FILE *tmpfile(void) { #ifdef O_TMPFILE int fd; FILE *f = 0; fd = sys_open("/tmp", O_RDWR|O_TMPFILE); if (fd >= 0) { f = __fdopen(fd, "w+"); if (!f) __syscall(SYS_close, fd); } return f; #else char s[] = "/tmp/tmpfile_XXXXXX"; FILE *f = 0; int fd; int try; sigset_t saved_mask; pthread_sigmask(SIG_SETMASK, SIGALL_SET, &saved_mask); for (try=0; try= 0) { #ifdef SYS_unlink __syscall(SYS_unlink, s); #else __syscall(SYS_unlinkat, AT_FDCWD, s, 0); #endif pthread_sigmask(SIG_SETMASK, &saved_mask, 0); f = __fdopen(fd, "w+"); if (!f) __syscall(SYS_close, fd); return f; } } pthread_sigmask(SIG_SETMASK, &saved_mask, 0); return 0; #endif /*O_TMPFILE*/ } LFS64(tmpfile);