Last change
on this file since 445 was 444, checked in by coas-nagasima, 4 years ago |
muslのソースコードを追加
|
-
Property svn:eol-style
set to
native
-
Property svn:mime-type
set to
text/x-csrc;charset=UTF-8
|
File size:
846 bytes
|
Line | |
---|
1 | #include <stdio.h>
|
---|
2 | #include <fcntl.h>
|
---|
3 | #include <errno.h>
|
---|
4 | #include <sys/stat.h>
|
---|
5 | #include <limits.h>
|
---|
6 | #include <string.h>
|
---|
7 | #include "syscall.h"
|
---|
8 |
|
---|
9 | #define MAXTRIES 100
|
---|
10 |
|
---|
11 | char *__randname(char *);
|
---|
12 |
|
---|
13 | char *tempnam(const char *dir, const char *pfx)
|
---|
14 | {
|
---|
15 | char s[PATH_MAX];
|
---|
16 | size_t l, dl, pl;
|
---|
17 | int try;
|
---|
18 | int r;
|
---|
19 |
|
---|
20 | if (!dir) dir = P_tmpdir;
|
---|
21 | if (!pfx) pfx = "temp";
|
---|
22 |
|
---|
23 | dl = strlen(dir);
|
---|
24 | pl = strlen(pfx);
|
---|
25 | l = dl + 1 + pl + 1 + 6;
|
---|
26 |
|
---|
27 | if (l >= PATH_MAX) {
|
---|
28 | errno = ENAMETOOLONG;
|
---|
29 | return 0;
|
---|
30 | }
|
---|
31 |
|
---|
32 | memcpy(s, dir, dl);
|
---|
33 | s[dl] = '/';
|
---|
34 | memcpy(s+dl+1, pfx, pl);
|
---|
35 | s[dl+1+pl] = '_';
|
---|
36 | s[l] = 0;
|
---|
37 |
|
---|
38 | for (try=0; try<MAXTRIES; try++) {
|
---|
39 | __randname(s+l-6);
|
---|
40 | #ifdef SYS_lstat
|
---|
41 | r = __syscall(SYS_lstat, s, &(struct stat){0});
|
---|
42 | #else
|
---|
43 | r = __syscall(SYS_fstatat, AT_FDCWD, s,
|
---|
44 | &(struct stat){0}, AT_SYMLINK_NOFOLLOW);
|
---|
45 | #endif
|
---|
46 | if (r == -ENOENT) return strdup(s);
|
---|
47 | }
|
---|
48 | return 0;
|
---|
49 | }
|
---|
Note:
See
TracBrowser
for help on using the repository browser.