OpenCoverage

chdir-long.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/coreutils/src/gnulib/lib/chdir-long.c
Switch to Source codePreprocessed file
LineSourceCount
1-
2-
3-
4-
5struct cd_buf-
6{-
7 int fd;-
8};-
9-
10static void-
11cdb_init (struct cd_buf *cdb)-
12{-
13 cdb->fd = -
14 -100-
15 ;-
16}
never executed: end of block
0
17-
18static int-
19cdb_fchdir (struct cd_buf const *cdb)-
20{-
21 return
never executed: return fchdir (cdb->fd);
fchdir (cdb->fd);
never executed: return fchdir (cdb->fd);
0
22}-
23-
24static void-
25cdb_free (struct cd_buf const *cdb)-
26{-
27 if (0 <= cdb->fd
0 <= cdb->fdDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
28 {-
29 -
30 _Bool -
31 close_fail = close (cdb->fd);-
32 -
33 ((-
34 ! close_fail-
35 ) ? (void) (0) : __assert_fail (-
36 "! close_fail"-
37 , "lib/chdir-long.c", 64, __PRETTY_FUNCTION__))-
38 ;-
39 }
never executed: end of block
0
40}
never executed: end of block
0
41-
42-
43-
44-
45-
46static int-
47cdb_advance_fd (struct cd_buf *cdb, char const *dir)-
48{-
49 int new_fd = openat (cdb->fd, dir,-
50 -
51 00 -
52 | -
53 0200000 -
54 | -
55 0400 -
56 | -
57 04000-
58 );-
59 if (new_fd < 0
new_fd < 0Description
TRUEnever evaluated
FALSEnever evaluated
)
0
60 return
never executed: return -1;
-1;
never executed: return -1;
0
61-
62 cdb_free (cdb);-
63 cdb->fd = new_fd;-
64-
65 return
never executed: return 0;
0;
never executed: return 0;
0
66}-
67-
68-
69static char * -
70 __attribute__ ((__pure__))-
71-
72find_non_slash (char const *s)-
73{-
74 size_t n_slash = -
75 __builtin_strspn (-
76 s-
77 , -
78 "/"-
79 )-
80 ;-
81 return
never executed: return (char *) s + n_slash;
(char *) s + n_slash;
never executed: return (char *) s + n_slash;
0
82}-
83int-
84chdir_long (char *dir)-
85{-
86 int e = chdir (dir);-
87 if (e == 0
e == 0Description
TRUEnever evaluated
FALSEnever evaluated
||
0
88 (*
(*__errno_location ()) != 36Description
TRUEnever evaluated
FALSEnever evaluated
__errno_location ())
(*__errno_location ()) != 36Description
TRUEnever evaluated
FALSEnever evaluated
0
89 !=
(*__errno_location ()) != 36Description
TRUEnever evaluated
FALSEnever evaluated
0
90 36
(*__errno_location ()) != 36Description
TRUEnever evaluated
FALSEnever evaluated
0
91 )-
92 return
never executed: return e;
e;
never executed: return e;
0
93-
94 {-
95 size_t len = strlen (dir);-
96 char *dir_end = dir + len;-
97 struct cd_buf cdb;-
98 size_t n_leading_slash;-
99-
100 cdb_init (&cdb);-
101-
102-
103-
104 -
105 ((-
106 0 < len-
107 ) ? (void) (0) : __assert_fail (-
108 "0 < len"-
109 , "lib/chdir-long.c", 126, __PRETTY_FUNCTION__))-
110 ;-
111 -
112 ((4096 -
113 <= len-
114 ) ? (void) (0) : __assert_fail (-
115 "4096 <= len"-
116 , "lib/chdir-long.c", 127, __PRETTY_FUNCTION__))-
117 ;-
118-
119-
120 n_leading_slash = -
121 __builtin_strspn (-
122 dir-
123 , -
124 "/"-
125 )-
126 ;-
127-
128-
129-
130-
131-
132-
133 if (n_leading_slash == 2
n_leading_slash == 2Description
TRUEnever evaluated
FALSEnever evaluated
)
0
134 {-
135 int err;-
136-
137-
138 char *slash = memchr (dir + 3, '/', dir_end - (dir + 3));-
139 if (slash ==
slash == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
140 ((void *)0)
slash == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
141 )-
142 {-
143 -
144 (*__errno_location ()) -
145 = -
146 36-
147 ;-
148 return
never executed: return -1;
-1;
never executed: return -1;
0
149 }-
150 *slash = '\0';-
151 err = cdb_advance_fd (&cdb, dir);-
152 *slash = '/';-
153 if (err != 0
err != 0Description
TRUEnever evaluated
FALSEnever evaluated
)
0
154 goto
never executed: goto Fail;
Fail;
never executed: goto Fail;
0
155 dir = find_non_slash (slash + 1);-
156 }
never executed: end of block
0
157 else if (n_leading_slash
n_leading_slashDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
158 {-
159 if (cdb_advance_fd (&cdb, "/") != 0
cdb_advance_fd...cdb, "/") != 0Description
TRUEnever evaluated
FALSEnever evaluated
)
0
160 goto
never executed: goto Fail;
Fail;
never executed: goto Fail;
0
161 dir += n_leading_slash;-
162 }
never executed: end of block
0
163-
164 -
165 ((-
166 *dir != '/'-
167 ) ? (void) (0) : __assert_fail (-
168 "*dir != '/'"-
169 , "lib/chdir-long.c", 162, __PRETTY_FUNCTION__))-
170 ;-
171 -
172 ((-
173 dir <= dir_end-
174 ) ? (void) (0) : __assert_fail (-
175 "dir <= dir_end"-
176 , "lib/chdir-long.c", 163, __PRETTY_FUNCTION__))-
177 ;-
178-
179 while (-
180 4096
4096 <= dir_end - dirDescription
TRUEnever evaluated
FALSEnever evaluated
0
181 <= dir_end - dir
4096 <= dir_end - dirDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
182 {-
183 int err;-
184-
185-
186-
187 char *slash = memrchr (dir, '/', -
188 4096-
189 );-
190 if (slash ==
slash == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
191 ((void *)0)
slash == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
192 )-
193 {-
194 -
195 (*__errno_location ()) -
196 = -
197 36-
198 ;-
199 return
never executed: return -1;
-1;
never executed: return -1;
0
200 }-
201-
202 *slash = '\0';-
203 -
204 ((-
205 slash - dir < -
206 4096) ? (void) (0) : __assert_fail (-
207 "slash - dir < 4096"-
208 , "lib/chdir-long.c", 179, __PRETTY_FUNCTION__))-
209 ;-
210 err = cdb_advance_fd (&cdb, dir);-
211 *slash = '/';-
212 if (err != 0
err != 0Description
TRUEnever evaluated
FALSEnever evaluated
)
0
213 goto
never executed: goto Fail;
Fail;
never executed: goto Fail;
0
214-
215 dir = find_non_slash (slash + 1);-
216 }
never executed: end of block
0
217-
218 if (dir < dir_end
dir < dir_endDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
219 {-
220 if (cdb_advance_fd (&cdb, dir) != 0
cdb_advance_fd...cdb, dir) != 0Description
TRUEnever evaluated
FALSEnever evaluated
)
0
221 goto
never executed: goto Fail;
Fail;
never executed: goto Fail;
0
222 }
never executed: end of block
0
223-
224 if (cdb_fchdir (&cdb) != 0
cdb_fchdir (&cdb) != 0Description
TRUEnever evaluated
FALSEnever evaluated
)
0
225 goto
never executed: goto Fail;
Fail;
never executed: goto Fail;
0
226-
227 cdb_free (&cdb);-
228 return
never executed: return 0;
0;
never executed: return 0;
0
229-
230 Fail:-
231 {-
232 int saved_errno = -
233 (*__errno_location ())-
234 ;-
235 cdb_free (&cdb);-
236 -
237 (*__errno_location ()) -
238 = saved_errno;-
239 return
never executed: return -1;
-1;
never executed: return -1;
0
240 }-
241 }-
242}-
Switch to Source codePreprocessed file

Generated by Squish Coco 4.1.2