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.
char *mkdtemp(char *template)
{
char *mkdtemp(char *template)
{
+ int retries = 100, t0 = *template;
- 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 */
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");
}
return 0;
strcpy(template+strlen(template)-6, "XXXXXX");
}
return 0;
int mkstemp(char *template)
{
int mkstemp(char *template)
{
+ int fd, retries = 100, t0 = *template;
- if (!__mktemp(template)) return -1;
+ if (!*__mktemp(template)) return -1;
if ((fd = open(template, O_RDWR | O_CREAT | O_EXCL, 0600))>=0)
return fd;
if (errno != EEXIST) return -1;
/* this is safe because mktemp verified
* that we have a valid template string */
if ((fd = open(template, O_RDWR | O_CREAT | O_EXCL, 0600))>=0)
return fd;
if (errno != EEXIST) return -1;
/* this is safe because mktemp verified
* that we have a valid template string */
strcpy(template+strlen(template)-6, "XXXXXX");
}
return -1;
strcpy(template+strlen(template)-6, "XXXXXX");
}
return -1;
if (access(template, F_OK) < 0) return template;
r = r * 1103515245 + 12345;
}
if (access(template, F_OK) < 0) return template;
r = r * 1103515245 + 12345;
}
}
weak_alias(__mktemp, mktemp);
}
weak_alias(__mktemp, mktemp);