summaryrefslogtreecommitdiff
path: root/libarchive/archive_read_support_format_xar.c
diff options
context:
space:
mode:
authorTim Kientzle <kientzle@acm.org>2013-04-06 12:06:15 -0700
committerTim Kientzle <kientzle@acm.org>2013-04-06 12:06:15 -0700
commit627d1f745416468e9ab3b4b020ca3fb118a89a93 (patch)
tree79671f76966bf25760d24a6420e993b52d723acc /libarchive/archive_read_support_format_xar.c
parentaf4124d6bc9343d39abe946614d5276505d454e4 (diff)
downloadlibarchive-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.c12
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);