unzip: try lseek before resorting to reading
authorStefani Seibold <stefani@seibold.net>
Sat, 25 Jul 2009 00:02:22 +0000 (02:02 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Sat, 25 Jul 2009 00:02:22 +0000 (02:02 +0200)
function                                             old     new   delta
unzip_skip                                            16      43     +27

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
archival/unzip.c

index 7b47a8ab8cbfa8f358cc58476864c8002e404b5c..4201d1dd21316d49fe4ae0c266b174c27cc29ce8 100644 (file)
@@ -208,7 +208,8 @@ static uint32_t read_next_cds(int count_m1, uint32_t cds_offset, cds_header_t *c
 
 static void unzip_skip(off_t skip)
 {
-       bb_copyfd_exact_size(zip_fd, -1, skip);
+       if (lseek(zip_fd, skip, SEEK_CUR) == (off_t)-1)
+               bb_copyfd_exact_size(zip_fd, -1, skip);
 }
 
 static void unzip_create_leading_dirs(const char *fn)