Line | Source | Count |
1 | | - |
2 | | - |
3 | | - |
4 | | - |
5 | | - |
6 | | - |
7 | | - |
8 | | - |
9 | extern char *get_working_directory (char *); | - |
10 | | - |
11 | static int | - |
12 | _path_readlink (path, buf, bufsiz) | - |
13 | char *path; | - |
14 | char *buf; | - |
15 | int bufsiz; | - |
16 | { | - |
17 | | - |
18 | returnexecuted 7 times by 1 test: return readlink (path, buf, bufsiz); readlink (path, buf, bufsiz);executed 7 times by 1 test: return readlink (path, buf, bufsiz); | 7 |
19 | | - |
20 | | - |
21 | | - |
22 | | - |
23 | } | - |
24 | char * | - |
25 | sh_physpath (path, flags) | - |
26 | char *path; | - |
27 | int flags; | - |
28 | { | - |
29 | char tbuf[ | - |
30 | 4096 | - |
31 | +1], linkbuf[ | - |
32 | 4096 | - |
33 | +1]; | - |
34 | char *result, *p, *q, *qsave, *qbase, *workpath; | - |
35 | int double_slash_path, linklen, nlink; | - |
36 | | - |
37 | linklen = strlen (path); | - |
38 | | - |
39 | | - |
40 | | - |
41 | | - |
42 | | - |
43 | | - |
44 | | - |
45 | nlink = 0; | - |
46 | q = result = (char *)sh_xmalloc(( | - |
47 | 4096 | - |
48 | + 1), "pathphys.c", 92); | - |
49 | | - |
50 | | - |
51 | | - |
52 | if (linklen >= TRUE | never evaluated | FALSE | evaluated 4 times by 1 test |
| 0-4 |
53 | 4096TRUE | never evaluated | FALSE | evaluated 4 times by 1 test |
| 0-4 |
54 | ) | - |
55 | workpath = (char *)strcpy (sh_xmalloc((1 + strlen (path)), "pathphys.c", 97), (path)); never executed: workpath = (char *)strcpy (sh_xmalloc((1 + strlen (path)), "pathphys.c", 97), (path)); | 0 |
56 | else | - |
57 | { | - |
58 | workpath = (char *)sh_xmalloc(( | - |
59 | 4096 | - |
60 | + 1), "pathphys.c", 100); | - |
61 | strcpy (workpath, path); | - |
62 | }executed 4 times by 1 test: end of block | 4 |
63 | qbase = workpath + 1; | - |
64 | | - |
65 | double_slash_path = ((TRUE | evaluated 4 times by 1 test | FALSE | never evaluated |
workpath[0] == '/')TRUE | evaluated 4 times by 1 test | FALSE | never evaluated |
&& (TRUE | never evaluated | FALSE | evaluated 4 times by 1 test |
workpath[1] == '/')TRUE | never evaluated | FALSE | evaluated 4 times by 1 test |
&& workpath[2] != '/'TRUE | never evaluated | FALSE | never evaluated |
); | 0-4 |
66 | qbase += double_slash_path; | - |
67 | | - |
68 | for (p = workpath; p < qbaseTRUE | evaluated 4 times by 1 test | FALSE | evaluated 4 times by 1 test |
; ) | 4 |
69 | *executed 4 times by 1 test: *q++ = *p++; q++ = *p++;executed 4 times by 1 test: *q++ = *p++; | 4 |
70 | qbase = q; | - |
71 | while (*TRUE | evaluated 13 times by 1 test | FALSE | evaluated 4 times by 1 test |
pTRUE | evaluated 13 times by 1 test | FALSE | evaluated 4 times by 1 test |
) | 4-13 |
72 | { | - |
73 | if (((TRUE | evaluated 6 times by 1 test | FALSE | evaluated 7 times by 1 test |
p[0]) == '/')TRUE | evaluated 6 times by 1 test | FALSE | evaluated 7 times by 1 test |
) | 6-7 |
74 | p++;executed 6 times by 1 test: p++; | 6 |
75 | else if(p[0] == '.'TRUE | never evaluated | FALSE | evaluated 7 times by 1 test |
&& (((TRUE | never evaluated | FALSE | never evaluated |
p[1]) == '/')TRUE | never evaluated | FALSE | never evaluated |
|| (TRUE | never evaluated | FALSE | never evaluated |
p[1]) == 0TRUE | never evaluated | FALSE | never evaluated |
)) | 0-7 |
76 | p += 1; never executed: p += 1; | 0 |
77 | else if (p[0] == '.'TRUE | never evaluated | FALSE | evaluated 7 times by 1 test |
&& p[1] == '.'TRUE | never evaluated | FALSE | never evaluated |
&& (((TRUE | never evaluated | FALSE | never evaluated |
p[2]) == '/')TRUE | never evaluated | FALSE | never evaluated |
|| (TRUE | never evaluated | FALSE | never evaluated |
p[2]) == 0TRUE | never evaluated | FALSE | never evaluated |
)) | 0-7 |
78 | { | - |
79 | p += 2; | - |
80 | if (q > qbaseTRUE | never evaluated | FALSE | never evaluated |
) | 0 |
81 | { | - |
82 | while (--TRUE | never evaluated | FALSE | never evaluated |
q > qbaseTRUE | never evaluated | FALSE | never evaluated |
&& ((*TRUE | never evaluated | FALSE | never evaluated |
q) == '/') == 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
83 | ; never executed: ; | 0 |
84 | } never executed: end of block | 0 |
85 | } never executed: end of block | 0 |
86 | else | - |
87 | { | - |
88 | | - |
89 | qsave = q; | - |
90 | if (q != qbaseTRUE | evaluated 6 times by 1 test | FALSE | evaluated 1 time by 1 test |
) | 1-6 |
91 | *executed 6 times by 1 test: *q++ = '/'; q++ = '/';executed 6 times by 1 test: *q++ = '/'; | 6 |
92 | while (*TRUE | evaluated 59 times by 1 test | FALSE | evaluated 1 time by 1 test |
pTRUE | evaluated 59 times by 1 test | FALSE | evaluated 1 time by 1 test |
&& (((*TRUE | evaluated 53 times by 1 test | FALSE | evaluated 6 times by 1 test |
p) == '/') == 0)TRUE | evaluated 53 times by 1 test | FALSE | evaluated 6 times by 1 test |
) | 1-59 |
93 | { | - |
94 | if (q - result >= TRUE | never evaluated | FALSE | evaluated 53 times by 1 test |
| 0-53 |
95 | 4096TRUE | never evaluated | FALSE | evaluated 53 times by 1 test |
| 0-53 |
96 | ) | - |
97 | { | - |
98 | | - |
99 | | - |
100 | (*__errno_location ()) | - |
101 | = | - |
102 | 36 | - |
103 | ; | - |
104 | | - |
105 | | - |
106 | | - |
107 | goto never executed: goto error; error;never executed: goto error; | 0 |
108 | } | - |
109 | | - |
110 | *q++ = *p++; | - |
111 | }executed 53 times by 1 test: end of block | 53 |
112 | | - |
113 | *q = '\0'; | - |
114 | | - |
115 | linklen = _path_readlink (result, linkbuf, | - |
116 | 4096 | - |
117 | ); | - |
118 | if (linklen < 0TRUE | evaluated 7 times by 1 test | FALSE | never evaluated |
) | 0-7 |
119 | { | - |
120 | if ( | - |
121 | (*TRUE | never evaluated | FALSE | evaluated 7 times by 1 test |
__errno_location ()) TRUE | never evaluated | FALSE | evaluated 7 times by 1 test |
| 0-7 |
122 | != TRUE | never evaluated | FALSE | evaluated 7 times by 1 test |
| 0-7 |
123 | 22TRUE | never evaluated | FALSE | evaluated 7 times by 1 test |
| 0-7 |
124 | ) | - |
125 | goto never executed: goto error; error;never executed: goto error; | 0 |
126 | continue;executed 7 times by 1 test: continue; | 7 |
127 | } | - |
128 | | - |
129 | | - |
130 | nlink++; | - |
131 | if (nlink > TRUE | never evaluated | FALSE | never evaluated |
| 0 |
132 | 20TRUE | never evaluated | FALSE | never evaluated |
| 0 |
133 | ) | - |
134 | { | - |
135 | | - |
136 | | - |
137 | (*__errno_location ()) | - |
138 | = | - |
139 | 40 | - |
140 | ; | - |
141 | | - |
142 | | - |
143 | | - |
144 | error: code before this statement never executed: error: | 0 |
145 | sh_xfree((result), "pathphys.c", 185); | - |
146 | sh_xfree((workpath), "pathphys.c", 186); | - |
147 | return never executed: return ((char *) ((void *)0) ); ((char *)never executed: return ((char *) ((void *)0) ); | 0 |
148 | ((void *)0) never executed: return ((char *) ((void *)0) ); | 0 |
149 | ); never executed: return ((char *) ((void *)0) ); | 0 |
150 | } | - |
151 | | - |
152 | linkbuf[linklen] = '\0'; | - |
153 | | - |
154 | | - |
155 | if ((TRUE | never evaluated | FALSE | never evaluated |
strlen (p) + linklen + 2) >= TRUE | never evaluated | FALSE | never evaluated |
| 0 |
156 | 4096TRUE | never evaluated | FALSE | never evaluated |
| 0 |
157 | ) | - |
158 | { | - |
159 | | - |
160 | | - |
161 | (*__errno_location ()) | - |
162 | = | - |
163 | 36 | - |
164 | ; | - |
165 | | - |
166 | | - |
167 | | - |
168 | goto never executed: goto error; error;never executed: goto error; | 0 |
169 | } | - |
170 | | - |
171 | | - |
172 | | - |
173 | | - |
174 | | - |
175 | | - |
176 | strcpy (tbuf, linkbuf); | - |
177 | tbuf[linklen] = '/'; | - |
178 | strcpy (tbuf + linklen, p); | - |
179 | strcpy (workpath, tbuf); | - |
180 | | - |
181 | if (((TRUE | never evaluated | FALSE | never evaluated |
linkbuf)[0] == '/')TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
182 | { | - |
183 | q = result; | - |
184 | | - |
185 | | - |
186 | | - |
187 | | - |
188 | qbase = workpath + 1; | - |
189 | | - |
190 | double_slash_path = ((TRUE | never evaluated | FALSE | never evaluated |
workpath[0] == '/')TRUE | never evaluated | FALSE | never evaluated |
&& (TRUE | never evaluated | FALSE | never evaluated |
workpath[1] == '/')TRUE | never evaluated | FALSE | never evaluated |
&& workpath[2] != '/'TRUE | never evaluated | FALSE | never evaluated |
); | 0 |
191 | qbase += double_slash_path; | - |
192 | | - |
193 | for (p = workpath; p < qbaseTRUE | never evaluated | FALSE | never evaluated |
; ) | 0 |
194 | * never executed: *q++ = *p++; q++ = *p++;never executed: *q++ = *p++; | 0 |
195 | qbase = q; | - |
196 | } never executed: end of block | 0 |
197 | else | - |
198 | { | - |
199 | p = workpath; | - |
200 | q = qsave; | - |
201 | } never executed: end of block | 0 |
202 | } | - |
203 | } | - |
204 | | - |
205 | *q = '\0'; | - |
206 | sh_xfree((workpath), "pathphys.c", 238); | - |
207 | | - |
208 | | - |
209 | | - |
210 | | - |
211 | if (((TRUE | evaluated 4 times by 1 test | FALSE | never evaluated |
result[0] == '/')TRUE | evaluated 4 times by 1 test | FALSE | never evaluated |
&& (TRUE | never evaluated | FALSE | evaluated 4 times by 1 test |
result[1] == '/')TRUE | never evaluated | FALSE | evaluated 4 times by 1 test |
&& result[2] != '/'TRUE | never evaluated | FALSE | never evaluated |
) && double_slash_path == 0TRUE | never evaluated | FALSE | never evaluated |
) | 0-4 |
212 | { | - |
213 | if (result[2] == '\0'TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
214 | result[1] = '\0'; never executed: result[1] = '\0'; | 0 |
215 | else | - |
216 | strcpy (result, result + 1); never executed: strcpy (result, result + 1); | 0 |
217 | } | - |
218 | | - |
219 | returnexecuted 4 times by 1 test: return (result); (result);executed 4 times by 1 test: return (result); | 4 |
220 | } | - |
221 | | - |
222 | char * | - |
223 | sh_realpath (pathname, resolved) | - |
224 | const char *pathname; | - |
225 | char *resolved; | - |
226 | { | - |
227 | char *tdir, *wd; | - |
228 | | - |
229 | if (pathname == 0TRUE | never evaluated | FALSE | never evaluated |
|| *TRUE | never evaluated | FALSE | never evaluated |
pathname == '\0'TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
230 | { | - |
231 | | - |
232 | (*__errno_location ()) | - |
233 | = (pathname == 0) ? | - |
234 | 22 | - |
235 | : | - |
236 | 2 | - |
237 | ; | - |
238 | return never executed: return ((char *) ((void *)0) ); ((char *)never executed: return ((char *) ((void *)0) ); | 0 |
239 | ((void *)0) never executed: return ((char *) ((void *)0) ); | 0 |
240 | ); never executed: return ((char *) ((void *)0) ); | 0 |
241 | } | - |
242 | | - |
243 | if (((TRUE | never evaluated | FALSE | never evaluated |
pathname)[0] == '/') == 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
244 | { | - |
245 | wd = get_working_directory ("sh_realpath"); | - |
246 | if (wd == 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
247 | return never executed: return ((char *) ((void *)0) ); ((char *)never executed: return ((char *) ((void *)0) ); | 0 |
248 | ((void *)0) never executed: return ((char *) ((void *)0) ); | 0 |
249 | ); never executed: return ((char *) ((void *)0) ); | 0 |
250 | tdir = sh_makepath (wd, (char *)pathname, 0); | - |
251 | sh_xfree((wd), "pathphys.c", 273); | - |
252 | } never executed: end of block | 0 |
253 | else | - |
254 | tdir = (char *)strcpy (sh_xmalloc((1 + strlen (pathname)), "pathphys.c", 276), (pathname)); never executed: tdir = (char *)strcpy (sh_xmalloc((1 + strlen (pathname)), "pathphys.c", 276), (pathname)); | 0 |
255 | | - |
256 | wd = sh_physpath (tdir, 0); | - |
257 | sh_xfree((tdir), "pathphys.c", 279); | - |
258 | | - |
259 | if (resolved == 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
260 | return never executed: return (wd); (wd);never executed: return (wd); | 0 |
261 | | - |
262 | if (wdTRUE | never evaluated | FALSE | never evaluated |
) | 0 |
263 | { | - |
264 | | - |
265 | __builtin_strncpy ( | - |
266 | resolved | - |
267 | , | - |
268 | wd | - |
269 | , 4096 | - |
270 | - 1 | - |
271 | ) | - |
272 | ; | - |
273 | resolved[ | - |
274 | 4096 | - |
275 | - 1] = '\0'; | - |
276 | sh_xfree((wd), "pathphys.c", 288); | - |
277 | return never executed: return resolved; resolved;never executed: return resolved; | 0 |
278 | } | - |
279 | else | - |
280 | { | - |
281 | resolved[0] = '\0'; | - |
282 | return never executed: return wd; wd;never executed: return wd; | 0 |
283 | } | - |
284 | } | - |
| | |