tmpnam.c 593 B

1234567891011121314151617181920212223242526272829
  1. #include <stdio.h>
  2. #include <fcntl.h>
  3. #include <errno.h>
  4. #include <sys/stat.h>
  5. #include <string.h>
  6. #include <stdlib.h>
  7. #include "syscall.h"
  8. #include "kstat.h"
  9. #define MAXTRIES 100
  10. char *tmpnam(char *buf)
  11. {
  12. static char internal[L_tmpnam];
  13. char s[] = "/tmp/tmpnam_XXXXXX";
  14. int try;
  15. int r;
  16. for (try=0; try<MAXTRIES; try++) {
  17. __randname(s+12);
  18. #ifdef SYS_lstat
  19. r = __syscall(SYS_lstat, s, &(struct kstat){0});
  20. #else
  21. r = __syscall(SYS_fstatat, AT_FDCWD, s,
  22. &(struct kstat){0}, AT_SYMLINK_NOFOLLOW);
  23. #endif
  24. if (r == -ENOENT) return strcpy(buf ? buf : internal, s);
  25. }
  26. return 0;
  27. }