mktemp.c 612 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. #include <string.h>
  2. #include <features.h>
  3. #include <errno.h>
  4. #include <unistd.h>
  5. #include <fcntl.h>
  6. #include <sys/stat.h>
  7. char *mktemp(template)
  8. char *template;
  9. {
  10. int i;
  11. int num __attribute__ ((unused)); /* UNINITIALIZED */
  12. int n2;
  13. int l = strlen(template);
  14. struct stat stbuf;
  15. if (l < 6) {
  16. errno = EINVAL;
  17. return 0;
  18. }
  19. for (i = l - 6; i < l; i++)
  20. if (template[i] != 'X') {
  21. errno = EINVAL;
  22. return 0;
  23. }
  24. again:
  25. n2 = num;
  26. for (i = l - 1; i >= l - 6; i--) {
  27. template[i] = '0' + n2 % 10;
  28. n2 /= 10;
  29. }
  30. if (stat(template, &stbuf) == 0) {
  31. num++;
  32. goto again;
  33. }
  34. return template;
  35. }