2013-09-26 17:14:40 +02:00

147 lines
5.0 KiB
Plaintext

$NetBSD: patch-af,v 1.3 2012/07/18 22:10:21 marino Exp $
- don't declare own errno
- fix build failure where gzgetc() is a macro (seen in a recent Linux
bulk build)
XXX: what this code is doing (mixing gzFile* and FILE* indiscriminately
XXX: without even casting) is vile and will probably stop compiling at
XXX: some point.
JRM: That point arrived. The garbage spewed when compiled with
JRM: zlib >= 1.2.6. Cast gzFile everywhere to fix it.
JRM: David's gzgetc fix was changed; it broke too.
--- misc/archive.c.orig 2004-12-12 01:16:54.000000000 +0000
+++ misc/archive.c
@@ -48,9 +48,6 @@ Foundation, Inc., 675 Mass Ave, Cambridg
#define MAXBUFSIZE 32768
-extern int errno;
-
-
int
fsizeof (const char *filename)
// If USE_ZLIB is defined this function is very slow. Please avoid to use
@@ -84,15 +81,15 @@ fsizeof (const char *filename)
}
#if 1
// This is not much faster than the other method
- while (!gzeof (file))
- gzseek (file, 1024 * 1024, SEEK_CUR);
- size = gztell (file);
+ while (!gzeof ((gzFile)file))
+ gzseek ((gzFile)file, 1024 * 1024, SEEK_CUR);
+ size = gztell ((gzFile)file);
#else
// Is there a more efficient way to determine the uncompressed size?
while ((bytesread = gzread (file, buf, MAXBUFSIZE)) > 0)
size += bytesread;
#endif
- gzclose (file);
+ gzclose ((gzFile)file);
return size;
}
else if (magic[0] == 'P' && magic[1] == 'K' && magic[2] == 0x03 && magic[3] == 0x04)
@@ -384,7 +381,7 @@ fclose2 (FILE *file)
if (fmode == FM_NORMAL)
return fclose (file);
else if (fmode == FM_GZIP)
- return gzclose (file);
+ return gzclose ((gzFile)file);
else if (fmode == FM_ZIP)
{
unzCloseCurrentFile (file);
@@ -416,12 +413,12 @@ fseek2 (FILE *file, long offset, int mod
if (mode == SEEK_END) // zlib doesn't support SEEK_END
{
// Note that this is _slow_...
- while (!gzeof (file))
+ while (!gzeof ((gzFile)file))
{
- gzgetc (file); // necessary for _uncompressed_ files in order to set EOF
- gzseek (file, 1024 * 1024, SEEK_CUR);
+ gzgetc ((gzFile)file); // necessary for _uncompressed_ files in order to set EOF
+ gzseek ((gzFile)file, 1024 * 1024, SEEK_CUR);
}
- offset += gztell (file);
+ offset += gztell ((gzFile)file);
mode = SEEK_SET;
}
/*
@@ -433,8 +430,8 @@ fseek2 (FILE *file, long offset, int mod
DJGPP, Cygwin & GNU/Linux). It clears the EOF indicator.
*/
if (!finfo->compressed)
- gzrewind (file);
- return gzseek (file, offset, mode) == -1 ? -1 : 0;
+ gzrewind ((gzFile)file);
+ return gzseek ((gzFile)file, offset, mode) == -1 ? -1 : 0;
}
else if (finfo->fmode == FM_ZIP)
{
@@ -476,7 +473,7 @@ fread2 (void *buffer, size_t size, size_
return fread (buffer, size, number, file);
else if (fmode == FM_GZIP)
{
- int n = gzread (file, buffer, number * size);
+ int n = gzread ((gzFile)file, buffer, number * size);
return n / size;
}
else if (fmode == FM_ZIP)
@@ -498,7 +495,7 @@ fgetc2 (FILE *file)
if (fmode == FM_NORMAL)
return fgetc (file);
else if (fmode == FM_GZIP)
- return gzgetc (file);
+ return gzgetc ((gzFile)file);
else if (fmode == FM_ZIP)
{
char c;
@@ -521,7 +518,7 @@ fgets2 (char *buffer, int maxlength, FIL
return fgets (buffer, maxlength, file);
else if (fmode == FM_GZIP)
{
- char *retval = gzgets (file, buffer, maxlength);
+ char *retval = gzgets ((gzFile)file, buffer, maxlength);
return retval == Z_NULL ? NULL : retval;
}
else if (fmode == FM_ZIP)
@@ -556,7 +553,7 @@ feof2 (FILE *file)
if (fmode == FM_NORMAL)
return feof (file);
else if (fmode == FM_GZIP)
- return gzeof (file);
+ return gzeof ((gzFile)file);
else if (fmode == FM_ZIP)
return unzeof (file); // returns feof() of the "current file"
else
@@ -578,7 +575,7 @@ fwrite2 (const void *buffer, size_t size
return fwrite (buffer, size, number, file);
else if (fmode == FM_GZIP)
{
- int n = gzwrite (file, (void *) buffer, number * size);
+ int n = gzwrite ((gzFile)file, (void *) buffer, number * size);
return n / size;
}
else
@@ -596,7 +593,7 @@ fputc2 (int character, FILE *file)
if (fmode == FM_NORMAL)
return fputc (character, file);
else if (fmode == FM_GZIP)
- return gzputc (file, character);
+ return gzputc ((gzFile)file, character);
else
return EOF; // writing to zip files is not supported
#define fputc fputc2
@@ -612,7 +609,7 @@ ftell2 (FILE *file)
if (fmode == FM_NORMAL)
return ftell (file);
else if (fmode == FM_GZIP)
- return gztell (file);
+ return gztell ((gzFile)file);
else if (fmode == FM_ZIP)
return unztell (file); // returns ftell() of the "current file"
else