X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=src%2Fstdio%2Ftmpnam.c;h=6c7c253a6d6ef94bed9e4a10c08ceb7b39b1901c;hb=54316a52b2119edf73e274c8b4f25d7757f7b4d3;hp=14d59220acddd78a0e6f83454d872c847a5537a4;hpb=0b44a0315b47dd8eced9f3b7f31580cf14bbfc01;p=musl diff --git a/src/stdio/tmpnam.c b/src/stdio/tmpnam.c index 14d59220..6c7c253a 100644 --- a/src/stdio/tmpnam.c +++ b/src/stdio/tmpnam.c @@ -1,38 +1,28 @@ #include -#include +#include +#include +#include #include -#include -#include -#include "libc.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; - } - - /* this interface is insecure anyway but at least we can try.. */ - if (!dir || strlen(dir) > L_tmpnam-32) - dir = P_tmpdir; +#include +#include "syscall.h" - if (access(dir, R_OK|W_OK|X_OK) != 0) - return NULL; +#define MAXTRIES 100 - 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