X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/913df6f2e0ab502732b271624c95af807d42007c..d2fdd8d2af20f032b26562fc5eb0af2c85d5c8b6:/src/common/unzip.c diff --git a/src/common/unzip.c b/src/common/unzip.c index 5e4a178bfa..20d33af180 100644 --- a/src/common/unzip.c +++ b/src/common/unzip.c @@ -1,9 +1,19 @@ +/* + +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 + */ + + #include "wx/setup.h" #if wxUSE_ZLIB && wxUSE_ZIPSTREAM @@ -12,7 +22,13 @@ #include #include #include "zlib.h" + +/* Not the right solution (paths in makefiles) but... */ +#ifdef __BORLANDC__ +#include "../common/unzip.h" +#else #include "unzip.h" +#endif #ifdef STDC # include @@ -129,7 +145,7 @@ typedef struct } unz_s; #if defined (__VISAGECPP__) -// VA always requires prototypes +/* VA always requires prototypes */ int unzlocal_CheckCurrentFileCoherencyHeader (unz_s*, uInt*, uLong*, uInt*); #endif @@ -337,6 +353,48 @@ local uLong unzlocal_SearchCentralDir(fin) return uPosFound; } +#ifdef __WXMAC__ +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 @@ -367,7 +425,13 @@ extern unzFile ZEXPORT unzOpen (path) if (unz_copyright[0]!=' ') return NULL; +#ifdef __WXMAC__ + strcpy( wxBuffer , path ) ; + wxUnix2MacFilename( wxBuffer ) ; + fin=fopen(wxBuffer,"rb"); +#else fin=fopen(path,"rb"); +#endif if (fin==NULL) return NULL; @@ -762,12 +826,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; @@ -789,8 +859,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); } @@ -1301,7 +1372,7 @@ extern int ZEXPORT unzGetGlobalComment (file, szComment, uSizeBuf) #else -// the file shouldn't be empty, som compilers don't like it +/* the file shouldn't be empty, som compilers don't like it */ static const int dummyVariableInUnzip = 17; -#endif // wxUSE_ZLIB && wxUSE_ZIPSTREAM +#endif /* wxUSE_ZLIB && wxUSE_ZIPSTREAM */