line |
true |
false |
branch |
88
|
1502 |
57 |
if (path[0] == '/') { |
91
|
1 |
1501 |
if (path[1] == '\0') |
96
|
1 |
56 |
if (getcwd(resolved, MAXPATHLEN) == NULL) { |
103
|
1557 |
0 |
if (remaining_len >= sizeof(remaining) || resolved_len >= MAXPATHLEN) { |
|
0 |
1557 |
if (remaining_len >= sizeof(remaining) || resolved_len >= MAXPATHLEN) { |
111
|
11057 |
1557 |
while (remaining_len != 0) { |
119
|
1558 |
9499 |
s = p ? p : remaining + remaining_len; |
120
|
0 |
11057 |
if ((STRLEN)(s - remaining) >= (STRLEN)sizeof(next_token)) { |
127
|
9499 |
1558 |
if (p != NULL) |
129
|
9300 |
1757 |
if (resolved[resolved_len - 1] != '/') { |
130
|
0 |
9300 |
if (resolved_len + 1 >= MAXPATHLEN) { |
137
|
0 |
11057 |
if (next_token[0] == '\0') |
139
|
4 |
11053 |
else if (strEQ(next_token, ".")) |
141
|
255 |
10798 |
else if (strEQ(next_token, "..")) { |
146
|
255 |
0 |
if (resolved_len > 1) { |
161
|
0 |
10798 |
if (resolved_len >= MAXPATHLEN) { |
168
|
0 |
10798 |
if (lstat(resolved, &sb) != 0) { |
169
|
0 |
0 |
if (errno == ENOENT && p == NULL) { |
|
0 |
0 |
if (errno == ENOENT && p == NULL) { |
175
|
1 |
10797 |
if (S_ISLNK(sb.st_mode)) { |
179
|
0 |
1 |
if (symlinks++ > MAXSYMLINKS) { |
184
|
0 |
1 |
if (slen < 0) |
197
|
0 |
1 |
if (symlink[0] == '/') { |
200
|
1 |
0 |
} else if (resolved_len > 1) { |
213
|
0 |
1 |
if (p != NULL) { |
214
|
0 |
0 |
if (symlink[slen - 1] != '/') { |
215
|
0 |
0 |
if ((STRLEN)(slen + 1) >= (STRLEN)sizeof(symlink)) { |
223
|
0 |
0 |
if (remaining_len >= sizeof(remaining)) { |
241
|
1557 |
0 |
if (resolved_len > 1 && resolved[resolved_len - 1] == '/') |
|
4 |
1553 |
if (resolved_len > 1 && resolved[resolved_len - 1] == '/') |
458
|
1358 |
0 |
return SvPOK(invocant) && SvCUR(invocant) == 16 && |
|
98 |
1260 |
return SvPOK(invocant) && SvCUR(invocant) == 16 && |
|
70 |
28 |
return SvPOK(invocant) && SvCUR(invocant) == 16 && |
472
|
3 |
1743 |
SvGETMAGIC(path); |
|
0 |
3 |
SvGETMAGIC(path); |
473
|
4 |
1742 |
if(!SvOK(path)) return &PL_sv_undef; |
|
4 |
0 |
if(!SvOK(path)) return &PL_sv_undef; |
|
4 |
0 |
if(!SvOK(path)) return &PL_sv_undef; |
474
|
1738 |
4 |
p = SvPV_nomg(path, plen); |
475
|
6 |
1736 |
if(plen == 0) return newSVpvs(""); |
479
|
3 |
1733 |
if(SvUTF8(path)) SvUTF8_on(retval); |
497
|
908 |
828 |
if(p[0] == '/') { |
500
|
107 |
949 |
do { p++; } while(p[0] == '/'); |
501
|
41 |
908 |
if(p[0] == '.' && p[1] == '.' && (p+2 == pe || p[2] == '/')) { |
|
21 |
20 |
if(p[0] == '.' && p[1] == '.' && (p+2 == pe || p[2] == '/')) { |
|
18 |
3 |
if(p[0] == '.' && p[1] == '.' && (p+2 == pe || p[2] == '/')) { |
|
18 |
0 |
if(p[0] == '.' && p[1] == '.' && (p+2 == pe || p[2] == '/')) { |
504
|
20 |
908 |
} else if(p[0] == '.' && (p+1 == pe || p[1] == '/')) { |
|
15 |
5 |
} else if(p[0] == '.' && (p+1 == pe || p[1] == '/')) { |
|
15 |
0 |
} else if(p[0] == '.' && (p+1 == pe || p[1] == '/')) { |
510
|
276 |
552 |
} else if(p[0] == '.' && p[1] == '/') { |
|
188 |
88 |
} else if(p[0] == '.' && p[1] == '/') { |
513
|
10 |
189 |
do { p++; } while(p[0] == '/'); |
514
|
2 |
187 |
} while(p[0] == '.' && p[1] == '/'); |
|
1 |
1 |
} while(p[0] == '.' && p[1] == '/'); |
515
|
39 |
149 |
if(p == pe) *o++ = '.'; |
517
|
105 |
1631 |
if(p == pe) goto end; |
520
|
763 |
4716 |
if(!q) q = pe; |
525
|
763 |
4716 |
if(p == pe) goto end; |
527
|
51 |
4737 |
do { p++; } while(p[0] == '/'); |
528
|
865 |
3872 |
if(p == pe) goto end; |
529
|
3319 |
553 |
if(p[0] != '.') break; |
530
|
3 |
550 |
if(p+1 == pe) goto end; |
531
|
529 |
21 |
if(p[1] != '/') break; |
540
|
1 |
1735 |
SvTAINT(retval); |
|
1 |
0 |
SvTAINT(retval); |
572
|
131 |
0 |
dXSTARG; |
574
|
4 |
127 |
if (ix == 1 && items != 0) |
|
0 |
4 |
if (ix == 1 && items != 0) |
577
|
18 |
113 |
XSprePUSH; PUSHTARG; |
578
|
18 |
113 |
SvTAINTED_on(TARG); |
586
|
1559 |
0 |
dXSTARG; |
587
|
1557 |
2 |
char *const path = pathsv ? SvPV_nolen(pathsv) : (char *)"."; |
|
1507 |
50 |
char *const path = pathsv ? SvPV_nolen(pathsv) : (char *)"."; |
590
|
1558 |
1 |
if ( |
599
|
254 |
1304 |
SvTAINTED_on(TARG); |
605
|
254 |
1305 |
SvTAINTED_on(TARG); |
668
|
928 |
0 |
EXTEND(SP, items+1); |
|
0 |
928 |
EXTEND(SP, items+1); |
672
|
55 |
873 |
if(invocant_is_unix(self)) { |
676
|
0 |
873 |
PUSHMARK(SP); |
677
|
0 |
873 |
EXTEND(SP, 2); |
696
|
4 |
0 |
EXTEND(SP, items+1); |
|
0 |
4 |
EXTEND(SP, items+1); |
709
|
15 |
415 |
if(invocant_is_unix(self)) { |
710
|
0 |
15 |
if(items == 1) { |
714
|
3 |
12 |
if(items == 2) { |
722
|
12 |
0 |
if(SvCUR(RETVAL) == 0 || SvPVX(RETVAL)[SvCUR(RETVAL)-1] != '/') |
|
12 |
0 |
if(SvCUR(RETVAL) == 0 || SvPVX(RETVAL)[SvCUR(RETVAL)-1] != '/') |
730
|
0 |
415 |
PUSHMARK(SP); |
731
|
0 |
415 |
EXTEND(SP, 2); |
733
|
414 |
1 |
PUSHs(items == 1 ? &PL_sv_undef : ST(items-1)); |
739
|
6 |
409 |
if(items <= 2) { |
747
|
0 |
409 |
PUSHMARK(&ST(-1)); |
753
|
409 |
0 |
pv = SvPV(dir, len); |
754
|
409 |
0 |
need_slash = len == 0 || pv[len-1] != '/'; |
|
385 |
24 |
need_slash = len == 0 || pv[len-1] != '/'; |
756
|
385 |
24 |
if(need_slash) sv_catsv(RETVAL, SLASH_STRING_SV); |
768
|
1 |
3 |
if(items == 0) { |
772
|
1 |
2 |
if(items == 1) { |
780
|
2 |
0 |
if(SvCUR(RETVAL) == 0 || SvPVX(RETVAL)[SvCUR(RETVAL)-1] != '/') |
|
2 |
0 |
if(SvCUR(RETVAL) == 0 || SvPVX(RETVAL)[SvCUR(RETVAL)-1] != '/') |