| 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) == 0| TRUE | 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_mode| TRUE | 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 |
p| TRUE | 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]) == 0| TRUE | 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]) == 0| TRUE | never evaluated | | FALSE | never evaluated |
)) | 0-38359 |
| 75 | { | - |
| 76 | p += 2; | - |
| 77 | if (q > dotdot| TRUE | never evaluated | | FALSE | never evaluated |
) | 0 |
| 78 | { | - |
| 79 | if (flags & 0x0001| TRUE | never evaluated | | FALSE | never evaluated |
) | 0 |
| 80 | { | - |
| 81 | char c; | - |
| 82 | | - |
| 83 | | - |
| 84 | | - |
| 85 | c = *q; | - |
| 86 | *q = '\0'; | - |
| 87 | if (_path_isdir (result) == 0| TRUE | never evaluated | | FALSE | never evaluated |
) | 0 |
| 88 | { | - |
| 89 | if ((| TRUE | never evaluated | | FALSE | never evaluated |
flags & 0x0008) == 0| TRUE | 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 > dotdot| TRUE | never evaluated | | FALSE | never evaluated |
&& ((*| TRUE | never evaluated | | FALSE | never evaluated |
q) == '/') == 0| TRUE | never evaluated | | FALSE | never evaluated |
) | 0 |
| 99 | ; never executed: ; | 0 |
| 100 | } never executed: end of block | 0 |
| 101 | else if (rooted == 0| TRUE | never evaluated | | FALSE | never evaluated |
) | 0 |
| 102 | { | - |
| 103 | | - |
| 104 | if (q != base| TRUE | 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 != base| TRUE | 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 |
p| TRUE | 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 & 0x0002| TRUE | 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) == 0| TRUE | 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) == 0| TRUE | 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 == result| TRUE | 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 == 0| TRUE | 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 | } | - |
| | |