X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/5fde6fcc9b551340a194ae4c726db5ab64b5c594..4eb7c4b180d2ddf44f9b82e5d56c81fcdc530f64:/src/common/unzip.c diff --git a/src/common/unzip.c b/src/common/unzip.c index 551b1c6b2d..04f8a8c0b8 100644 --- a/src/common/unzip.c +++ b/src/common/unzip.c @@ -12,16 +12,26 @@ $Id$ */ - - -#include "wx/setup.h" +#include "wx/platform.h" #if wxUSE_ZLIB && wxUSE_ZIPSTREAM #include #include #include +/* #include "zlib.h" + normally, the compiler options should contain -I../zlib, but it is + apparently not the case for all MSW makefiles and so, unless we use + configure (which defines __WX_SETUP_H__) or it is explicitly overridden by + the user (who can define wxUSE_ZLIB_H_IN_PATH), we hardcode the path here +*/ +#if defined(__WXMSW__) && !defined(__WX_SETUP_H__) && !defined(wxUSE_ZLIB_H_IN_PATH) + #include "../zlib/zlib.h" +#else + #include "zlib.h" +#endif + /* Not the right solution (paths in makefiles) but... */ #ifdef __BORLANDC__ @@ -310,13 +320,13 @@ local uLong unzlocal_SearchCentralDir(fin) uLong uBackRead; uLong uMaxBack=0xffff; /* maximum size of global comment */ uLong uPosFound=0; - + if (fseek(fin,0,SEEK_END) != 0) return 0; uSizeFile = ftell( fin ); - + if (uMaxBack>uSizeFile) uMaxBack = uSizeFile; @@ -334,7 +344,7 @@ local uLong unzlocal_SearchCentralDir(fin) else uBackRead+=BUFREADCOMMENT; uReadPos = uSizeFile-uBackRead ; - + uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ? (BUFREADCOMMENT+4) : (uSizeFile-uReadPos); if (fseek(fin,uReadPos,SEEK_SET)!=0) @@ -358,48 +368,6 @@ local uLong unzlocal_SearchCentralDir(fin) return uPosFound; } -#if defined(__WXMAC__) && !defined(__UNIX__) -void wxUnix2MacFilename (char *s) ; -void -wxUnix2MacFilename (char *s) -{ - if (s) - { - if ( *s == '.' ) - { - /* 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 */ - memmove( s , s+1 ,strlen( s ) ) ; - } - else - { -/* wxASSERT_MSG( 1 , "unkown path beginning" ) ; */ - } - while (*s) - { - if (*s == '/' || *s == '\\') - { - /* convert any back-directory situations */ - if ( *(s+1) == '.' && *(s+2) == '.' && ( (*(s+3) == '/' || *(s+3) == '\\') ) ) - { - *s = ':'; - memmove( s+1 , s+3 ,strlen( s+3 ) + 1 ) ; - } - else - *s = ':'; - } - - s++ ; - } - } -} -extern char * wxBuffer ; -#endif - /* Open a Zip file. path contain the full pathname (by example, on a Windows NT computer "c:\\test\\zlib109.zip" or on an Unix computer @@ -430,13 +398,8 @@ extern unzFile ZEXPORT unzOpen (path) if (unz_copyright[0]!=' ') return NULL; -#if defined(__WXMAC__) && !defined(__UNIX__) - strcpy( wxBuffer , path ) ; - wxUnix2MacFilename( wxBuffer ) ; - fin=fopen(wxBuffer,"rb"); -#else fin=fopen(path,"rb"); -#endif + if (fin==NULL) return NULL; @@ -499,12 +462,12 @@ extern unzFile ZEXPORT unzOpen (path) (us.offset_central_dir+us.size_central_dir); us.central_pos = central_pos; us.pfile_in_zip_read = NULL; - + s=(unz_s*)ALLOC(sizeof(unz_s)); *s=us; - unzGoToFirstFile((unzFile)s); - return (unzFile)s; + unzGoToFirstFile((unzFile)s); + return (unzFile)s; } @@ -683,7 +646,7 @@ local int unzlocal_GetCurrentFileInfoInternal (file, lSeek -= uSizeRead; } - + if ((err==UNZ_OK) && (extraField!=NULL)) { uLong uSizeRead ; @@ -708,7 +671,7 @@ local int unzlocal_GetCurrentFileInfoInternal (file, else lSeek+=file_info.size_file_extra; - + if ((err==UNZ_OK) && (szComment!=NULL)) { uLong uSizeRead ; @@ -802,7 +765,7 @@ extern int ZEXPORT unzGoToFirstFile (file) extern int ZEXPORT unzGoToNextFile (file) unzFile file; { - unz_s* s; + unz_s* s; int err; if (file==NULL) @@ -837,20 +800,20 @@ extern int ZEXPORT unzLocateFile (file, szFileName, iCaseSensitivity) const char *szFileName; int iCaseSensitivity; { - unz_s* s; + 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++) + for (c = szFileName, c2 = szFileName2; *c != '\0'; c++, c2++) if (*c == '\\') *c2 = '/'; else *c2 = *c; *c2 = '\0'; - + if (file==NULL) return UNZ_PARAMERROR; @@ -979,7 +942,7 @@ local int unzlocal_CheckCurrentFileCoherencyHeader (s,piSizeVar, return err; } - + /* Open for reading data the current file in the zipfile. If there is no error and the file is opened, the return value is UNZ_OK. @@ -1025,7 +988,7 @@ extern int ZEXPORT unzOpenCurrentFile (file) } pfile_in_zip_read_info->stream_initialised=0; - + if ((s->cur_file_info.compression_method!=0) && (s->cur_file_info.compression_method!=Z_DEFLATED)) err=UNZ_BADZIPFILE; @@ -1062,11 +1025,11 @@ extern int ZEXPORT unzOpenCurrentFile (file) pfile_in_zip_read_info->rest_read_uncompressed = s->cur_file_info.uncompressed_size ; - + pfile_in_zip_read_info->pos_in_zipfile = s->cur_file_info_internal.offset_curfile + SIZEZIPLOCALHEADER + iSizeVar; - + pfile_in_zip_read_info->stream.avail_in = (uInt)0; @@ -1111,7 +1074,7 @@ extern int ZEXPORT unzReadCurrentFile (file, buf, len) pfile_in_zip_read_info->stream.next_out = (Bytef*)buf; pfile_in_zip_read_info->stream.avail_out = (uInt)len; - + if (len>pfile_in_zip_read_info->rest_read_uncompressed) pfile_in_zip_read_info->stream.avail_out = (uInt)pfile_in_zip_read_info->rest_read_uncompressed; @@ -1136,7 +1099,7 @@ extern int ZEXPORT unzReadCurrentFile (file, buf, len) pfile_in_zip_read_info->pos_in_zipfile += uReadThis; pfile_in_zip_read_info->rest_read_compressed-=uReadThis; - + pfile_in_zip_read_info->stream.next_in = (Bytef*)pfile_in_zip_read_info->read_buffer; pfile_in_zip_read_info->stream.avail_in = (uInt)uReadThis; @@ -1150,11 +1113,11 @@ extern int ZEXPORT unzReadCurrentFile (file, buf, len) uDoCopy = pfile_in_zip_read_info->stream.avail_out ; else uDoCopy = pfile_in_zip_read_info->stream.avail_in ; - + for (i=0;istream.next_out+i) = *(pfile_in_zip_read_info->stream.next_in+i); - + pfile_in_zip_read_info->crc32 = crc32(pfile_in_zip_read_info->crc32, pfile_in_zip_read_info->stream.next_out, uDoCopy); @@ -1186,7 +1149,7 @@ extern int ZEXPORT unzReadCurrentFile (file, buf, len) uTotalOutAfter = pfile_in_zip_read_info->stream.total_out; uOutThis = uTotalOutAfter-uTotalOutBefore; - + pfile_in_zip_read_info->crc32 = crc32(pfile_in_zip_read_info->crc32,bufBefore, (uInt)(uOutThis)); @@ -1244,7 +1207,7 @@ extern int ZEXPORT unzeof (file) if (pfile_in_zip_read_info==NULL) return UNZ_PARAMERROR; - + if (pfile_in_zip_read_info->rest_read_uncompressed == 0) return 1; else @@ -1288,7 +1251,7 @@ extern int ZEXPORT unzGetLocalExtrafield (file,buf,len) if (buf==NULL) return (int)size_to_read; - + if (len>size_to_read) read_now = (uInt)size_to_read; else @@ -1296,7 +1259,7 @@ extern int ZEXPORT unzGetLocalExtrafield (file,buf,len) if (read_now==0) return 0; - + if (fseek(pfile_in_zip_read_info->file, pfile_in_zip_read_info->offset_local_extrafield + pfile_in_zip_read_info->pos_local_extrafield,SEEK_SET)!=0)