62 #ifndef CASESENSITIVITYDEFAULT_NO 63 # if !defined(unix) && !defined(CASESENSITIVITYDEFAULT_YES) 64 # define CASESENSITIVITYDEFAULT_NO 70 #define UNZ_BUFSIZE (16384) 73 #ifndef UNZ_MAXFILENAMEINZIP 74 #define UNZ_MAXFILENAMEINZIP (256) 78 # define ALLOC(size) (malloc(size)) 81 # define TRYFREE(p) {if (p) free(p);} 84 #define SIZECENTRALDIRITEM (0x2e) 85 #define SIZEZIPLOCALHEADER (0x1e) 91 " unzip 1.01 Copyright 1998-2004 Gilles Vollant - http://www.winimage.com/zLibDll";
149 unsigned long keys[3];
177 int err = (
int)
ZREAD(*pzlib_filefunc_def,filestream,&c,1);
185 if (
ZERROR(*pzlib_filefunc_def,filestream))
263 const char* fileName1;
264 const char* fileName2;
268 char c1=*(fileName1++);
269 char c2=*(fileName2++);
270 if ((c1>=
'a') && (c1<=
'z'))
272 if ((c2>=
'a') && (c2<=
'z'))
275 return ((c2==
'\0') ? 0 : -1);
286 #ifdef CASESENSITIVITYDEFAULT_NO 287 #define CASESENSITIVITYDEFAULTVALUE 2 289 #define CASESENSITIVITYDEFAULTVALUE 1 292 #ifndef STRCMPCASENOSENTIVEFUNCTION 293 #define STRCMPCASENOSENTIVEFUNCTION strcmpcasenosensitive_internal 306 const char* fileName1;
307 const char* fileName2;
308 int iCaseSensitivity;
310 if (iCaseSensitivity==0)
313 if (iCaseSensitivity==1)
314 return strcmp(fileName1,fileName2);
319 #ifndef BUFREADCOMMENT 320 #define BUFREADCOMMENT (0x400) 338 uLong uMaxBack=0xffff;
345 uSizeFile =
ZTELL(*pzlib_filefunc_def,filestream);
347 if (uMaxBack>uSizeFile)
348 uMaxBack = uSizeFile;
355 while (uBackRead<uMaxBack)
357 uLong uReadSize,uReadPos ;
360 uBackRead = uMaxBack;
363 uReadPos = uSizeFile-uBackRead ;
370 if (
ZREAD(*pzlib_filefunc_def,filestream,buf,uReadSize)!=uReadSize)
373 for (i=(
int)uReadSize-3; (i--)>0;)
374 if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) &&
375 ((*(buf+i+2))==0x05) && ((*(buf+i+3))==0x06))
377 uPosFound = uReadPos+i;
403 uLong central_pos,uL;
407 uLong number_disk_with_CD;
409 uLong number_entry_CD;
418 if (pzlib_filefunc_def==NULL)
459 (number_disk_with_CD!=0) ||
553 uDate = (
uLong)(ulDosDate>>16);
554 ptm->
tm_mday = (uInt)(uDate&0x1f) ;
555 ptm->
tm_mon = (uInt)((((uDate)&0x1E0)/0x20)-1) ;
556 ptm->
tm_year = (uInt)(((uDate&0x0FE00)/0x0200)+1980) ;
558 ptm->
tm_hour = (uInt) ((ulDosDate &0xF800)/0x800);
559 ptm->
tm_min = (uInt) ((ulDosDate&0x7E0)/0x20) ;
560 ptm->
tm_sec = (uInt) (2*(ulDosDate&0x1f)) ;
569 *pfile_info_internal,
571 uLong fileNameBufferSize,
573 uLong extraFieldBufferSize,
575 uLong commentBufferSize));
580 szFileName, fileNameBufferSize,
581 extraField, extraFieldBufferSize,
582 szComment, commentBufferSize)
587 uLong fileNameBufferSize;
589 uLong extraFieldBufferSize;
591 uLong commentBufferSize;
613 else if (uMagic!=0x02014b50)
664 if ((err==
UNZ_OK) && (szFileName!=NULL))
673 uSizeRead = fileNameBufferSize;
682 if ((err==
UNZ_OK) && (extraField!=NULL))
688 uSizeRead = extraFieldBufferSize;
704 if ((err==
UNZ_OK) && (szComment!=NULL))
713 uSizeRead = commentBufferSize;
728 if ((err==
UNZ_OK) && (pfile_info!=NULL))
729 *pfile_info=file_info;
731 if ((err==
UNZ_OK) && (pfile_info_internal!=NULL))
732 *pfile_info_internal=file_info_internal;
746 szFileName, fileNameBufferSize,
747 extraField, extraFieldBufferSize,
748 szComment, commentBufferSize)
752 uLong fileNameBufferSize;
754 uLong extraFieldBufferSize;
756 uLong commentBufferSize;
759 szFileName,fileNameBufferSize,
760 extraField,extraFieldBufferSize,
761 szComment,commentBufferSize);
780 NULL,0,NULL,0,NULL,0);
810 NULL,0,NULL,0,NULL,0);
826 const char *szFileName;
827 int iCaseSensitivity;
838 uLong pos_in_central_dirSaved;
863 szCurrentFileName,
sizeof(szCurrentFileName)-1,
868 szFileName,iCaseSensitivity)==0)
909 if (file==NULL || file_pos==NULL)
928 if (file==NULL || file_pos==NULL)
939 NULL,0,NULL,0,NULL,0);
958 poffset_local_extrafield,
959 psize_local_extrafield)
962 uLong *poffset_local_extrafield;
963 uInt *psize_local_extrafield;
965 uLong uMagic,uData,uFlags;
967 uLong size_extra_field;
971 *poffset_local_extrafield = 0;
972 *psize_local_extrafield = 0;
974 if (
ZSEEK(s->z_filefunc, s->filestream,s->cur_file_info_internal.offset_curfile +
982 else if (uMagic!=0x04034b50)
996 else if ((err==
UNZ_OK) && (uData!=s->cur_file_info.compression_method))
999 if ((err==
UNZ_OK) && (s->cur_file_info.compression_method!=0) &&
1000 (s->cur_file_info.compression_method!=Z_DEFLATED))
1008 else if ((err==
UNZ_OK) && (uData!=s->cur_file_info.crc) &&
1014 else if ((err==
UNZ_OK) && (uData!=s->cur_file_info.compressed_size) &&
1020 else if ((err==
UNZ_OK) && (uData!=s->cur_file_info.uncompressed_size) &&
1027 else if ((err==
UNZ_OK) && (size_filename!=s->cur_file_info.size_filename))
1030 *piSizeVar += (uInt)size_filename;
1034 *poffset_local_extrafield= s->cur_file_info_internal.offset_curfile +
1036 *psize_local_extrafield = (uInt)size_extra_field;
1038 *piSizeVar += (uInt)size_extra_field;
1052 const char* password;
1058 uLong offset_local_extrafield;
1059 uInt size_local_extrafield;
1063 if (password != NULL)
1077 &offset_local_extrafield,&size_local_extrafield)!=
UNZ_OK)
1082 if (pfile_in_zip_read_info==NULL)
1089 pfile_in_zip_read_info->
raw=raw;
1093 TRYFREE(pfile_in_zip_read_info);
1107 case 6 : *level = 1;
break;
1108 case 4 : *level = 2;
break;
1109 case 2 : *level = 9;
break;
1118 pfile_in_zip_read_info->
crc32=0;
1125 pfile_in_zip_read_info->
stream.total_out = 0;
1130 pfile_in_zip_read_info->
stream.zalloc = (alloc_func)0;
1131 pfile_in_zip_read_info->
stream.zfree = (free_func)0;
1134 pfile_in_zip_read_info->
stream.avail_in = 0;
1136 err=inflateInit2(&pfile_in_zip_read_info->
stream, -MAX_WBITS);
1141 TRYFREE(pfile_in_zip_read_info);
1162 pfile_in_zip_read_info->
stream.avail_in = (uInt)0;
1167 if (password != NULL)
1180 for (i = 0; i<12; i++)
1200 const char* password;
1238 if (pfile_in_zip_read_info==NULL)
1242 if ((pfile_in_zip_read_info->
read_buffer == NULL))
1247 pfile_in_zip_read_info->
stream.next_out = (Bytef*)buf;
1249 pfile_in_zip_read_info->
stream.avail_out = (uInt)len;
1252 (!(pfile_in_zip_read_info->
raw)))
1253 pfile_in_zip_read_info->
stream.avail_out =
1257 pfile_in_zip_read_info->
stream.avail_in) &&
1258 (pfile_in_zip_read_info->
raw))
1259 pfile_in_zip_read_info->
stream.avail_out =
1261 pfile_in_zip_read_info->
stream.avail_in;
1263 while (pfile_in_zip_read_info->
stream.avail_out>0)
1265 if ((pfile_in_zip_read_info->
stream.avail_in==0) &&
1282 uReadThis)!=uReadThis)
1290 for(i=0;i<uReadThis;i++)
1302 pfile_in_zip_read_info->
stream.next_in =
1304 pfile_in_zip_read_info->
stream.avail_in = (uInt)uReadThis;
1311 if ((pfile_in_zip_read_info->
stream.avail_in == 0) &&
1313 return (iRead==0) ?
UNZ_EOF : iRead;
1315 if (pfile_in_zip_read_info->
stream.avail_out <
1316 pfile_in_zip_read_info->
stream.avail_in)
1317 uDoCopy = pfile_in_zip_read_info->
stream.avail_out ;
1319 uDoCopy = pfile_in_zip_read_info->
stream.avail_in ;
1321 for (i=0;i<uDoCopy;i++)
1322 *(pfile_in_zip_read_info->
stream.next_out+i) =
1323 *(pfile_in_zip_read_info->
stream.next_in+i);
1325 pfile_in_zip_read_info->
crc32 = crc32(pfile_in_zip_read_info->
crc32,
1326 pfile_in_zip_read_info->
stream.next_out,
1329 pfile_in_zip_read_info->
stream.avail_in -= uDoCopy;
1330 pfile_in_zip_read_info->
stream.avail_out -= uDoCopy;
1331 pfile_in_zip_read_info->
stream.next_out += uDoCopy;
1332 pfile_in_zip_read_info->
stream.next_in += uDoCopy;
1333 pfile_in_zip_read_info->
stream.total_out += uDoCopy;
1338 uLong uTotalOutBefore,uTotalOutAfter;
1339 const Bytef *bufBefore;
1341 int flush=Z_SYNC_FLUSH;
1343 uTotalOutBefore = pfile_in_zip_read_info->
stream.total_out;
1344 bufBefore = pfile_in_zip_read_info->
stream.next_out;
1352 err=inflate(&pfile_in_zip_read_info->
stream,flush);
1354 if ((err>=0) && (pfile_in_zip_read_info->
stream.msg!=NULL))
1357 uTotalOutAfter = pfile_in_zip_read_info->
stream.total_out;
1358 uOutThis = uTotalOutAfter-uTotalOutBefore;
1360 pfile_in_zip_read_info->
crc32 =
1361 crc32(pfile_in_zip_read_info->
crc32,bufBefore,
1367 iRead += (uInt)(uTotalOutAfter - uTotalOutBefore);
1369 if (err==Z_STREAM_END)
1370 return (iRead==0) ?
UNZ_EOF : iRead;
1395 if (pfile_in_zip_read_info==NULL)
1398 return (z_off_t)pfile_in_zip_read_info->
stream.total_out;
1415 if (pfile_in_zip_read_info==NULL)
1453 if (pfile_in_zip_read_info==NULL)
1460 return (
int)size_to_read;
1462 if (len>size_to_read)
1463 read_now = (uInt)size_to_read;
1465 read_now = (uInt)len ;
1479 buf,read_now)!=read_now)
1482 return (
int)read_now;
1501 if (pfile_in_zip_read_info==NULL)
1506 (!pfile_in_zip_read_info->
raw))
1508 if (pfile_in_zip_read_info->
crc32 != pfile_in_zip_read_info->
crc32_wait)
1516 inflateEnd(&pfile_in_zip_read_info->
stream);
1519 TRYFREE(pfile_in_zip_read_info);
1544 uReadThis = uSizeBuf;
1560 return (
int)uReadThis;
1595 NULL,0,NULL,0,NULL,0);
zlib_filefunc_def z_filefunc
#define UNZ_INTERNALERROR
#define ZCLOSE(filefunc, filestream)
local uLong unzlocal_SearchCentralDir(zlib_filefunc_def *pzlib_filefunc_def, voidpf filestream) const
uLong rest_read_compressed
#define ZERROR(filefunc, filestream)
#define UNZ_MAXFILENAMEINZIP
int ZEXPORT unzClose(unzFile file)
zlib_filefunc_def z_filefunc
unz_file_info_internal cur_file_info_internal
int ZEXPORT unzGetLocalExtrafield(unzFile file, voidp buf, unsigned len)
z_off_t ZEXPORT unztell(unzFile file)
typedef uLong(ZCALLBACK *read_file_func) OF((voidpf opaque
#define ZTELL(filefunc, filestream)
uInt size_local_extrafield
int ZEXPORT unzGetGlobalComment(unzFile file, char *szComment, uLong uSizeBuf)
unzFile ZEXPORT unzOpen2(char *path, zlib_filefunc_def *pzlib_filefunc_def) const
local int strcmpcasenosensitive_internal(char *fileName1, const char *fileName2) const
#define SIZEZIPLOCALHEADER
uLong byte_before_the_zipfile
uLong rest_read_uncompressed
int ZEXPORT unzOpenCurrentFilePassword(unzFile file, const char *password)
int ZEXPORT unzOpenCurrentFile2(unzFile file, int *method, int *level, int raw)
#define ZLIB_FILEFUNC_SEEK_SET
int ZEXPORT unzGoToNextFile(unzFile file)
int ZEXPORT unzGoToFirstFile(unzFile file)
struct unz_file_info_internal_s unz_file_info_internal
uLong pos_local_extrafield
#define UNZ_END_OF_LIST_OF_FILE
int ZEXPORT unzGoToFilePos(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)
void fill_fopen_filefunc(zlib_filefunc_def *pzlib_filefunc_def)
local int unzlocal_CheckCurrentFileCoherencyHeader(unz_s *s, uInt *piSizeVar, uLong *poffset_local_extrafield, uInt *psize_local_extrafield)
int ZEXPORT unzStringFileNameCompare(char *fileName1, const char *fileName2, int iCaseSensitivity) const
local int unzlocal_getShort(zlib_filefunc_def *pzlib_filefunc_def, voidpf filestream, uLong *pX) const
int ZEXPORT unzeof(unzFile file)
local int unzlocal_getByte(zlib_filefunc_def *pzlib_filefunc_def, voidpf filestream, int *pi) const
local int unzlocal_getByte OF((const zlib_filefunc_def *pzlib_filefunc_def, voidpf filestream, int *pi))
#define ZLIB_FILEFUNC_SEEK_END
file_in_zip_read_info_s * pfile_in_zip_read
#define STRCMPCASENOSENTIVEFUNCTION
int ZEXPORT unzGetGlobalInfo(unzFile file, unz_global_info *pglobal_info)
int ZEXPORT unzOpenCurrentFile3(unzFile file, int *method, int *level, int raw, const char *password)
open_file_func zopen_file
int ZEXPORT unzOpenCurrentFile(unzFile file)
unz_file_info cur_file_info
#define ZLIB_FILEFUNC_SEEK_CUR
int ZEXPORT unzCloseCurrentFile(unzFile file)
uLong pos_in_zip_directory
typedef int(ZCALLBACK *close_file_func) OF((voidpf opaque
int ZEXPORT unzLocateFile(unzFile file, const char *szFileName, int iCaseSensitivity)
const char unz_copyright[]
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)
int ZEXPORT unzSetOffset(unzFile file, uLong pos)
#define CASESENSITIVITYDEFAULTVALUE
int ZEXPORT unzReadCurrentFile(unzFile file, voidp buf, unsigned len)
local int unzlocal_getLong(zlib_filefunc_def *pzlib_filefunc_def, voidpf filestream, uLong *pX) const
uLong byte_before_the_zipfile
unzFile ZEXPORT unzOpen(char *path) const
local void unzlocal_DosDateToTmuDate(uLong ulDosDate, tm_unz *ptm)
#define ZLIB_FILEFUNC_MODE_EXISTING
#define zdecode(pkeys, pcrc_32_tab, c)
#define SIZECENTRALDIRITEM
const unsigned long * pcrc_32_tab
uLong offset_local_extrafield
#define ZREAD(filefunc, filestream, buf, size)
int ZEXPORT unzGetFilePos(unzFile file, unz_file_pos *file_pos)
#define ZLIB_FILEFUNC_MODE_READ
typedef voidpf(ZCALLBACK *open_file_func) OF((voidpf opaque
uLong ZEXPORT unzGetOffset(unzFile file)
#define ZSEEK(filefunc, filestream, pos, mode)