X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=src%2Ftemp%2Fmkdtemp.c;h=195e9cbabb87dbe66baf020600a6dfcfa8a1f065;hb=c599f4f4d705ba215a2672b92baa1c29d9dd0735;hp=162d98b0e38b1cfd760e80c7736f97fce1e0c03d;hpb=5377715ce07269131f011e6f4e978fb5dbf0b294;p=musl diff --git a/src/temp/mkdtemp.c b/src/temp/mkdtemp.c index 162d98b0..195e9cba 100644 --- a/src/temp/mkdtemp.c +++ b/src/temp/mkdtemp.c @@ -8,16 +8,23 @@ #include #include "libc.h" -char *__mktemp(char *); +char *__randname(char *); char *mkdtemp(char *template) { - for (;;) { - 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 */ - 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; }