Eliminated seeks so that we work correctly on pipes, and removed reliance on
authorMatt Kraai <kraai@debian.org>
Wed, 18 Apr 2001 14:49:55 +0000 (14:49 -0000)
committerMatt Kraai <kraai@debian.org>
Wed, 18 Apr 2001 14:49:55 +0000 (14:49 -0000)
undefined evaluation ordering.  Thanks to Anthony Towns for explanation and
solution.

archival/libunarchive/decompress_unzip.c
archival/libunarchive/unzip.c
libbb/unzip.c

index b843ec8124062da8e4cb200d01609a68a6908453..9568c2870591f0fa97169d93ba52f52df3aabb0d 100644 (file)
@@ -904,6 +904,7 @@ extern int unzip(FILE *l_in_file, FILE *l_out_file)
        int method;
        typedef void (*sig_type) (int);
        int exit_code=0;        /* program exit code */
+       int i;
 
        in_file = l_in_file;
        out_file = l_out_file;
@@ -949,10 +950,16 @@ extern int unzip(FILE *l_in_file, FILE *l_out_file)
        flags = (unsigned char) fgetc(in_file);
 
        /* Ignore time stamp(4), extra flags(1), OS type(1) */
-       fseek(in_file, 6, SEEK_CUR);
+       for (i = 0; i < 6; i++)
+               fgetc(in_file);
 
        if ((flags & extra_field) != 0) {
-               fseek(in_file, (size_t) fgetc(in_file) + ((size_t)fgetc(in_file) << 8), SEEK_CUR);
+               size_t extra;
+               extra = fgetc(in_file);
+               extra += fgetc(in_file) << 8;
+
+               for (i = 0; i < extra; i++)
+                       fgetc(in_file);
        }
 
        /* Discard original name if any */
index b843ec8124062da8e4cb200d01609a68a6908453..9568c2870591f0fa97169d93ba52f52df3aabb0d 100644 (file)
@@ -904,6 +904,7 @@ extern int unzip(FILE *l_in_file, FILE *l_out_file)
        int method;
        typedef void (*sig_type) (int);
        int exit_code=0;        /* program exit code */
+       int i;
 
        in_file = l_in_file;
        out_file = l_out_file;
@@ -949,10 +950,16 @@ extern int unzip(FILE *l_in_file, FILE *l_out_file)
        flags = (unsigned char) fgetc(in_file);
 
        /* Ignore time stamp(4), extra flags(1), OS type(1) */
-       fseek(in_file, 6, SEEK_CUR);
+       for (i = 0; i < 6; i++)
+               fgetc(in_file);
 
        if ((flags & extra_field) != 0) {
-               fseek(in_file, (size_t) fgetc(in_file) + ((size_t)fgetc(in_file) << 8), SEEK_CUR);
+               size_t extra;
+               extra = fgetc(in_file);
+               extra += fgetc(in_file) << 8;
+
+               for (i = 0; i < extra; i++)
+                       fgetc(in_file);
        }
 
        /* Discard original name if any */
index b843ec8124062da8e4cb200d01609a68a6908453..9568c2870591f0fa97169d93ba52f52df3aabb0d 100644 (file)
@@ -904,6 +904,7 @@ extern int unzip(FILE *l_in_file, FILE *l_out_file)
        int method;
        typedef void (*sig_type) (int);
        int exit_code=0;        /* program exit code */
+       int i;
 
        in_file = l_in_file;
        out_file = l_out_file;
@@ -949,10 +950,16 @@ extern int unzip(FILE *l_in_file, FILE *l_out_file)
        flags = (unsigned char) fgetc(in_file);
 
        /* Ignore time stamp(4), extra flags(1), OS type(1) */
-       fseek(in_file, 6, SEEK_CUR);
+       for (i = 0; i < 6; i++)
+               fgetc(in_file);
 
        if ((flags & extra_field) != 0) {
-               fseek(in_file, (size_t) fgetc(in_file) + ((size_t)fgetc(in_file) << 8), SEEK_CUR);
+               size_t extra;
+               extra = fgetc(in_file);
+               extra += fgetc(in_file) << 8;
+
+               for (i = 0; i < extra; i++)
+                       fgetc(in_file);
        }
 
        /* Discard original name if any */