56 #ifndef CASESENSITIVITYDEFAULT_NO
57 # if !defined(unix) && !defined(CASESENSITIVITYDEFAULT_YES)
58 # define CASESENSITIVITYDEFAULT_NO
64 #define UNZ_BUFSIZE (16384)
67 #ifndef UNZ_MAXFILENAMEINZIP
68 #define UNZ_MAXFILENAMEINZIP (256)
72 # define ALLOC(size) (malloc(size))
75 # define TRYFREE(p) (free(p))
78 #define SIZECENTRALDIRITEM (0x2e)
79 #define SIZEZIPLOCALHEADER (0x1e)
85 " unzip 1.01 Copyright 1998-2004 Gilles Vollant - http://www.winimage.com/zLibDll";
143 unsigned long keys[3];
144 const unsigned long* pcrc_32_tab;
163 const int err = (
int)
ZREAD(*pzlib_filefunc_def,filestream,&c,1);
171 if (
ZERROR(*pzlib_filefunc_def,filestream))
232 char c1=*(fileName1++);
233 char c2=*(fileName2++);
234 if ((c1>=
'a') && (c1<=
'z'))
236 if ((c2>=
'a') && (c2<=
'z'))
239 return ((c2==
'\0') ? 0 : -1);
250 #ifdef CASESENSITIVITYDEFAULT_NO
251 #define CASESENSITIVITYDEFAULTVALUE 2
253 #define CASESENSITIVITYDEFAULTVALUE 1
256 #ifndef STRCMPCASENOSENTIVEFUNCTION
257 #define STRCMPCASENOSENTIVEFUNCTION strcmpcasenosensitive_internal
271 if (iCaseSensitivity==0)
274 if (iCaseSensitivity==1)
275 return strcmp(fileName1,fileName2);
280 #ifndef BUFREADCOMMENT
281 #define BUFREADCOMMENT (0x400)
294 const uLong uSizeFile =
ZTELL(*pzlib_filefunc_def,filestream);
296 uLong uMaxBack = 0xffff;
297 if (uMaxBack>uSizeFile)
298 uMaxBack = uSizeFile;
306 while (uBackRead<uMaxBack)
309 uBackRead = uMaxBack;
312 const uLong uReadPos = uSizeFile-uBackRead;
319 if (
ZREAD(*pzlib_filefunc_def,filestream,buf,uReadSize)!=uReadSize)
322 for (
int i=(
int)uReadSize-3; (
i--)>0;)
323 if (((*(buf+
i))==0x50) && ((*(buf+
i+1))==0x4b) &&
324 ((*(buf+
i+2))==0x05) && ((*(buf+
i+3))==0x06))
326 uPosFound = uReadPos+
i;
353 uLong number_disk_with_CD;
355 uLong number_entry_CD;
364 if (pzlib_filefunc_def==NULL)
405 (number_disk_with_CD!=0) ||
491 ptm->
tm_mday = (uInt)(uDate&0x1f) ;
492 ptm->
tm_mon = (uInt)((((uDate)&0x1E0)/0x20)-1) ;
493 ptm->
tm_year = (uInt)(((uDate&0x0FE00)/0x0200)+1980) ;
495 ptm->
tm_hour = (uInt) ((ulDosDate &0xF800)/0x800);
496 ptm->
tm_min = (uInt) ((ulDosDate&0x7E0)/0x20) ;
497 ptm->
tm_sec = (uInt) (2*(ulDosDate&0x1f)) ;
508 *pfile_info_internal,
510 uLong fileNameBufferSize,
512 uLong extraFieldBufferSize,
514 uLong commentBufferSize));
537 }
else if (uMagic!=0x02014b50) {
590 if ((err==
UNZ_OK) && (szFileName!=NULL))
597 uSizeRead = fileNameBufferSize;
605 if ((err==
UNZ_OK) && (extraField!=NULL))
611 uSizeRead = extraFieldBufferSize;
628 if ((err==
UNZ_OK) && (szComment!=NULL))
635 uSizeRead = commentBufferSize;
653 if ((err==
UNZ_OK) && (pfile_info!=NULL))
654 *pfile_info=file_info;
656 if ((err==
UNZ_OK) && (pfile_info_internal!=NULL))
657 *pfile_info_internal=file_info_internal;
672 szFileName,fileNameBufferSize,
673 extraField,extraFieldBufferSize,
674 szComment,commentBufferSize);
691 NULL,0,NULL,0,NULL,0);
717 NULL,0,NULL,0,NULL,0);
757 szCurrentFileName,
sizeof(szCurrentFileName)-1,
762 szFileName,iCaseSensitivity)==0)
799 if (file==NULL || file_pos==NULL)
813 if (file==NULL || file_pos==NULL)
824 NULL,0,NULL,0,NULL,0);
844 uLong uMagic,uData,uFlags;
846 uLong size_extra_field;
850 *poffset_local_extrafield = 0;
851 *psize_local_extrafield = 0;
861 else if (uMagic!=0x04034b50)
910 *piSizeVar += (uInt)size_filename;
916 *psize_local_extrafield = (uInt)size_extra_field;
918 *piSizeVar += (uInt)size_extra_field;
931 uLong offset_local_extrafield;
932 uInt size_local_extrafield;
936 if (password != NULL)
950 &offset_local_extrafield,&size_local_extrafield)!=
UNZ_OK)
955 if (pfile_in_zip_read_info==NULL)
962 pfile_in_zip_read_info->
raw=raw;
966 TRYFREE(pfile_in_zip_read_info);
980 case 6 : *level = 1;
break;
981 case 4 : *level = 2;
break;
982 case 2 : *level = 9;
break;
991 pfile_in_zip_read_info->
crc32=0;
998 pfile_in_zip_read_info->
stream.total_out = 0;
1003 pfile_in_zip_read_info->
stream.zalloc = 0;
1004 pfile_in_zip_read_info->
stream.zfree = 0;
1005 pfile_in_zip_read_info->
stream.opaque = 0;
1006 pfile_in_zip_read_info->
stream.next_in = 0;
1007 pfile_in_zip_read_info->
stream.avail_in = 0;
1009 err=inflateInit2(&pfile_in_zip_read_info->
stream, -MAX_WBITS);
1014 TRYFREE(pfile_in_zip_read_info);
1035 pfile_in_zip_read_info->
stream.avail_in = (uInt)0;
1040 if (password != NULL)
1042 s->pcrc_32_tab = get_crc_table();
1043 init_keys(password,s->keys,s->pcrc_32_tab);
1052 for (
int i = 0;
i<12;
i++)
1053 zdecode(s->keys,s->pcrc_32_tab,source[
i]);
1098 if (pfile_in_zip_read_info==NULL)
1107 pfile_in_zip_read_info->
stream.next_out = (Bytef*)buf;
1109 pfile_in_zip_read_info->
stream.avail_out = (uInt)len;
1112 (!(pfile_in_zip_read_info->
raw)))
1113 pfile_in_zip_read_info->
stream.avail_out =
1117 pfile_in_zip_read_info->
stream.avail_in) &&
1118 (pfile_in_zip_read_info->
raw))
1119 pfile_in_zip_read_info->
stream.avail_out =
1121 pfile_in_zip_read_info->
stream.avail_in;
1123 while (pfile_in_zip_read_info->
stream.avail_out>0)
1125 if ((pfile_in_zip_read_info->
stream.avail_in==0) &&
1142 uReadThis)!=uReadThis)
1149 for(uInti=0;
i<uReadThis;
i++)
1151 zdecode(s->keys,s->pcrc_32_tab,
1161 pfile_in_zip_read_info->
stream.next_in =
1163 pfile_in_zip_read_info->
stream.avail_in = (uInt)uReadThis;
1170 if ((pfile_in_zip_read_info->
stream.avail_in == 0) &&
1172 return (iRead==0) ?
UNZ_EOF : iRead;
1174 if (pfile_in_zip_read_info->
stream.avail_out <
1175 pfile_in_zip_read_info->
stream.avail_in)
1176 uDoCopy = pfile_in_zip_read_info->
stream.avail_out ;
1178 uDoCopy = pfile_in_zip_read_info->
stream.avail_in ;
1180 for (uInt
i=0;
i<uDoCopy;
i++)
1181 *(pfile_in_zip_read_info->
stream.next_out+
i) =
1182 *(pfile_in_zip_read_info->
stream.next_in+
i);
1184 pfile_in_zip_read_info->
crc32 = crc32(pfile_in_zip_read_info->
crc32,
1185 pfile_in_zip_read_info->
stream.next_out,
1188 pfile_in_zip_read_info->
stream.avail_in -= uDoCopy;
1189 pfile_in_zip_read_info->
stream.avail_out -= uDoCopy;
1190 pfile_in_zip_read_info->
stream.next_out += uDoCopy;
1191 pfile_in_zip_read_info->
stream.next_in += uDoCopy;
1192 pfile_in_zip_read_info->
stream.total_out += uDoCopy;
1197 int flush=Z_SYNC_FLUSH;
1199 const uLong uTotalOutBefore = pfile_in_zip_read_info->
stream.total_out;
1200 const Bytef *bufBefore = pfile_in_zip_read_info->
stream.next_out;
1208 err=inflate(&pfile_in_zip_read_info->
stream,flush);
1210 if ((err>=0) && (pfile_in_zip_read_info->
stream.msg!=NULL))
1213 const uLong uTotalOutAfter = pfile_in_zip_read_info->
stream.total_out;
1214 const uLong uOutThis = uTotalOutAfter-uTotalOutBefore;
1216 pfile_in_zip_read_info->
crc32 =
1217 crc32(pfile_in_zip_read_info->
crc32,bufBefore,
1223 iRead += (uInt)(uTotalOutAfter - uTotalOutBefore);
1225 if (err==Z_STREAM_END)
1226 return (iRead==0) ?
UNZ_EOF : iRead;
1248 if (pfile_in_zip_read_info==NULL)
1251 return (z_off_t)pfile_in_zip_read_info->
stream.total_out;
1265 if (pfile_in_zip_read_info==NULL)
1297 if (pfile_in_zip_read_info==NULL)
1304 return (
int)size_to_read;
1306 if (len>size_to_read)
1307 read_now = (uInt)size_to_read;
1309 read_now = (uInt)len ;
1323 buf,read_now)!=read_now)
1326 return (
int)read_now;
1342 if (pfile_in_zip_read_info==NULL)
1347 (!pfile_in_zip_read_info->
raw))
1349 if (pfile_in_zip_read_info->
crc32 != pfile_in_zip_read_info->
crc32_wait)
1357 inflateEnd(&pfile_in_zip_read_info->
stream);
1360 TRYFREE(pfile_in_zip_read_info);
1379 uLong uReadThis = uSizeBuf;
1395 return (
int)uReadThis;
1422 NULL,0,NULL,0,NULL,0);
1441 NULL,0,NULL,0,NULL,0);
uLong rest_read_compressed
int ZEXPORT unzGetCurrentFileInfoPosition(unzFile file, unsigned long *pos)
#define ZTELL(filefunc, filestream)
#define ZREAD(filefunc, filestream, buf, size)
local int unzlocal_GetCurrentFileInfoInternal OF((unzFile file, unz_file_info *pfile_info, unz_file_info_internal *pfile_info_internal, char *szFileName, uLong fileNameBufferSize, void *extraField, uLong extraFieldBufferSize, char *szComment, uLong commentBufferSize))
Get info about the current file in the zipfile, with internal only info.
local int unzlocal_GetCurrentFileInfoInternal(unzFile file, unz_file_info *pfile_info, unz_file_info_internal *pfile_info_internal, char *szFileName, uLong fileNameBufferSize, void *extraField, uLong extraFieldBufferSize, char *szComment, uLong commentBufferSize)
local int unzlocal_getByte(const zlib_filefunc_def *pzlib_filefunc_def, voidpf filestream, int *pi)
local uLong unzlocal_SearchCentralDir(const zlib_filefunc_def *pzlib_filefunc_def, voidpf filestream)
int ZEXPORT unzOpenCurrentFilePassword(unzFile file, const char *password)
int ZEXPORT unzGetGlobalInfo(unzFile file, unz_global_info *pglobal_info)
uLong pos_in_zip_directory
zlib_filefunc_def z_filefunc
int ZEXPORT unzLocateFile(unzFile file, const char *szFileName, int iCaseSensitivity)
#define UNZ_INTERNALERROR
int ZEXPORT unzGetFilePos(unzFile file, unz_file_pos *file_pos)
int ZEXPORT unzGetCurrentFileInfo(unzFile file, unz_file_info *pfile_info, char *szFileName, uLong fileNameBufferSize, void *extraField, uLong extraFieldBufferSize, char *szComment, uLong commentBufferSize)
int ZEXPORT unzGoToFilePos(unzFile file, unz_file_pos *file_pos)
#define ZLIB_FILEFUNC_MODE_READ
typedef int(ZCALLBACK *close_file_func) OF((voidpf opaque
int ZEXPORT unzOpenCurrentFile3(unzFile file, int *method, int *level, int raw, const char *password)
unzFile ZEXPORT unzOpen2(const char *path, zlib_filefunc_def *pzlib_filefunc_def)
int ZEXPORT unzGoToNextFile(unzFile file)
#define ZERROR(filefunc, filestream)
#define ZSEEK(filefunc, filestream, pos, mode)
int ZEXPORT unzGetLocalExtrafield(unzFile file, voidp buf, unsigned len)
#define ZLIB_FILEFUNC_SEEK_CUR
int ZEXPORT unzGoToFirstFile(unzFile file)
local int unzlocal_CheckCurrentFileCoherencyHeader(unz_s *s, uInt *piSizeVar, uLong *poffset_local_extrafield, uInt *psize_local_extrafield)
file_in_zip_read_info_s * pfile_in_zip_read
typedef voidpf(ZCALLBACK *open_file_func) OF((voidpf opaque
unzFile ZEXPORT unzOpen(const char *path)
int ZEXPORT unzCloseCurrentFile(unzFile file)
int ZEXPORT unzSetCurrentFileInfoPosition(unzFile file, unsigned long pos)
#define UNZ_MAXFILENAMEINZIP
uLong offset_local_extrafield
uLong pos_local_extrafield
unz_file_info cur_file_info
local int unzlocal_getShort(const zlib_filefunc_def *pzlib_filefunc_def, voidpf filestream, uLong *pX)
z_off_t ZEXPORT unztell(unzFile file)
local int unzlocal_getLong(const zlib_filefunc_def *pzlib_filefunc_def, voidpf filestream, uLong *pX)
void fill_fopen_filefunc(zlib_filefunc_def *pzlib_filefunc_def)
#define CASESENSITIVITYDEFAULTVALUE
#define ZLIB_FILEFUNC_MODE_EXISTING
#define SIZEZIPLOCALHEADER
zlib_filefunc_def z_filefunc
#define ZCLOSE(filefunc, filestream)
uLong ZEXPORT unzGetOffset(unzFile file)
QGL_EXTERN GLuint GLchar GLuint * len
open_file_func zopen_file
local int strcmpcasenosensitive_internal(const char *fileName1, const char *fileName2)
const char unz_copyright[]
int ZEXPORT unzeof(unzFile file)
int ZEXPORT unzOpenCurrentFile(unzFile file)
int ZEXPORT unzSetOffset(unzFile file, uLong pos)
local void unzlocal_DosDateToTmuDate(uLong ulDosDate, tm_unz *ptm)
int ZEXPORT unzGetGlobalComment(unzFile file, char *szComment, uLong uSizeBuf)
uLong byte_before_the_zipfile
int ZEXPORT unzClose(unzFile file)
uLong byte_before_the_zipfile
#define ZLIB_FILEFUNC_SEEK_END
unz_file_info_internal cur_file_info_internal
#define STRCMPCASENOSENTIVEFUNCTION
struct unz_file_info_internal_s unz_file_info_internal
#define SIZECENTRALDIRITEM
#define ZLIB_FILEFUNC_SEEK_SET
#define UNZ_END_OF_LIST_OF_FILE
int ZEXPORT unzOpenCurrentFile2(unzFile file, int *method, int *level, int raw)
typedef uLong(ZCALLBACK *read_file_func) OF((voidpf opaque
uInt size_local_extrafield
int ZEXPORT unzStringFileNameCompare(const char *fileName1, const char *fileName2, int iCaseSensitivity)
uLong rest_read_uncompressed
int ZEXPORT unzReadCurrentFile(unzFile file, voidp buf, unsigned len)