Line | Source | Count |
1 | | - |
2 | | - |
3 | | - |
4 | | - |
5 | | - |
6 | | - |
7 | | - |
8 | | - |
9 | | - |
10 | | - |
11 | | - |
12 | | - |
13 | | - |
14 | | - |
15 | char * | - |
16 | openat_proc_name (char buf[(( | - |
17 | 4096 | - |
18 | ) < (4096 - 64) ? ( | - |
19 | 4096 | - |
20 | ) : (4096 - 64))], int fd, char const *file) | - |
21 | { | - |
22 | char *result = buf; | - |
23 | int dirlen; | - |
24 | | - |
25 | | - |
26 | if (!*fileTRUE | never evaluated | FALSE | never evaluated |
) | 0 |
27 | { | - |
28 | buf[0] = '\0'; | - |
29 | return never executed: return buf; buf;never executed: return buf; | 0 |
30 | } | - |
31 | | - |
32 | | - |
33 | | - |
34 | { | - |
35 | enum { | - |
36 | PROC_SELF_FD_DIR_SIZE_BOUND | - |
37 | = (sizeof "/proc/self/fd/%d/" - (sizeof "%d" - 1) | - |
38 | + (((((sizeof (int) * 8) - (! ((__typeof__ (int)) 0 < (__typeof__ (int)) -1))) * 146 + 484) / 485) + (! ((__typeof__ (int)) 0 < (__typeof__ (int)) -1)))) | - |
39 | }; | - |
40 | | - |
41 | static int proc_status = 0; | - |
42 | if (! proc_statusTRUE | never evaluated | FALSE | never evaluated |
) | 0 |
43 | { | - |
44 | int proc_self_fd = open ("/proc/self/fd", | - |
45 | | - |
46 | 00 | - |
47 | | | - |
48 | 0200000 | - |
49 | | | - |
50 | 0400 | - |
51 | | | - |
52 | 04000 | - |
53 | ); | - |
54 | if (proc_self_fd < 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
55 | proc_status = -1; never executed: proc_status = -1; | 0 |
56 | else | - |
57 | { | - |
58 | | - |
59 | | - |
60 | | - |
61 | | - |
62 | | - |
63 | char dotdot_buf[PROC_SELF_FD_DIR_SIZE_BOUND + sizeof "../fd" - 1]; | - |
64 | sprintf (dotdot_buf, "/proc/self/fd/%d/" "../fd", proc_self_fd); | - |
65 | proc_status = access (dotdot_buf, TRUE | never evaluated | FALSE | never evaluated |
| 0 |
66 | 0TRUE | never evaluated | FALSE | never evaluated |
| 0 |
67 | )TRUE | never evaluated | FALSE | never evaluated |
? -1 : 1; | 0 |
68 | close (proc_self_fd); | - |
69 | } never executed: end of block | 0 |
70 | } | - |
71 | | - |
72 | if (proc_status < 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
73 | return never executed: return ((void *)0) ; never executed: return ((void *)0) ; | 0 |
74 | ((void *)0) never executed: return ((void *)0) ; | 0 |
75 | ; never executed: return ((void *)0) ; | 0 |
76 | else | - |
77 | { | - |
78 | size_t bufsize = PROC_SELF_FD_DIR_SIZE_BOUND + strlen (file); | - |
79 | if (((TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
| 0 |
80 | 4096TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
| 0 |
81 | ) < (4096 - 64)TRUE | never evaluated | FALSE | never evaluated |
? (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
82 | 4096TRUE | never evaluated | FALSE | never evaluated |
| 0 |
83 | ) : (4096 - 64)) < bufsizeTRUE | never evaluated | FALSE | never evaluated |
) | 0 |
84 | { | - |
85 | result = malloc (bufsize); | - |
86 | if (! resultTRUE | never evaluated | FALSE | never evaluated |
) | 0 |
87 | return never executed: return ((void *)0) ; never executed: return ((void *)0) ; | 0 |
88 | ((void *)0) never executed: return ((void *)0) ; | 0 |
89 | ; never executed: return ((void *)0) ; | 0 |
90 | } never executed: end of block | 0 |
91 | | - |
92 | dirlen = sprintf (result, "/proc/self/fd/%d/", fd); | - |
93 | } never executed: end of block | 0 |
94 | } | - |
95 | strcpy (result + dirlen, file); | - |
96 | return never executed: return result; result;never executed: return result; | 0 |
97 | } | - |
| | |