lib: mkdtemp(), contributed by by Gautam Tirumala
This commit is contained in:
parent
2639ae9b17
commit
8a0c10fcb9
2 changed files with 19 additions and 6 deletions
|
@ -101,6 +101,7 @@ extern char *optarg;
|
||||||
extern int optind, opterr, optopt;
|
extern int optind, opterr, optopt;
|
||||||
|
|
||||||
_PROTOTYPE(size_t shquote, (const char *arg, char *buf, size_t bufsize));
|
_PROTOTYPE(size_t shquote, (const char *arg, char *buf, size_t bufsize));
|
||||||
|
_PROTOTYPE(char *mkdtemp, (char *path));
|
||||||
|
|
||||||
#endif /* _MINIX */
|
#endif /* _MINIX */
|
||||||
|
|
||||||
|
|
|
@ -44,7 +44,7 @@ static char sccsid[] = "@(#)mktemp.c 8.1 (Berkeley) 6/4/93";
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
static int _gettemp(char*,int*);
|
static int _gettemp(char*,int*,int);
|
||||||
|
|
||||||
int
|
int
|
||||||
mkstemp(path)
|
mkstemp(path)
|
||||||
|
@ -52,20 +52,28 @@ mkstemp(path)
|
||||||
{
|
{
|
||||||
int fd;
|
int fd;
|
||||||
|
|
||||||
return (_gettemp(path, &fd) ? fd : -1);
|
return (_gettemp(path, &fd, 0) ? fd : -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
char *
|
char *
|
||||||
mktemp(path)
|
mktemp(path)
|
||||||
char *path;
|
char *path;
|
||||||
{
|
{
|
||||||
return(_gettemp(path, (int *)NULL) ? path : (char *)NULL);
|
return(_gettemp(path, (int *)NULL, 0) ? path : (char *)NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
char *
|
||||||
|
mkdtemp(path)
|
||||||
|
char *path;
|
||||||
|
{
|
||||||
|
return(_gettemp(path, (int *)NULL, 1) ? path : (char *)NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
_gettemp(path, doopen)
|
_gettemp(path, doopen, domkdir)
|
||||||
char *path;
|
char *path;
|
||||||
register int *doopen;
|
register int *doopen;
|
||||||
|
int domkdir;
|
||||||
{
|
{
|
||||||
extern int errno;
|
extern int errno;
|
||||||
register char *start, *trv;
|
register char *start, *trv;
|
||||||
|
@ -132,8 +140,12 @@ _gettemp(path, doopen)
|
||||||
if (errno != EEXIST) {
|
if (errno != EEXIST) {
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
}
|
} else if(domkdir) {
|
||||||
else if (stat(path, &sbuf)) {
|
if (mkdir(path, 0700) >= 0)
|
||||||
|
return (1);
|
||||||
|
if (errno != EEXIST)
|
||||||
|
return (0);
|
||||||
|
} else if (stat(path, &sbuf)) {
|
||||||
return(errno == ENOENT ? 1 : 0);
|
return(errno == ENOENT ? 1 : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue