diff options
author | Tim Kientzle <kientzle@acm.org> | 2013-04-06 12:06:15 -0700 |
---|---|---|
committer | Tim Kientzle <kientzle@acm.org> | 2013-04-06 12:06:15 -0700 |
commit | 627d1f745416468e9ab3b4b020ca3fb118a89a93 (patch) | |
tree | 79671f76966bf25760d24a6420e993b52d723acc /libarchive/archive_read_support_format_xar.c | |
parent | af4124d6bc9343d39abe946614d5276505d454e4 (diff) | |
download | libarchive-627d1f745416468e9ab3b4b020ca3fb118a89a93.tar.gz |
If seek fails, fail the xar read. We should be able to do better than this.
Diffstat (limited to 'libarchive/archive_read_support_format_xar.c')
-rw-r--r-- | libarchive/archive_read_support_format_xar.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/libarchive/archive_read_support_format_xar.c b/libarchive/archive_read_support_format_xar.c index 780e749d..6a9e1923 100644 --- a/libarchive/archive_read_support_format_xar.c +++ b/libarchive/archive_read_support_format_xar.c @@ -967,10 +967,14 @@ move_reading_point(struct archive_read *a, uint64_t offset) return ((int)step); xar->offset += step; } else { - archive_set_error(&(a->archive), - ARCHIVE_ERRNO_MISC, - "Cannot seek."); - return (ARCHIVE_FAILED); + int64_t pos = __archive_read_seek(a, offset, SEEK_SET); + if (pos == ARCHIVE_FAILED) { + archive_set_error(&(a->archive), + ARCHIVE_ERRNO_MISC, + "Cannot seek."); + return (ARCHIVE_FAILED); + } + xar->offset = pos; } } return (ARCHIVE_OK); |