X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=src%2Ftemp%2Fmkdtemp.c;h=5708257bfecf6ae3e05a5e9fdd0e7054a96d0a7c;hb=a0993f8f0f161423ecdcb754f282ffd2fe47a7b5;hp=76140c77591c781fe00d10b2075dff1a4098d169;hpb=69ecbd0f3188be97f91cc0d6415836d23e88f7fc;p=musl diff --git a/src/temp/mkdtemp.c b/src/temp/mkdtemp.c index 76140c77..5708257b 100644 --- a/src/temp/mkdtemp.c +++ b/src/temp/mkdtemp.c @@ -1,26 +1,23 @@ #include -#include #include -#include -#include -#include #include #include -#include "libc.h" - -char *__mktemp(char *); char *mkdtemp(char *template) { - int retries = 100, t0 = *template; - while (retries--) { - if (!*__mktemp(template)) return 0; - if (!mkdir(template, 0700)) return template; - if (errno != EEXIST) return 0; - /* this is safe because mktemp verified - * that we have a valid template string */ - template[0] = t0; - strcpy(template+strlen(template)-6, "XXXXXX"); + size_t l = strlen(template); + int retries = 100; + + if (l<6 || memcmp(template+l-6, "XXXXXX", 6)) { + errno = EINVAL; + return 0; } + + do { + __randname(template+l-6); + if (!mkdir(template, 0700)) return template; + } while (--retries && errno == EEXIST); + + memcpy(template+l-6, "XXXXXX", 6); return 0; }