/*
-This file was altered for needs of wxWindows.
+This file was altered for needs of wxWidgets.
$Id$
*/
*/
-
-
-#include "wx/setup.h"
+#include "wx/platform.h"
#if wxUSE_ZLIB && wxUSE_ZIPSTREAM
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;
else
uBackRead+=BUFREADCOMMENT;
uReadPos = uSizeFile-uBackRead ;
-
+
uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ?
(BUFREADCOMMENT+4) : (uSizeFile-uReadPos);
if (fseek(fin,uReadPos,SEEK_SET)!=0)
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
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;
(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;
}
lSeek -= uSizeRead;
}
-
+
if ((err==UNZ_OK) && (extraField!=NULL))
{
uLong uSizeRead ;
else
lSeek+=file_info.size_file_extra;
-
+
if ((err==UNZ_OK) && (szComment!=NULL))
{
uLong uSizeRead ;
extern int ZEXPORT unzGoToNextFile (file)
unzFile file;
{
- unz_s* s;
+ unz_s* s;
int err;
if (file==NULL)
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;
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.
}
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;
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;
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;
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;
uDoCopy = pfile_in_zip_read_info->stream.avail_out ;
else
uDoCopy = pfile_in_zip_read_info->stream.avail_in ;
-
+
for (i=0;i<uDoCopy;i++)
*(pfile_in_zip_read_info->stream.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);
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));
if (pfile_in_zip_read_info==NULL)
return UNZ_PARAMERROR;
-
+
if (pfile_in_zip_read_info->rest_read_uncompressed == 0)
return 1;
else
if (buf==NULL)
return (int)size_to_read;
-
+
if (len>size_to_read)
read_now = (uInt)size_to_read;
else
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)