diff options
author | Rich Felker <dalias@aerifal.cx> | 2013-08-02 00:48:48 -0400 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2013-08-02 00:48:48 -0400 |
commit | c4685ae429a0cce4b285859d62a71fe603f0a864 (patch) | |
tree | 7f6ea3b81689b5d4d96b61df8894c7352d13f572 /src/temp/mkostemps.c | |
parent | 926272ddffa293ee68ffeb01422fc8c792acf428 (diff) | |
download | musl-c4685ae429a0cce4b285859d62a71fe603f0a864.tar.gz musl-c4685ae429a0cce4b285859d62a71fe603f0a864.tar.xz musl-c4685ae429a0cce4b285859d62a71fe603f0a864.zip |
make mkdtemp and mkstemp family leave template unchanged on fail
also refactor mkdtemp based on new shared temp code, removing dependency on the deprecated mktemp, whose behavior made this logic more difficult.
Diffstat (limited to 'src/temp/mkostemps.c')
-rw-r--r-- | src/temp/mkostemps.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/src/temp/mkostemps.c b/src/temp/mkostemps.c index 8cc01e37..7f8492a1 100644 --- a/src/temp/mkostemps.c +++ b/src/temp/mkostemps.c @@ -16,12 +16,13 @@ int __mkostemps(char *template, int len, int flags) } int fd, retries = 100; - while (retries--) { + do { __randname(template+l-len-6); if ((fd = open(template, flags | O_RDWR | O_CREAT | O_EXCL, 0600))>=0) return fd; - if (errno != EEXIST) return -1; - } + } while (--retries && errno == EEXIST); + + memcpy(template+l-len-6, "XXXXXX", 6); return -1; } |