Branch Coverage

Cwd.xs
Criterion Covered Total %
branch 154 204 75.4


line true false branch
90 1502 57 if (path[0] == '/') {
93 1 1501 if (path[1] == '\0')
98 1 56 if (getcwd(resolved, MAXPATHLEN) == NULL) {
105 1557 0 if (remaining_len >= sizeof(remaining) || resolved_len >= MAXPATHLEN) {
0 1557 if (remaining_len >= sizeof(remaining) || resolved_len >= MAXPATHLEN) {
113 11057 1557 while (remaining_len != 0) {
121 1558 9499 s = p ? p : remaining + remaining_len;
122 0 11057 if ((STRLEN)(s - remaining) >= (STRLEN)sizeof(next_token)) {
129 9499 1558 if (p != NULL)
131 9300 1757 if (resolved[resolved_len - 1] != '/') {
132 0 9300 if (resolved_len + 1 >= MAXPATHLEN) {
139 0 11057 if (next_token[0] == '\0')
141 4 11053 else if (strEQ(next_token, "."))
143 255 10798 else if (strEQ(next_token, "..")) {
148 255 0 if (resolved_len > 1) {
163 0 10798 if (resolved_len >= MAXPATHLEN) {
170 0 10798 if (lstat(resolved, &sb) != 0) {
171 0 0 if (errno == ENOENT && p == NULL) {
0 0 if (errno == ENOENT && p == NULL) {
177 1 10797 if (S_ISLNK(sb.st_mode)) {
181 0 1 if (symlinks++ > MAXSYMLINKS) {
186 0 1 if (slen < 0)
199 0 1 if (symlink[0] == '/') {
202 1 0 } else if (resolved_len > 1) {
215 0 1 if (p != NULL) {
216 0 0 if (symlink[slen - 1] != '/') {
217 0 0 if ((STRLEN)(slen + 1) >= (STRLEN)sizeof(symlink)) {
225 0 0 if (remaining_len >= sizeof(remaining)) {
243 1557 0 if (resolved_len > 1 && resolved[resolved_len - 1] == '/')
4 1553 if (resolved_len > 1 && resolved[resolved_len - 1] == '/')
460 1358 0 return SvPOK(invocant) && SvCUR(invocant) == 16 &&
98 1260 return SvPOK(invocant) && SvCUR(invocant) == 16 &&
70 28 return SvPOK(invocant) && SvCUR(invocant) == 16 &&
474 3 1743 SvGETMAGIC(path);
0 3 SvGETMAGIC(path);
475 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;
476 1738 4 p = SvPV_nomg(path, plen);
477 6 1736 if(plen == 0) return newSVpvs("");
481 3 1733 if(SvUTF8(path)) SvUTF8_on(retval);
499 908 828 if(p[0] == '/') {
502 107 949 do { p++; } while(p[0] == '/');
503 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] == '/')) {
506 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] == '/')) {
512 276 552 } else if(p[0] == '.' && p[1] == '/') {
188 88 } else if(p[0] == '.' && p[1] == '/') {
515 10 189 do { p++; } while(p[0] == '/');
516 2 187 } while(p[0] == '.' && p[1] == '/');
1 1 } while(p[0] == '.' && p[1] == '/');
517 39 149 if(p == pe) *o++ = '.';
519 105 1631 if(p == pe) goto end;
522 763 4716 if(!q) q = pe;
527 763 4716 if(p == pe) goto end;
529 51 4737 do { p++; } while(p[0] == '/');
530 865 3872 if(p == pe) goto end;
531 3319 553 if(p[0] != '.') break;
532 3 550 if(p+1 == pe) goto end;
533 529 21 if(p[1] != '/') break;
542 1 1735 SvTAINT(retval);
1 0 SvTAINT(retval);
574 131 0 dXSTARG;
576 4 127 if (ix == 1 && items != 0)
0 4 if (ix == 1 && items != 0)
579 18 113 XSprePUSH; PUSHTARG;
580 18 113 SvTAINTED_on(TARG);
588 1559 0 dXSTARG;
589 1557 2 char *const path = pathsv ? SvPV_nolen(pathsv) : (char *)".";
1507 50 char *const path = pathsv ? SvPV_nolen(pathsv) : (char *)".";
592 1558 1 if (
601 254 1304 SvTAINTED_on(TARG);
607 254 1305 SvTAINTED_on(TARG);
670 928 0 EXTEND(SP, items+1);
0 928 EXTEND(SP, items+1);
674 55 873 if(invocant_is_unix(self)) {
678 0 873 PUSHMARK(SP);
679 0 873 EXTEND(SP, 2);
698 4 0 EXTEND(SP, items+1);
0 4 EXTEND(SP, items+1);
711 15 415 if(invocant_is_unix(self)) {
712 0 15 if(items == 1) {
716 3 12 if(items == 2) {
724 12 0 if(SvCUR(RETVAL) == 0 || SvPVX(RETVAL)[SvCUR(RETVAL)-1] != '/')
12 0 if(SvCUR(RETVAL) == 0 || SvPVX(RETVAL)[SvCUR(RETVAL)-1] != '/')
732 0 415 PUSHMARK(SP);
733 0 415 EXTEND(SP, 2);
735 414 1 PUSHs(items == 1 ? &PL_sv_undef : ST(items-1));
741 6 409 if(items <= 2) {
749 0 409 PUSHMARK(&ST(-1));
755 409 0 pv = SvPV(dir, len);
756 409 0 need_slash = len == 0 || pv[len-1] != '/';
385 24 need_slash = len == 0 || pv[len-1] != '/';
758 385 24 if(need_slash) sv_catsv(RETVAL, SLASH_STRING_SV);
770 1 3 if(items == 0) {
774 1 2 if(items == 1) {
782 2 0 if(SvCUR(RETVAL) == 0 || SvPVX(RETVAL)[SvCUR(RETVAL)-1] != '/')
2 0 if(SvCUR(RETVAL) == 0 || SvPVX(RETVAL)[SvCUR(RETVAL)-1] != '/')