| line | true | false | branch | 
 
| 418 | 31 | 27 | while (grp->size < grp->int2 && !EIO_CANCELLED (grp)) | 
 
|  | 31 | 0 | while (grp->size < grp->int2 && !EIO_CANCELLED (grp)) | 
 
| 422 | 22 | 9 | EIO_FEED (grp); | 
 
| 425 | 11 | 20 | if (!(grp->flags & ETP_FLAG_GROUPADD)) | 
 
| 442 | 5 | 28 | if (!grp->size && grp->flags & ETP_FLAG_DELAYED) | 
 
|  | 5 | 0 | if (!grp->size && grp->flags & ETP_FLAG_DELAYED) | 
 
| 451 | 4 | 58 | if ((req)->flags & EIO_FLAG_PTR1_FREE) free (req->ptr1); | 
 
| 452 | 28 | 34 | if ((req)->flags & EIO_FLAG_PTR2_FREE) free (req->ptr2); | 
 
| 462 | 33 | 29 | if (req->grp) | 
 
| 468 | 13 | 20 | if (req->grp_next) req->grp_next->grp_prev = req->grp_prev; | 
 
| 469 | 26 | 7 | if (req->grp_prev) req->grp_prev->grp_next = req->grp_next; | 
 
| 471 | 7 | 26 | if (grp->grp_first == req) | 
 
| 476 | 33 | 0 | if (!res) | 
 
| 639 | 0 | 0 | if (res < 0 && errno == ENOSYS && fd >= 0) | 
 
|  | 0 | 0 | if (res < 0 && errno == ENOSYS && fd >= 0) | 
 
|  | 0 | 0 | if (res < 0 && errno == ENOSYS && fd >= 0) | 
 
| 664 | 0 | 0 | if (!res || errno != ENOSYS) | 
 
|  | 0 | 0 | if (!res || errno != ENOSYS) | 
 
| 718 | 0 | 0 | if (!count) | 
 
| 792 | 0 | 0 | if (res <= 128 * 1024 * 1024) | 
 
| 794 | 0 | 0 | if (res > 0) | 
 
| 797 | 0 | 0 | if (written) | 
 
| 809 | 0 | 0 | if (!count) | 
 
