3 - don't declare own errno
4 - fix build failure where gzgetc() is a macro (seen in a recent Linux
7 XXX: what this code is doing (mixing gzFile* and FILE* indiscriminately
8 XXX: without even casting) is vile and will probably stop compiling at
11 JRM: That point arrived. The garbage spewed when compiled with
12 JRM: zlib >= 1.2.6. Cast gzFile everywhere to fix it.
13 JRM: David's gzgetc fix was changed; it broke too.
15 --- misc/archive.c.orig 2004-12-12 01:16:54.000000000 +0000
17 @@ -48,9 +48,6 @@ Foundation, Inc., 675 Mass Ave, Cambridg
18 #define MAXBUFSIZE 32768
25 fsizeof (const char *filename)
26 // If USE_ZLIB is defined this function is very slow. Please avoid to use
27 @@ -84,15 +81,15 @@ fsizeof (const char *filename)
30 // This is not much faster than the other method
31 - while (!gzeof (file))
32 - gzseek (file, 1024 * 1024, SEEK_CUR);
33 - size = gztell (file);
34 + while (!gzeof ((gzFile)file))
35 + gzseek ((gzFile)file, 1024 * 1024, SEEK_CUR);
36 + size = gztell ((gzFile)file);
38 // Is there a more efficient way to determine the uncompressed size?
39 while ((bytesread = gzread (file, buf, MAXBUFSIZE)) > 0)
43 + gzclose ((gzFile)file);
46 else if (magic[0] == 'P' && magic[1] == 'K' && magic[2] == 0x03 && magic[3] == 0x04)
47 @@ -384,7 +381,7 @@ fclose2 (FILE *file)
48 if (fmode == FM_NORMAL)
50 else if (fmode == FM_GZIP)
51 - return gzclose (file);
52 + return gzclose ((gzFile)file);
53 else if (fmode == FM_ZIP)
55 unzCloseCurrentFile (file);
56 @@ -416,12 +413,12 @@ fseek2 (FILE *file, long offset, int mod
57 if (mode == SEEK_END) // zlib doesn't support SEEK_END
59 // Note that this is _slow_...
60 - while (!gzeof (file))
61 + while (!gzeof ((gzFile)file))
63 - gzgetc (file); // necessary for _uncompressed_ files in order to set EOF
64 - gzseek (file, 1024 * 1024, SEEK_CUR);
65 + gzgetc ((gzFile)file); // necessary for _uncompressed_ files in order to set EOF
66 + gzseek ((gzFile)file, 1024 * 1024, SEEK_CUR);
68 - offset += gztell (file);
69 + offset += gztell ((gzFile)file);
73 @@ -433,8 +430,8 @@ fseek2 (FILE *file, long offset, int mod
74 DJGPP, Cygwin & GNU/Linux). It clears the EOF indicator.
76 if (!finfo->compressed)
78 - return gzseek (file, offset, mode) == -1 ? -1 : 0;
79 + gzrewind ((gzFile)file);
80 + return gzseek ((gzFile)file, offset, mode) == -1 ? -1 : 0;
82 else if (finfo->fmode == FM_ZIP)
84 @@ -476,7 +473,7 @@ fread2 (void *buffer, size_t size, size_
85 return fread (buffer, size, number, file);
86 else if (fmode == FM_GZIP)
88 - int n = gzread (file, buffer, number * size);
89 + int n = gzread ((gzFile)file, buffer, number * size);
92 else if (fmode == FM_ZIP)
93 @@ -498,7 +495,7 @@ fgetc2 (FILE *file)
94 if (fmode == FM_NORMAL)
96 else if (fmode == FM_GZIP)
97 - return gzgetc (file);
98 + return gzgetc ((gzFile)file);
99 else if (fmode == FM_ZIP)
102 @@ -521,7 +518,7 @@ fgets2 (char *buffer, int maxlength, FIL
103 return fgets (buffer, maxlength, file);
104 else if (fmode == FM_GZIP)
106 - char *retval = gzgets (file, buffer, maxlength);
107 + char *retval = gzgets ((gzFile)file, buffer, maxlength);
108 return retval == Z_NULL ? NULL : retval;
110 else if (fmode == FM_ZIP)
111 @@ -556,7 +553,7 @@ feof2 (FILE *file)
112 if (fmode == FM_NORMAL)
114 else if (fmode == FM_GZIP)
115 - return gzeof (file);
116 + return gzeof ((gzFile)file);
117 else if (fmode == FM_ZIP)
118 return unzeof (file); // returns feof() of the "current file"
120 @@ -578,7 +575,7 @@ fwrite2 (const void *buffer, size_t size
121 return fwrite (buffer, size, number, file);
122 else if (fmode == FM_GZIP)
124 - int n = gzwrite (file, (void *) buffer, number * size);
125 + int n = gzwrite ((gzFile)file, (void *) buffer, number * size);
129 @@ -596,7 +593,7 @@ fputc2 (int character, FILE *file)
130 if (fmode == FM_NORMAL)
131 return fputc (character, file);
132 else if (fmode == FM_GZIP)
133 - return gzputc (file, character);
134 + return gzputc ((gzFile)file, character);
136 return EOF; // writing to zip files is not supported
138 @@ -612,7 +609,7 @@ ftell2 (FILE *file)
139 if (fmode == FM_NORMAL)
141 else if (fmode == FM_GZIP)
142 - return gztell (file);
143 + return gztell ((gzFile)file);
144 else if (fmode == FM_ZIP)
145 return unztell (file); // returns ftell() of the "current file"