From: Michihiro NAKAJIMA Date: Sun, 5 Feb 2012 19:51:16 +0000 (+0900) Subject: Fix issue 238. X-Git-Tag: v3.0.4~2^2~116^2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=refs%2Fpull%2F3%2Fhead;p=thirdparty%2Flibarchive.git Fix issue 238. Skip the setup sparse on linux without a check of errno if ioctl(,FS_IOC_FIEMAP,) failed because the errno is not fixed , for example, some file system returns ENOTTY, another returns EOPNOTSUPP, or EINVAL and so on. We cannot decide what errno exactly indicates an unsupported error. --- diff --git a/libarchive/archive_read_disk_entry_from_file.c b/libarchive/archive_read_disk_entry_from_file.c index eef42ef74..641500840 100644 --- a/libarchive/archive_read_disk_entry_from_file.c +++ b/libarchive/archive_read_disk_entry_from_file.c @@ -859,16 +859,9 @@ setup_sparse(struct archive_read_disk *a, r = ioctl(fd, FS_IOC_FIEMAP, fm); if (r < 0) { - /* When errno is ENOTTY, it is better we should - * return ARCHIVE_OK because an earlier version - *(<2.6.28) cannot perfom FS_IOC_FIEMAP. - * We should also check if errno is EOPNOTSUPP, - * it means "Operation not supported". */ - if (errno != ENOTTY && errno != EOPNOTSUPP) { - archive_set_error(&a->archive, errno, - "FIEMAP failed"); - exit_sts = ARCHIVE_FAILED; - } + /* When something error happens, it is better we + * should return ARCHIVE_OK because an earlier + * version(<2.6.28) cannot perfom FS_IOC_FIEMAP. */ goto exit_setup_sparse; } if (fm->fm_mapped_extents == 0)