| 814 | 0 | 0 | if (res < 0 | 
 
| 815 | 0 | 0 | && (errno == ENOSYS || errno == EINVAL || errno == ENOTSOCK | 
 
|  | 0 | 0 | && (errno == ENOSYS || errno == EINVAL || errno == ENOTSOCK | 
 
|  | 0 | 0 | && (errno == ENOSYS || errno == EINVAL || errno == ENOTSOCK | 
 
| 818 | 0 | 0 | || errno == ENOTSUP | 
 
| 821 | 0 | 0 | || errno == EOPNOTSUPP /* BSDs */ | 
 
| 830 | 0 | 0 | dBUF; | 
 
| 834 | 0 | 0 | while (count) | 
 
| 840 | 0 | 0 | if (cnt <= 0) | 
 
| 842 | 0 | 0 | if (cnt && !res) res = -1; | 
 
|  | 0 | 0 | if (cnt && !res) res = -1; | 
 
| 848 | 0 | 0 | if (cnt <= 0) | 
 
| 850 | 0 | 0 | if (cnt && !res) res = -1; | 
 
|  | 0 | 0 | if (cnt && !res) res = -1; | 
 
| 873 | 0 | 0 | if (!page) | 
 
| 980 | 0 | 0 | if (addr < end) | 
 
| 981 | 0 | 0 | if (flags & EIO_MT_MODIFY) /* modify */ | 
 
| 982 | 0 | 0 | do { *((volatile sig_atomic_t *)addr) |= 0; } while ((addr += page) < end && !EIO_CANCELLED (req)); | 
 
|  | 0 | 0 | do { *((volatile sig_atomic_t *)addr) |= 0; } while ((addr += page) < end && !EIO_CANCELLED (req)); | 
 
| 984 | 0 | 0 | do { *((volatile sig_atomic_t *)addr)     ; } while ((addr += page) < end && !EIO_CANCELLED (req)); | 
 
|  | 0 | 0 | do { *((volatile sig_atomic_t *)addr)     ; } while ((addr += page) < end && !EIO_CANCELLED (req)); | 
 
| 1004 | 0 | 0 | req->result = req->offs == (off_t)-1 ? -1 : 0; | 
 
| 1021 | 0 | 1 | if (!rel) | 
 
| 1025 | 0 | 1 | if (!*rel) | 
 
| 1071 | 1 | 0 | if (*rel != '/') | 
 
| 1076 | 0 | 1 | if (wd == EIO_INVALID_WD) | 
 
| 1079 | 1 | 0 | if (wd == EIO_CWD) | 
 
| 1081 | 0 | 1 | if (!getcwd (res, EIO_PATH_MAX)) | 
 
| 1089 | 1 | 0 | if (res [1]) /* only use if not / */ | 
 
| 1093 | 1 | 1 | while (*rel) | 
 
| 1098 | 1 | 1 | while (*rel && *rel != '/') | 
 
|  | 1 | 0 | while (*rel && *rel != '/') | 
 
| 1103 | 0 | 1 | if (!len) /* skip slashes */ | 
 
| 1109 | 1 | 0 | if (beg [0] == '.') | 
 
| 1111 | 1 | 0 | if (len == 1) | 
 
| 1114 | 0 | 0 | if (beg [1] == '.' && len == 2) | 
 
|  | 0 | 0 | if (beg [1] == '.' && len == 2) | 
 
| 1118 | 0 | 0 | while (res != tmpbuf->ptr) | 
 
| 1119 | 0 | 0 | if (*--res == '/') | 
 
| 1127 | 0 | 0 | if (res + 1 + len + 1 >= tmp1) | 
 
| 1140 | 0 | 0 | if (linklen < 0) | 
 
| 1142 | 0 | 0 | if (errno != EINVAL) | 
 
| 1154 | 0 | 0 | if (linklen + 1 + rellen >= EIO_PATH_MAX) /* also catch linklen >= EIO_PATH_MAX */ | 
 
| 1158 | 0 | 0 | if (!--symlinks) | 
 
| 1161 | 0 | 0 | if (*tmp1 == '/') | 
 
| 1174 | 0 | 1 | if (res == tmpbuf->ptr) | 
 
| 1184 | 0 | 756 | return a->score - b->score ? a->score - b->score /* works because our signed char is always 0..100 */ | 
 
|  | 674 | 82 | return a->score - b->score ? a->score - b->score /* works because our signed char is always 0..100 */ | 
 
| 1206 | 3 | 0 | if (size <= EIO_SORT_FAST) | 
 
| 1218 | 0 | 0 | for (i = 0; i < sizeof (eio_ino_t); ++i) | 
 
| 1223 | 0 | 0 | for (i = 0; i < sizeof (eio_ino_t); ++i) | 
 
| 1229 | 0 | 0 | for (j = 0; j < 8; ++j) | 
 
| 1230 | 0 | 0 | if (inode_bits & (((eio_ino_t)1) << (i * 8 + j))) | 
 
| 1234 | 0 | 0 | for (j = 0; j < 8; ++j) | 
 
| 1235 | 0 | 0 | if (score_bits & (1 << j)) | 
 
| 1264 | 0 | 0 | if (b - a < EIO_SORT_CUTOFF) | 
 
| 1271 | 0 | 0 | if (!(((unsigned char *)a)[O] & M)) | 
 
| 1273 | 0 | 0 | else if (!(((unsigned char *)--b)[O] & M)) | 
 
| 1278 | 0 | 0 | while (b > a); | 
 
| 1281 | 0 | 0 | if (!*--bit) | 
 
| 1292 | 0 | 0 | while (stk_idx--); | 
 
| 1305 | 3 | 0 | for (i = size > EIO_SORT_FAST ? EIO_SORT_CUTOFF + 1 : size; --i; ) | 
 
|  | 72 | 3 | for (i = size > EIO_SORT_FAST ? EIO_SORT_CUTOFF + 1 : size; --i; ) | 
 
| 1306 | 10 | 62 | if (EIO_DENT_CMP (dents [i], <, *min)) | 
 
| 1319 | 72 | 3 | for (i = dents + 1; i < dents + size; ++i) | 
 
| 1323 | 612 | 72 | for (j = i - 1; EIO_DENT_CMP (*j, >, value); --j) | 
 
| 1334 | 0 | 3 | if (size <= 1) | 
 
| 1368 | 1 | 3 | if (!(flags & EIO_READDIR_DENTS)) | 
 
| 1419 | 1 | 3 | int fd = openat (WD2FD (req->wd), req->ptr1, O_CLOEXEC | O_SEARCH | O_DIRECTORY | O_NONBLOCK); | 
 
| 1421 | 0 | 4 | if (fd < 0) | 
 
| 1426 | 0 | 4 | if (!dirp) | 
 
| 1440 | 0 | 4 | if (req->flags & EIO_FLAG_PTR1_FREE) | 
 
| 1444 | 3 | 1 | req->ptr1 = dents = flags ? malloc (dentalloc * sizeof (eio_dirent)) : 0; | 
 
| 1447 | 4 | 0 | if (!names || (flags && !dents)) | 
 
|  | 3 | 1 | if (!names || (flags && !dents)) | 
 
|  | 0 | 3 | if (!names || (flags && !dents)) | 
 
| 1462 | 4 | 148 | if (done) | 
 
| 1469 | 0 | 4 | if (errno) | 
 
| 1477 | 2 | 2 | if (flags & EIO_READDIR_STAT_ORDER) | 
 
| 1478 | 0 | 2 | eio_dent_sort (dents, dentoffs, flags & EIO_READDIR_DIRS_FIRST ? 7 : 0, inode_bits); | 
 
| 1479 | 1 | 1 | else if (flags & EIO_READDIR_DIRS_FIRST) | 
 
| 1480 | 0 | 1 | if (flags & EIO_READDIR_FOUND_UNKNOWN) | 
 
| 1490 | 32 | 1 | while (oth > dir) | 
 
| 1492 | 2 | 30 | if (dir->type == EIO_DT_DIR) | 
 
| 1494 | 3 | 27 | else if ((--oth)->type == EIO_DT_DIR) | 
 
| 1513 | 8 | 140 | if (name [0] != '.' || (name [1] && (name [1] != '.' || name [2]))) | 
 
|  | 4 | 4 | if (name [0] != '.' || (name [1] && (name [1] != '.' || name [2]))) | 
 
|  | 4 | 0 | if (name [0] != '.' || (name [1] && (name [1] != '.' || name [2]))) | 
 
|  | 0 | 4 | if (name [0] != '.' || (name [1] && (name [1] != '.' || name [2]))) | 
 
| 1517 | 0 | 140 | while (ecb_expect_false (namesoffs + len > namesalloc)) | 
 
| 1522 | 0 | 0 | if (!names) | 
 
| 1528 | 105 | 35 | if (dents) | 
 
| 1532 | 0 | 105 | if (ecb_expect_false (dentoffs == dentalloc)) | 
 
| 1537 | 0 | 0 | if (!dents) | 
 
| 1602 | 35 | 70 | if (flags & EIO_READDIR_DIRS_FIRST) | 
 
| 1604 | 0 | 35 | if (ent->type == EIO_DT_UNKNOWN) | 
 
| 1606 | 0 | 0 | if (*name == '.') /* leading dots are likely directories, and, in any case, rare */ | 
 
| 1608 | 0 | 0 | else if (!strchr (name, '.')) /* absence of dots indicate likely dirs */ | 
 
| 1609 | 0 | 0 | ent->score = len <= 2 ? 4 - len : len <= 4 ? 4 : len <= 7 ? 5 : 6; /* shorter == more likely dir, but avoid too many classes */ | 
 
|  | 0 | 0 | ent->score = len <= 2 ? 4 - len : len <= 4 ? 4 : len <= 7 ? 5 : 6; /* shorter == more likely dir, but avoid too many classes */ | 
 
|  | 0 | 0 | ent->score = len <= 2 ? 4 - len : len <= 4 ? 4 : len <= 7 ? 5 : 6; /* shorter == more likely dir, but avoid too many classes */ | 
 
| 1611 | 5 | 30 | else if (ent->type == EIO_DT_DIR) | 
 
| 1620 | 0 | 148 | if (EIO_CANCELLED (req)) | 
 
| 1678 | 0 | 1 | if (len < 0) | 
 
| 1682 | 0 | 1 | fd = openat (WD2FD (wd), path, O_CLOEXEC | O_SEARCH | O_DIRECTORY | O_NONBLOCK); | 
 
| 1690 | 0 | 1 | if (ecb_expect_false (fd == 0)) | 
 
| 1698 | 0 | 1 | if (fd < 0) | 
 
| 1728 | 9 | 0 | if (wd != EIO_INVALID_WD && wd != EIO_CWD) | 
 
|  | 1 | 8 | if (wd != EIO_INVALID_WD && wd != EIO_CWD) | 
 
| 1760 | 0 | 0 | if (fd < 0) | 
 
| 1774 | 0 | 0 | if (fd < 0) | 
 
| 1808 | 0 | 0 | if (fd < 0) | 
 
| 1811 | 0 | 0 | if (req->offs < 0 || !req->size) /* do we need the size? */ | 
 
|  | 0 | 0 | if (req->offs < 0 || !req->size) /* do we need the size? */ | 
 
| 1815 | 0 | 0 | if (req->offs < 0) | 
 
| 1818 | 0 | 0 | if (!req->size) | 
 
| 1822 | 0 | 0 | ALLOC (req->size); | 
 
|  | 0 | 0 | ALLOC (req->size); | 
 
| 1881 | 2 | 72 | if (ecb_expect_false (EIO_CANCELLED (req))) | 
 
| 1888 | 8 | 64 | if (ecb_expect_false (req->wd == EIO_INVALID_WD)) | 
 
| 1895 | 31 | 33 | if (req->type >= EIO_OPEN) | 
 
| 1898 | 17 | 14 | dirfd = WD2FD (req->wd); | 
 
| 1907 | 0 | 1 | req->result = req->wd == EIO_INVALID_WD ? -1 : 0; | 
 
| 1913 | 0 | 1 | case EIO_READ:      ALLOC (req->size); | 
 
|  | 0 | 0 | case EIO_READ:      ALLOC (req->size); | 
 
| 1916 | 1 | 0 | : read      (req->int1, req->ptr2, req->size); break; | 
 
| 1919 | 0 | 0 | : write     (req->int1, req->ptr2, req->size); break; | 
 
| 1929 | 17 | 0 | case EIO_STAT:      ALLOC (sizeof (EIO_STRUCT_STAT)); | 
 
|  | 0 | 17 | case EIO_STAT:      ALLOC (sizeof (EIO_STRUCT_STAT)); | 
 
| 1931 | 6 | 0 | case EIO_LSTAT:     ALLOC (sizeof (EIO_STRUCT_STAT)); | 
 
|  | 0 | 6 | case EIO_LSTAT:     ALLOC (sizeof (EIO_STRUCT_STAT)); | 
 
| 1941 | 0 | 1 | req->result = req->wd && SINGLEDOT (req->ptr1) | 
 
|  | 0 | 0 | req->result = req->wd && SINGLEDOT (req->ptr1) | 
 
|  | 0 | 0 | req->result = req->wd && SINGLEDOT (req->ptr1) | 
 
| 1945 | 0 | 0 | case EIO_RENAME:    req->result = eio__renameat2 ( | 
 
|  | 0 | 0 | case EIO_RENAME:    req->result = eio__renameat2 ( | 
 
| 1948 | 0 | 0 | req->wd && SINGLEDOT (req->ptr1) ? req->wd->str : req->ptr1, | 
 
|  | 0 | 0 | req->wd && SINGLEDOT (req->ptr1) ? req->wd->str : req->ptr1, | 
 
| 1954 | 0 | 0 | case EIO_LINK:      req->result = linkat    (dirfd, req->ptr1, WD2FD ((eio_wd)req->int3), req->ptr2, 0); break; | 
 
| 1957 | 0 | 0 | case EIO_STATVFS:   ALLOC (sizeof (EIO_STRUCT_STATVFS)); | 
 
|  | 0 | 0 | case EIO_STATVFS:   ALLOC (sizeof (EIO_STRUCT_STATVFS)); | 
 
| 1959 | 0 | 0 | case EIO_READLINK:  ALLOC (EIO_PATH_MAX); | 
 
|  | 0 | 0 | case EIO_READLINK:  ALLOC (EIO_PATH_MAX); | 
 
| 1961 | 0 | 0 | if (req->result == EIO_PATH_MAX) | 
 
| 1973 | 0 | 0 | if (req->nv1 != -1. || req->nv2 != -1.) | 
 
|  | 0 | 0 | if (req->nv1 != -1. || req->nv2 != -1.) | 
 
| 1985 | 0 | 0 | req->result = req->type == EIO_FUTIME | 
 
| 2047 | 0 | 0 | case EIO_REALPATH:  if (0 <= (req->result = eio__realpath (&self->tmpbuf, req->wd, req->ptr1))) | 
 
| 2049 | 0 | 0 | ALLOC (req->result); | 
 
|  | 0 | 0 | ALLOC (req->result); | 
 
| 2054 | 1 | 0 | case EIO_FSTAT:     ALLOC (sizeof (EIO_STRUCT_STAT)); | 
 
|  | 0 | 1 | case EIO_FSTAT:     ALLOC (sizeof (EIO_STRUCT_STAT)); | 
 
| 2057 | 0 | 0 | case EIO_FSTATVFS:  ALLOC (sizeof (EIO_STRUCT_STATVFS)); | 
 
|  | 0 | 0 | case EIO_FSTATVFS:  ALLOC (sizeof (EIO_STRUCT_STATVFS)); | 
 
| 2391 | 0 | 0 | REQ (EIO_GROUP); SEND; | 
 
| 2431 | 28 | 5 | if (grp->grp_first) |