Line | Source | Count |
1 | | - |
2 | | - |
3 | | - |
4 | | - |
5 | | - |
6 | | - |
7 | | - |
8 | | - |
9 | static int | - |
10 | _path_isdir (path) | - |
11 | char *path; | - |
12 | { | - |
13 | int l; | - |
14 | struct stat sb; | - |
15 | | - |
16 | | - |
17 | | - |
18 | (*__errno_location ()) | - |
19 | = 0; | - |
20 | l = stat (path, &sb) == 0TRUE | evaluated 38354 times by 1 test | FALSE | evaluated 5 times by 1 test |
&& | 5-38354 |
21 | ((((TRUE | evaluated 38353 times by 1 test | FALSE | evaluated 1 time by 1 test |
| 1-38353 |
22 | sb.st_modeTRUE | evaluated 38353 times by 1 test | FALSE | evaluated 1 time by 1 test |
| 1-38353 |
23 | )) & 0170000) == (0040000))TRUE | evaluated 38353 times by 1 test | FALSE | evaluated 1 time by 1 test |
| 1-38353 |
24 | ; | - |
25 | | - |
26 | | - |
27 | | - |
28 | | - |
29 | returnexecuted 38359 times by 1 test: return l; l;executed 38359 times by 1 test: return l; | 38359 |
30 | } | - |
31 | char * | - |
32 | sh_canonpath (path, flags) | - |
33 | char *path; | - |
34 | int flags; | - |
35 | { | - |
36 | char stub_char; | - |
37 | char *result, *p, *q, *base, *dotdot; | - |
38 | int rooted, double_slash_path; | - |
39 | | - |
40 | | - |
41 | result = (TRUE | never evaluated | FALSE | evaluated 5515 times by 1 test |
flags & 0x0008)TRUE | never evaluated | FALSE | evaluated 5515 times by 1 test |
? path : (char *)strcpy (sh_xmalloc((1 + strlen (path)), "pathcanon.c", 113), (path)); | 0-5515 |
42 | | - |
43 | | - |
44 | | - |
45 | if (rooted = (((path)[0] == '/'))TRUE | evaluated 5515 times by 1 test | FALSE | never evaluated |
) | 0-5515 |
46 | { | - |
47 | stub_char = '/'; | - |
48 | | - |
49 | | - |
50 | | - |
51 | base = result + 1; | - |
52 | | - |
53 | double_slash_path = ((TRUE | evaluated 5515 times by 1 test | FALSE | never evaluated |
path[0] == '/')TRUE | evaluated 5515 times by 1 test | FALSE | never evaluated |
&& (TRUE | never evaluated | FALSE | evaluated 5515 times by 1 test |
path[1] == '/')TRUE | never evaluated | FALSE | evaluated 5515 times by 1 test |
&& path[2] != '/'TRUE | never evaluated | FALSE | never evaluated |
); | 0-5515 |
54 | base += double_slash_path; | - |
55 | }executed 5515 times by 1 test: end of block | 5515 |
56 | else | - |
57 | { | - |
58 | stub_char = '.'; | - |
59 | | - |
60 | | - |
61 | | - |
62 | base = result; | - |
63 | | - |
64 | double_slash_path = 0; | - |
65 | } never executed: end of block | 0 |
66 | p = q = dotdot = base; | - |
67 | | - |
68 | while (*TRUE | evaluated 71210 times by 1 test | FALSE | evaluated 5509 times by 1 test |
pTRUE | evaluated 71210 times by 1 test | FALSE | evaluated 5509 times by 1 test |
) | 5509-71210 |
69 | { | - |
70 | if (((TRUE | evaluated 32850 times by 1 test | FALSE | evaluated 38360 times by 1 test |
p[0]) == '/')TRUE | evaluated 32850 times by 1 test | FALSE | evaluated 38360 times by 1 test |
) | 32850-38360 |
71 | p++;executed 32850 times by 1 test: p++; | 32850 |
72 | else if(p[0] == '.'TRUE | evaluated 1 time by 1 test | FALSE | evaluated 38359 times by 1 test |
&& (((TRUE | evaluated 1 time by 1 test | FALSE | never evaluated |
p[1]) == '/')TRUE | evaluated 1 time by 1 test | FALSE | never evaluated |
|| (TRUE | never evaluated | FALSE | never evaluated |
p[1]) == 0TRUE | never evaluated | FALSE | never evaluated |
)) | 0-38359 |
73 | p += 1;executed 1 time by 1 test: p += 1; | 1 |
74 | else if (p[0] == '.'TRUE | never evaluated | FALSE | evaluated 38359 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-38359 |
75 | { | - |
76 | p += 2; | - |
77 | if (q > dotdotTRUE | never evaluated | FALSE | never evaluated |
) | 0 |
78 | { | - |
79 | if (flags & 0x0001TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
80 | { | - |
81 | char c; | - |
82 | | - |
83 | | - |
84 | | - |
85 | c = *q; | - |
86 | *q = '\0'; | - |
87 | if (_path_isdir (result) == 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
88 | { | - |
89 | if ((TRUE | never evaluated | FALSE | never evaluated |
flags & 0x0008) == 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
90 | sh_xfree((result), "pathcanon.c", 171); never executed: sh_xfree((result), "pathcanon.c", 171); | 0 |
91 | return never executed: return ((char *) ((void *)0) ); ((char *)never executed: return ((char *) ((void *)0) ); | 0 |
92 | ((void *)0) never executed: return ((char *) ((void *)0) ); | 0 |
93 | ); never executed: return ((char *) ((void *)0) ); | 0 |
94 | } | - |
95 | *q = c; | - |
96 | } never executed: end of block | 0 |
97 | | - |
98 | while (--TRUE | never evaluated | FALSE | never evaluated |
q > dotdotTRUE | never evaluated | FALSE | never evaluated |
&& ((*TRUE | never evaluated | FALSE | never evaluated |
q) == '/') == 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
99 | ; never executed: ; | 0 |
100 | } never executed: end of block | 0 |
101 | else if (rooted == 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
102 | { | - |
103 | | - |
104 | if (q != baseTRUE | never evaluated | FALSE | never evaluated |
) | 0 |
105 | * never executed: *q++ = '/'; q++ = '/';never executed: *q++ = '/'; | 0 |
106 | *q++ = '.'; | - |
107 | *q++ = '.'; | - |
108 | dotdot = q; | - |
109 | } never executed: end of block | 0 |
110 | } never executed: end of block | 0 |
111 | else | - |
112 | { | - |
113 | | - |
114 | if (q != baseTRUE | evaluated 32849 times by 1 test | FALSE | evaluated 5510 times by 1 test |
) | 5510-32849 |
115 | *executed 32849 times by 1 test: *q++ = '/'; q++ = '/';executed 32849 times by 1 test: *q++ = '/'; | 32849 |
116 | while (*TRUE | evaluated 323202 times by 1 test | FALSE | evaluated 5510 times by 1 test |
pTRUE | evaluated 323202 times by 1 test | FALSE | evaluated 5510 times by 1 test |
&& (((*TRUE | evaluated 290353 times by 1 test | FALSE | evaluated 32849 times by 1 test |
p) == '/') == 0)TRUE | evaluated 290353 times by 1 test | FALSE | evaluated 32849 times by 1 test |
) | 5510-323202 |
117 | *executed 290353 times by 1 test: *q++ = *p++; q++ = *p++;executed 290353 times by 1 test: *q++ = *p++; | 290353 |
118 | | - |
119 | if (flags & 0x0002TRUE | evaluated 38359 times by 1 test | FALSE | never evaluated |
) | 0-38359 |
120 | { | - |
121 | char c; | - |
122 | | - |
123 | | - |
124 | | - |
125 | c = *q; | - |
126 | *q = '\0'; | - |
127 | if (_path_isdir (result) == 0TRUE | evaluated 6 times by 1 test | FALSE | evaluated 38353 times by 1 test |
) | 6-38353 |
128 | { | - |
129 | if ((TRUE | evaluated 6 times by 1 test | FALSE | never evaluated |
flags & 0x0008) == 0TRUE | evaluated 6 times by 1 test | FALSE | never evaluated |
) | 0-6 |
130 | sh_xfree((result), "pathcanon.c", 209);executed 6 times by 1 test: sh_xfree((result), "pathcanon.c", 209); | 6 |
131 | returnexecuted 6 times by 1 test: return ((char *) ((void *)0) ); ((char *)executed 6 times by 1 test: return ((char *) ((void *)0) ); | 6 |
132 | ((void *)0)executed 6 times by 1 test: return ((char *) ((void *)0) ); | 6 |
133 | );executed 6 times by 1 test: return ((char *) ((void *)0) ); | 6 |
134 | } | - |
135 | *q = c; | - |
136 | }executed 38353 times by 1 test: end of block | 38353 |
137 | }executed 38353 times by 1 test: end of block | 38353 |
138 | } | - |
139 | | - |
140 | | - |
141 | if (q == resultTRUE | never evaluated | FALSE | evaluated 5509 times by 1 test |
) | 0-5509 |
142 | * never executed: *q++ = stub_char; q++ = stub_char;never executed: *q++ = stub_char; | 0 |
143 | *q = '\0'; | - |
144 | | - |
145 | | - |
146 | | - |
147 | | - |
148 | if (((TRUE | evaluated 5509 times by 1 test | FALSE | never evaluated |
result[0] == '/')TRUE | evaluated 5509 times by 1 test | FALSE | never evaluated |
&& (TRUE | never evaluated | FALSE | evaluated 5509 times by 1 test |
result[1] == '/')TRUE | never evaluated | FALSE | evaluated 5509 times by 1 test |
&& result[2] != '/'TRUE | never evaluated | FALSE | never evaluated |
) && double_slash_path == 0TRUE | never evaluated | FALSE | never evaluated |
) | 0-5509 |
149 | { | - |
150 | if (result[2] == '\0'TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
151 | result[1] = '\0'; never executed: result[1] = '\0'; | 0 |
152 | else | - |
153 | strcpy (result, result + 1); never executed: strcpy (result, result + 1); | 0 |
154 | } | - |
155 | | - |
156 | returnexecuted 5509 times by 1 test: return (result); (result);executed 5509 times by 1 test: return (result); | 5509 |
157 | } | - |
| | |