initial check-in, version 0.5.0
This commit is contained in:
commit
0b44a0315b
1021 changed files with 45711 additions and 0 deletions
21
src/temp/mkdtemp.c
Normal file
21
src/temp/mkdtemp.c
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <fcntl.h>
|
||||
#include <unistd.h>
|
||||
#include <limits.h>
|
||||
#include <errno.h>
|
||||
#include <sys/stat.h>
|
||||
#include "libc.h"
|
||||
|
||||
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");
|
||||
}
|
||||
}
|
||||
26
src/temp/mkstemp.c
Normal file
26
src/temp/mkstemp.c
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <fcntl.h>
|
||||
#include <unistd.h>
|
||||
#include <limits.h>
|
||||
#include <errno.h>
|
||||
#include "libc.h"
|
||||
|
||||
int mkstemp(char *template)
|
||||
{
|
||||
int fd;
|
||||
retry:
|
||||
if (!mktemp(template)) return -1;
|
||||
fd = open(template, O_RDWR | O_CREAT | O_EXCL, 0600);
|
||||
if (fd >= 0) return fd;
|
||||
if (errno == EEXIST) {
|
||||
/* this is safe because mktemp verified
|
||||
* that we have a valid template string */
|
||||
strcpy(template+strlen(template)-6, "XXXXXX");
|
||||
goto retry;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
LFS64(mkstemp);
|
||||
29
src/temp/mktemp.c
Normal file
29
src/temp/mktemp.c
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <fcntl.h>
|
||||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
#include "libc.h"
|
||||
|
||||
char *mktemp(char *template)
|
||||
{
|
||||
static int lock;
|
||||
static int index;
|
||||
int l = strlen(template);
|
||||
|
||||
if (l < 6 || strcmp(template+l-6, "XXXXXX")) {
|
||||
errno = EINVAL;
|
||||
return NULL;
|
||||
}
|
||||
LOCK(&lock);
|
||||
for (; index < 1000000; index++) {
|
||||
snprintf(template+l-6, 6, "%06d", index);
|
||||
if (access(template, F_OK) != 0) {
|
||||
UNLOCK(&lock);
|
||||
return template;
|
||||
}
|
||||
}
|
||||
UNLOCK(&lock);
|
||||
return NULL;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue