X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/7c74e7fe1de14f32dcd6f3c9cdd727de540bbd0e..67e49a98bbba6793cf1e344477bee9e46d4d5c71:/src/common/unzip.c diff --git a/src/common/unzip.c b/src/common/unzip.c index 1cc334155f..551b1c6b2d 100644 --- a/src/common/unzip.c +++ b/src/common/unzip.c @@ -1,15 +1,17 @@ +/* + +This file was altered for needs of wxWindows. +$Id$ + +*/ + /* unzip.c -- IO on .zip files using zlib Version 0.15 beta, Mar 19th, 1998, Read unzip.h for more info + */ -#if 0 -for what compiler ? -#if !defined(__VISAGECPP__) -# pragma warning(disable:4001) /* non standard extension used: single line comment */ -#endif -#endif #include "wx/setup.h" @@ -142,11 +144,16 @@ typedef struct file if we are decompressing it */ } unz_s; -#if defined (__VISAGECPP__) +#if defined (__VISAGECPP__) || defined(__BORLANDC__) /* VA always requires prototypes */ int unzlocal_CheckCurrentFileCoherencyHeader (unz_s*, uInt*, uLong*, uInt*); #endif +/* disable warnings about K&R declarations until the end of file */ +#ifdef _MSC_VER +#pragma warning(disable:4131) +#endif /* VC++ */ + /* =========================================================================== Read a byte from a gz_stream; update next_in and avail_in. Return EOF for end of file. @@ -351,7 +358,7 @@ local uLong unzlocal_SearchCentralDir(fin) return uPosFound; } -#ifdef __WXMAC__ +#if defined(__WXMAC__) && !defined(__UNIX__) void wxUnix2MacFilename (char *s) ; void wxUnix2MacFilename (char *s) @@ -360,23 +367,23 @@ wxUnix2MacFilename (char *s) { if ( *s == '.' ) { - // relative path , since it goes on with slash which is translated to a : + /* relative path , since it goes on with slash which is translated to a : */ memmove( s , s+1 ,strlen( s ) ) ; } else if ( *s == '/' ) { - // absolute path -> on mac just start with the drive name + /* absolute path -> on mac just start with the drive name */ memmove( s , s+1 ,strlen( s ) ) ; } else { -// wxASSERT_MSG( 1 , "unkown path beginning" ) ; +/* wxASSERT_MSG( 1 , "unkown path beginning" ) ; */ } while (*s) { if (*s == '/' || *s == '\\') { - // convert any back-directory situations + /* convert any back-directory situations */ if ( *(s+1) == '.' && *(s+2) == '.' && ( (*(s+3) == '/' || *(s+3) == '\\') ) ) { *s = ':'; @@ -423,10 +430,10 @@ extern unzFile ZEXPORT unzOpen (path) if (unz_copyright[0]!=' ') return NULL; -#ifdef __WXMAC__ +#if defined(__WXMAC__) && !defined(__UNIX__) strcpy( wxBuffer , path ) ; wxUnix2MacFilename( wxBuffer ) ; - fin=fopen(wxBuffer,"rb"); + fin=fopen(wxBuffer,"rb"); #else fin=fopen(path,"rb"); #endif @@ -604,10 +611,12 @@ local int unzlocal_GetCurrentFileInfoInternal (file, /* we check the magic */ if (err==UNZ_OK) + { if (unzlocal_getLong(s->file,&uMagic) != UNZ_OK) err=UNZ_ERRNO; else if (uMagic!=0x02014b50) err=UNZ_BADZIPFILE; + } if (unzlocal_getShort(s->file,&file_info.version) != UNZ_OK) err=UNZ_ERRNO; @@ -684,10 +693,13 @@ local int unzlocal_GetCurrentFileInfoInternal (file, uSizeRead = extraFieldBufferSize; if (lSeek!=0) + { if (fseek(s->file,lSeek,SEEK_CUR)==0) lSeek=0; else err=UNZ_ERRNO; + } + if ((file_info.size_file_extra>0) && (extraFieldBufferSize>0)) if (fread(extraField,(uInt)uSizeRead,1,s->file)!=1) err=UNZ_ERRNO; @@ -709,10 +721,13 @@ local int unzlocal_GetCurrentFileInfoInternal (file, uSizeRead = commentBufferSize; if (lSeek!=0) + { if (fseek(s->file,lSeek,SEEK_CUR)==0) lSeek=0; else err=UNZ_ERRNO; + } + if ((file_info.size_file_comment>0) && (commentBufferSize>0)) if (fread(szComment,(uInt)uSizeRead,1,s->file)!=1) err=UNZ_ERRNO; @@ -824,12 +839,18 @@ extern int ZEXPORT unzLocateFile (file, szFileName, iCaseSensitivity) { unz_s* s; int err; - - + const char *c; + char *c2; + char szFileName2[UNZ_MAXFILENAMEINZIP+1]; + uLong num_fileSaved; uLong pos_in_central_dirSaved; - + for (c = szFileName, c2 = szFileName2; *c != '\0'; c++, c2++) + if (*c == '\\') *c2 = '/'; + else *c2 = *c; + *c2 = '\0'; + if (file==NULL) return UNZ_PARAMERROR; @@ -851,8 +872,9 @@ extern int ZEXPORT unzLocateFile (file, szFileName, iCaseSensitivity) unzGetCurrentFileInfo(file,NULL, szCurrentFileName,sizeof(szCurrentFileName)-1, NULL,0,NULL,0); + for (c2 = szCurrentFileName; *c2 != '\0'; c2++) if (*c2 == '\\') *c2 = '/'; if (unzStringFileNameCompare(szCurrentFileName, - szFileName,iCaseSensitivity)==0) + szFileName2,iCaseSensitivity)==0) return UNZ_OK; err = unzGoToNextFile(file); } @@ -893,10 +915,12 @@ local int unzlocal_CheckCurrentFileCoherencyHeader (s,piSizeVar, if (err==UNZ_OK) + { if (unzlocal_getLong(s->file,&uMagic) != UNZ_OK) err=UNZ_ERRNO; else if (uMagic!=0x04034b50) err=UNZ_BADZIPFILE; + } if (unzlocal_getShort(s->file,&uData) != UNZ_OK) err=UNZ_ERRNO; @@ -1335,7 +1359,6 @@ extern int ZEXPORT unzGetGlobalComment (file, szComment, uSizeBuf) char *szComment; uLong uSizeBuf; { - int err=UNZ_OK; unz_s* s; uLong uReadThis ; if (file==NULL)