diff options
author | Daiki Ueno <ueno@unixuser.org> | 2003-01-31 22:48:27 +0000 |
---|---|---|
committer | Tom Tromey <tromey@gcc.gnu.org> | 2003-01-31 22:48:27 +0000 |
commit | 0120f3d478fb1aa57fda945471357e5c5006f58d (patch) | |
tree | 3c4eb60ed277f4b006a285bb92ce4e79504a4b1a /fastjar | |
parent | 7c712dcc2b30ee6466a89ba586c9e00c4f378794 (diff) | |
download | gcc-0120f3d478fb1aa57fda945471357e5c5006f58d.tar.gz |
jartool.c (extract_jar): Don't lseek to skip extra fields.
2003-01-31 Daiki Ueno <ueno@unixuser.org>
* jartool.c (extract_jar): Don't lseek to skip extra fields.
(consume): If the stream is seekable, do lseek.
From-SVN: r62208
Diffstat (limited to 'fastjar')
-rw-r--r-- | fastjar/ChangeLog | 5 | ||||
-rw-r--r-- | fastjar/jartool.c | 16 |
2 files changed, 14 insertions, 7 deletions
diff --git a/fastjar/ChangeLog b/fastjar/ChangeLog index 664710efbcb..8cd13466b63 100644 --- a/fastjar/ChangeLog +++ b/fastjar/ChangeLog @@ -1,3 +1,8 @@ +2003-01-31 Daiki Ueno <ueno@unixuser.org> + + * jartool.c (extract_jar): Don't lseek to skip extra fields. + (consume): If the stream is seekable, do lseek. + 2003-01-28 Ranjit Mathew <rmathew@hotmail.com> * jargrep.c: Include xregex.h from libiberty instead of diff --git a/fastjar/jartool.c b/fastjar/jartool.c index 3e946ab4f06..aacf765f21d 100644 --- a/fastjar/jartool.c +++ b/fastjar/jartool.c @@ -1465,9 +1465,6 @@ int extract_jar(int fd, char **files, int file_num){ } if(method == 8 || flags & 0x0008){ - if(seekable) - lseek(fd, eflen, SEEK_CUR); - else consume(&pbf, eflen); inflate_file(&pbf, f_fd, &ze); @@ -1502,9 +1499,6 @@ int extract_jar(int fd, char **files, int file_num){ #endif } - if(seekable) - lseek(fd, eflen, SEEK_CUR); - else consume(&pbf, eflen); } @@ -1849,6 +1843,14 @@ int consume(pb_file *pbf, int amt){ printf("Consuming %d bytes\n", amt); #endif + if (seekable){ + if (amt <= (int)pbf->buff_amt) + pb_read(pbf, buff, amt); + else { + lseek(pbf->fd, amt - pbf->buff_amt, SEEK_CUR); + pb_read(pbf, buff, pbf->buff_amt); /* clear pbf */ + } + } else while(tc < amt){ rdamt = pb_read(pbf, buff, ((amt - tc) < RDSZ ? (amt - tc) : RDSZ)); #ifdef DEBUG @@ -1858,7 +1860,7 @@ int consume(pb_file *pbf, int amt){ } #ifdef DEBUG - printf("%d bytes consumed\n", tc); + printf("%d bytes consumed\n", amt); #endif return 0; |