musl/src/stdio/tmpfile.c
Rich Felker 60158bff74 fix fd leak in tmpfile when the fdopen operation fails
this condition could only happen due to malloc failure.

the fdopen operation is also moved to take place after the unlink to
minimize the window during which a link to the file exists in the
directory table.
2014-06-06 03:17:47 -04:00

33 lines
538 B
C

#include <stdio.h>
#include <fcntl.h>
#include "stdio_impl.h"
#define MAXTRIES 100
char *__randname(char *);
FILE *tmpfile(void)
{
char s[] = "/tmp/tmpfile_XXXXXX";
int fd;
FILE *f;
int try;
for (try=0; try<MAXTRIES; try++) {
__randname(s+13);
fd = sys_open(s, O_RDWR|O_CREAT|O_EXCL, 0600);
if (fd >= 0) {
#ifdef SYS_unlink
__syscall(SYS_unlink, s);
#else
__syscall(SYS_unlinkat, AT_FDCWD, s, 0);
#endif
f = __fdopen(fd, "w+");
if (!f) __syscall(SYS_close, fd);
return f;
}
}
return 0;
}
LFS64(tmpfile);