diff options
Diffstat (limited to 'libc/stdlib/mkstemp.c')
-rw-r--r-- | libc/stdlib/mkstemp.c | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/libc/stdlib/mkstemp.c b/libc/stdlib/mkstemp.c new file mode 100644 index 000000000..d65ada4f7 --- /dev/null +++ b/libc/stdlib/mkstemp.c @@ -0,0 +1,43 @@ + +#include <features.h> +#include <unistd.h> +#include <fcntl.h> + +int mkstemp(template) +char * template; +{ + int i; + int num; /* UNINITIALIZED */ + int n2; + int l = strlen(template); + + if (l<6) { + errno = EINVAL; + return -1; + } + + for(i=l-6;i<l;i++) + if (template[i] != 'X') { + errno = EINVAL; + return -1; + } + +again: + n2 = num; + for(i=l-1;i>=l-6;i--) { + template[i] = '0' + n2 % 10; + n2 /= 10; + } + + i = open(template, O_RDWR|O_EXCL|O_CREAT, 0666); + + if (i==-1) { + if (errno == EEXIST) { + num++; + goto again; + } else + return -1; + } + + return i; +} |