off_t ext_end = lseek (src_fd, ext_start, SEEK_HOLE);
if (ext_end < 0)
{
- if (errno != ENXIO)
+ if (! (ext_end == -1 && errno == ENXIO))
goto cannot_lseek;
ext_end = src_total_size;
if (ext_end <= ext_start)
}
ext_start = lseek (src_fd, dest_pos, SEEK_DATA);
- if (ext_start < 0)
- {
- if (errno != ENXIO)
- goto cannot_lseek;
- break;
- }
+ if (ext_start < 0 && ! (ext_start == -1 && errno == ENXIO))
+ goto cannot_lseek;
}
/* When the source file ends with a hole, we have to do a little more work,
#ifdef SEEK_HOLE
scan_inference->ext_start = lseek (fd, 0, SEEK_DATA);
- if (0 <= scan_inference->ext_start)
+ if (0 <= scan_inference->ext_start
+ || (scan_inference->ext_start == -1 && errno == ENXIO))
return LSEEK_SCANTYPE;
else if (errno != EINVAL && !is_ENOTSUP (errno))
- return errno == ENXIO ? LSEEK_SCANTYPE : ERROR_SCANTYPE;
+ return ERROR_SCANTYPE;
#endif
return ZERO_SCANTYPE;