]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/unzip.c
Committing in .
[wxWidgets.git] / src / common / unzip.c
index 5e4a178bfad4624bc863c18c447d84b1fe28dfad..1cc334155f2ca44c676984d23750e71abb5bb919 100644 (file)
@@ -4,6 +4,14 @@
    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"
 
 #if wxUSE_ZLIB && wxUSE_ZIPSTREAM
 #include <stdlib.h>
 #include <string.h>
 #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 <stddef.h>
@@ -129,7 +143,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 +351,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 +423,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;
 
@@ -1301,7 +1363,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 */