1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- #include <string.h>
- #include <features.h>
- #include <errno.h>
- #include <unistd.h>
- #include <fcntl.h>
- int mkstemp(template)
- char *template;
- {
- int i;
- int num __attribute__ ((unused)); /* 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;
- }
|