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