diff --git a/src/stdio/tmpfile.c b/src/stdio/tmpfile.c index 525090aa..ccfd0128 100644 --- a/src/stdio/tmpfile.c +++ b/src/stdio/tmpfile.c @@ -8,25 +8,33 @@ char *__randname(char *); FILE *tmpfile(void) { - char s[] = "/tmp/tmpfile_XXXXXX"; int fd; - FILE *f; - int try; - for (try=0; try= 0) { + FILE *f = 0; +#ifdef O_TMPFILE + fd = sys_open("/tmp", O_RDWR|O_TMPFILE); + if (fd == -1) +#endif + { + char s[] = "/tmp/tmpfile_XXXXXX"; + int try; + fd = -1; + for (try=0; try= 0) { #ifdef SYS_unlink - __syscall(SYS_unlink, s); + __syscall(SYS_unlink, s); #else - __syscall(SYS_unlinkat, AT_FDCWD, s, 0); + __syscall(SYS_unlinkat, AT_FDCWD, s, 0); #endif - f = __fdopen(fd, "w+"); - if (!f) __syscall(SYS_close, fd); - return f; - } - } - return 0; + } + } + } + if (fd >= 0) { + f = __fdopen(fd, "w+"); + if (!f) __syscall(SYS_close, fd); + } + return f; } LFS64(tmpfile);