overhaul tmpfile, tmpnam, and tempnam functions

these all now use the shared __randname function internally, rather
than duplicating logic for producing a random name. incorrect usage of
the access syscall (which works with real uid/gid, not effective) has
been removed, along with unnecessary heavy dependencies like snprintf.
This commit is contained in:
Rich Felker
2014-05-27 00:44:23 -04:00
parent 9b880a6b41
commit 2fe6579125
3 changed files with 48 additions and 55 deletions
+4 -4
View File
@@ -1,19 +1,19 @@
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include "stdio_impl.h"
#define MAXTRIES 100
char *__randname(char *);
FILE *tmpfile(void)
{
char buf[L_tmpnam], *s;
char s[] = "/tmp/tmpfile_XXXXXX";
int fd;
FILE *f;
int try;
for (try=0; try<MAXTRIES; try++) {
s = tmpnam(buf);
if (!s) return 0;
__randname(s+13);
fd = sys_open(s, O_RDWR|O_CREAT|O_EXCL, 0600);
if (fd >= 0) {
f = __fdopen(fd, "w+");