]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
If seek fails, fail the xar read. We should be able to do better than this.
authorTim Kientzle <kientzle@acm.org>
Sat, 6 Apr 2013 19:06:15 +0000 (12:06 -0700)
committerTim Kientzle <kientzle@acm.org>
Sat, 6 Apr 2013 19:06:15 +0000 (12:06 -0700)
libarchive/archive_read_support_format_xar.c

index 780e749d7096ed28d5358bb34936d914a11eb599..6a9e1923be6937d99c3f45b27a1c5f833cd4d550 100644 (file)
@@ -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);