X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=src%2Fstdio%2Ftmpnam.c;h=449eb9b0708c2a5d295db76f1e944059f6789f9b;hb=51fc77c7c03fa0b300e9a609b18f11f0e4db065a;hp=14d59220acddd78a0e6f83454d872c847a5537a4;hpb=0b44a0315b47dd8eced9f3b7f31580cf14bbfc01;p=musl diff --git a/src/stdio/tmpnam.c b/src/stdio/tmpnam.c index 14d59220..449eb9b0 100644 --- a/src/stdio/tmpnam.c +++ b/src/stdio/tmpnam.c @@ -1,38 +1,29 @@ #include -#include +#include +#include +#include #include -#include -#include -#include "libc.h" +#include "syscall.h" -char *tmpnam(char *s) -{ - static int lock; - static int index; - static char *s2; - int pid = getpid(); - char *dir = getenv("TMPDIR"); - - if (!s) { - if (!s2) s2 = malloc(L_tmpnam); - s = s2; - } +#define MAXTRIES 100 - /* this interface is insecure anyway but at least we can try.. */ - if (!dir || strlen(dir) > L_tmpnam-32) - dir = P_tmpdir; +char *__randname(char *); - if (access(dir, R_OK|W_OK|X_OK) != 0) - return NULL; - - LOCK(&lock); - for (index++; index < TMP_MAX; index++) { - snprintf(s, L_tmpnam, "%s/temp%d-%d", dir, pid, index); - if (access(s, F_OK) != 0) { - UNLOCK(&lock); - return s; - } +char *tmpnam(char *buf) +{ + static char internal[L_tmpnam]; + char s[] = "/tmp/tmpnam_XXXXXX"; + int try; + int r; + for (try=0; try