about summary refs log tree commit diff
path: root/src/temp/mkdtemp.c
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2011-02-19 09:40:07 -0500
committerRich Felker <dalias@aerifal.cx>2011-02-19 09:40:07 -0500
commit69ecbd0f3188be97f91cc0d6415836d23e88f7fc (patch)
tree0d74e8a311a2ec1a8d0be9fa0f09ac09004a448f /src/temp/mkdtemp.c
parent2e6239dd064d201c6e1b0f589bae9ff27949d2eb (diff)
downloadmusl-69ecbd0f3188be97f91cc0d6415836d23e88f7fc.tar.gz
musl-69ecbd0f3188be97f91cc0d6415836d23e88f7fc.tar.xz
musl-69ecbd0f3188be97f91cc0d6415836d23e88f7fc.zip
make mktemp match the historic behavior, and update functions that use it
the historic mktemp is supposed to blank the template string on
failure, rather than returning 0. just zero the first character so
that mkstemp and mkdtemp can still retry with O(1) space requirement.
Diffstat (limited to 'src/temp/mkdtemp.c')
-rw-r--r--src/temp/mkdtemp.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/temp/mkdtemp.c b/src/temp/mkdtemp.c
index f2ecc510..76140c77 100644
--- a/src/temp/mkdtemp.c
+++ b/src/temp/mkdtemp.c
@@ -12,13 +12,14 @@ char *__mktemp(char *);
 
 char *mkdtemp(char *template)
 {
-	int retries = 100;
+	int retries = 100, t0 = *template;
 	while (retries--) {
-		if (!__mktemp(template)) return 0;
+		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");
 	}
 	return 0;