| OLD | NEW |
| 1 #include <stdio.h> | 1 #include <stdio.h> |
| 2 #include <fcntl.h> | 2 #include <fcntl.h> |
| 3 #include <unistd.h> |
| 3 #include "stdio_impl.h" | 4 #include "stdio_impl.h" |
| 4 | 5 |
| 5 #define MAXTRIES 100 | 6 #define MAXTRIES 100 |
| 6 | 7 |
| 7 char* __randname(char*); | 8 char* __randname(char*); |
| 8 | 9 |
| 9 FILE* tmpfile(void) { | 10 FILE* tmpfile(void) { |
| 10 char s[] = "/tmp/tmpfile_XXXXXX"; | 11 char s[] = "/tmp/tmpfile_XXXXXX"; |
| 11 int fd; | 12 int fd; |
| 12 FILE* f; | 13 FILE* f; |
| 13 int try | 14 int try |
| 14 ; | 15 ; |
| 15 for (try = 0; try < MAXTRIES; try ++) { | 16 for (try = 0; try < MAXTRIES; try ++) { |
| 16 __randname(s + 13); | 17 __randname(s + 13); |
| 17 fd = sys_open(s, O_RDWR | O_CREAT | O_EXCL, 0600); | 18 fd = sys_open(s, O_RDWR | O_CREAT | O_EXCL, 0600); |
| 18 if (fd >= 0) { | 19 if (fd >= 0) { |
| 19 #ifdef SYS_unlink | 20 unlink(s); |
| 20 __syscall(SYS_unlink, s); | |
| 21 #else | |
| 22 __syscall(SYS_unlinkat, AT_FDCWD, s, 0); | |
| 23 #endif | |
| 24 f = __fdopen(fd, "w+"); | 21 f = __fdopen(fd, "w+"); |
| 25 if (!f) | 22 if (!f) |
| 26 __syscall(SYS_close, fd); | 23 __syscall(SYS_close, fd); |
| 27 return f; | 24 return f; |
| 28 } | 25 } |
| 29 } | 26 } |
| 30 return 0; | 27 return 0; |
| 31 } | 28 } |
| OLD | NEW |