diff options
author | Rich Felker <dalias@aerifal.cx> | 2013-02-20 22:43:23 -0500 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2013-02-20 22:43:23 -0500 |
commit | 2cc63358cdb0309ca996ffe56ccf402c2f2f16d5 (patch) | |
tree | 067001fb5f1a5a09de6d8417c5d1d80249e382ce /src/temp/mktemp.c | |
parent | f78cdbe8993d072bf60a65754544199016a1fe29 (diff) | |
download | musl-2cc63358cdb0309ca996ffe56ccf402c2f2f16d5.tar.gz musl-2cc63358cdb0309ca996ffe56ccf402c2f2f16d5.tar.bz2 musl-2cc63358cdb0309ca996ffe56ccf402c2f2f16d5.tar.xz musl-2cc63358cdb0309ca996ffe56ccf402c2f2f16d5.zip |
add mkostemp, mkstemps, and mkostemps functions and reorganize temp internals
based on patch contributed by Anthony G. Basile (blueness)
some issues remain with the filename generation algorithm and other
small bugs, but this patch has been sitting around long enough that I
feel it's best to get it committed and then work out any remaining
issues.
Diffstat (limited to 'src/temp/mktemp.c')
-rw-r--r-- | src/temp/mktemp.c | 14 |
1 files changed, 4 insertions, 10 deletions
diff --git a/src/temp/mktemp.c b/src/temp/mktemp.c index c0e06f5e..ed2c103e 100644 --- a/src/temp/mktemp.c +++ b/src/temp/mktemp.c @@ -1,17 +1,14 @@ #include <string.h> -#include <stdio.h> -#include <stdlib.h> #include <fcntl.h> #include <unistd.h> #include <errno.h> -#include <time.h> -#include <stdint.h> #include "libc.h" +char *__randname(char *); + char *__mktemp(char *template) { - struct timespec ts; - size_t i, l = strlen(template); + size_t l = strlen(template); int retries = 10000; unsigned long r; @@ -21,10 +18,7 @@ char *__mktemp(char *template) return template; } while (retries--) { - clock_gettime(CLOCK_REALTIME, &ts); - r = ts.tv_nsec + (uintptr_t)&ts / 16 + (uintptr_t)template; - for (i=1; i<=6; i++, r>>=4) - template[l-i] = 'A'+(r&15); + __randname(template+l-6); if (access(template, F_OK) < 0) return template; } *template = 0; |