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; +}  | 
