X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ea4f5235fcbfd484a75e295fd266359e4e66c476..b13480f2699ed165eebb613497e07a5ec68feb78:/src/common/unzip.c

diff --git a/src/common/unzip.c b/src/common/unzip.c
index 08dd404643..be48958cfb 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
@@ -134,11 +144,16 @@ typedef struct
 	                                    file if we are decompressing it */
 } unz_s;
 
-#if defined (__VISAGECPP__)
-// VA always requires prototypes
+#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.
@@ -343,6 +358,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
@@ -373,7 +430,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;
 
@@ -548,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;
@@ -628,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;
@@ -653,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;
@@ -768,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;
 
@@ -795,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);
 	}
@@ -837,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;
@@ -1279,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)
@@ -1307,7 +1386,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 */