]> gcc.gnu.org Git - gcc.git/commitdiff
jartool.c (extract_jar): Don't lseek to skip extra fields.
authorDaiki Ueno <ueno@unixuser.org>
Fri, 31 Jan 2003 22:48:27 +0000 (22:48 +0000)
committerTom Tromey <tromey@gcc.gnu.org>
Fri, 31 Jan 2003 22:48:27 +0000 (22:48 +0000)
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

fastjar/ChangeLog
fastjar/jartool.c

index 664710efbcbf526d3a47de9461a0ffcf6ba825e3..8cd13466b639bd407b7ccee80d3d926936b54bca 100644 (file)
@@ -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
index 3e946ab4f06e0a3ec17278a4c1424f998c27f007..aacf765f21d69e5f3e75e6132012d290a67d53e6 100644 (file)
@@ -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;
This page took 0.060298 seconds and 5 git commands to generate.