96#ifndef CASESENSITIVITYDEFAULT_NO
97# if !defined(unix) && !defined(CASESENSITIVITYDEFAULT_YES)
98# define CASESENSITIVITYDEFAULT_NO
104#define UNZ_BUFSIZE (16384)
107#ifndef UNZ_MAXFILENAMEINZIP
108#define UNZ_MAXFILENAMEINZIP (256)
112# define ALLOC(size) (malloc(size))
115# define TRYFREE(p) { free(p);}
118#define SIZECENTRALDIRITEM (0x2e)
119#define SIZEZIPLOCALHEADER (0x1e)
123 " unzip 1.01 Copyright 1998-2004 Gilles Vollant - http://www.winimage.com/zLibDll";
190 unsigned long keys[3];
223 if (
ZERROR64(*pzlib_filefunc_def,filestream))
353 char c1=*(fileName1++);
354 char c2=*(fileName2++);
355 if ((c1>=
'a') && (c1<=
'z'))
357 if ((c2>=
'a') && (c2<=
'z'))
360 return ((c2==
'\0') ? 0 : -1);
371#ifdef CASESENSITIVITYDEFAULT_NO
372#define CASESENSITIVITYDEFAULTVALUE 2
374#define CASESENSITIVITYDEFAULTVALUE 1
377#ifndef STRCMPCASENOSENTIVEFUNCTION
378#define STRCMPCASENOSENTIVEFUNCTION strcmpcasenosensitive_internal
391 const char* fileName2,
392 int iCaseSensitivity)
395 if (iCaseSensitivity==0)
398 if (iCaseSensitivity==1)
399 return strcmp(fileName1,fileName2);
404#ifndef BUFREADCOMMENT
405#define BUFREADCOMMENT (0x400)
425 uSizeFile =
ZTELL64(*pzlib_filefunc_def,filestream);
427 if (uMaxBack>uSizeFile)
428 uMaxBack = uSizeFile;
435 while (uBackRead<uMaxBack)
441 uBackRead = uMaxBack;
444 uReadPos = uSizeFile-uBackRead ;
451 if (
ZREAD64(*pzlib_filefunc_def,filestream,
buf,uReadSize)!=uReadSize)
454 for (i=(
int)uReadSize-3; (i--)>0;)
455 if (((*(
buf+i))==0x50) && ((*(
buf+i+1))==0x4b) &&
456 ((*(
buf+i+2))==0x05) && ((*(
buf+i+3))==0x06))
458 uPosFound = uReadPos+(unsigned)i;
493 uSizeFile =
ZTELL64(*pzlib_filefunc_def,filestream);
495 if (uMaxBack>uSizeFile)
496 uMaxBack = uSizeFile;
503 while (uBackRead<uMaxBack)
509 uBackRead = uMaxBack;
512 uReadPos = uSizeFile-uBackRead ;
519 if (
ZREAD64(*pzlib_filefunc_def,filestream,
buf,uReadSize)!=uReadSize)
522 for (i=(
int)uReadSize-3; (i--)>0;)
523 if (((*(
buf+i))==0x50) && ((*(
buf+i+1))==0x4b) &&
524 ((*(
buf+i+2))==0x06) && ((*(
buf+i+3))==0x07))
526 uPosFound = uReadPos+(unsigned)i;
569 if (uL != 0x06064b50)
572 return relativeOffset;
586 int is64bitOpenFunction)
595 uLong number_disk_with_CD;
608 if (pzlib_filefunc64_32_def==
NULL)
668 (number_disk_with_CD!=0) ||
715 number_entry_CD = uL;
718 (number_disk_with_CD!=0) ||
768 if (pzlib_filefunc32_def !=
NULL)
781 if (pzlib_filefunc_def !=
NULL)
784 zlib_filefunc64_32_def_fill.
zfile_func64 = *pzlib_filefunc_def;
857 ptm->
tm_mon = (
int)((((uDate)&0x1E0)/0x20)-1) ;
858 ptm->
tm_year = (
int)(((uDate&0x0FE00)/0x0200)+1980) ;
860 ptm->
tm_hour = (
int) ((ulDosDate &0xF800)/0x800);
861 ptm->
tm_min = (
int) ((ulDosDate&0x7E0)/0x20) ;
862 ptm->
tm_sec = (
int) (2*(ulDosDate&0x1f)) ;
871 *pfile_info_internal,
873 uLong fileNameBufferSize,
875 uLong extraFieldBufferSize,
877 uLong commentBufferSize));
882 *pfile_info_internal,
884 uLong fileNameBufferSize,
886 uLong extraFieldBufferSize,
888 uLong commentBufferSize)
912 else if (uMagic!=0x02014b50)
977 uSizeRead = fileNameBufferSize;
992 uSizeRead = extraFieldBufferSize;
1039 if (headerId == 0x0001)
1076 acc += 2 + 2 + dataSize;
1089 uSizeRead = commentBufferSize;
1109 *pfile_info=file_info;
1112 *pfile_info_internal=file_info_internal;
1126 char * szFileName,
uLong fileNameBufferSize,
1127 void *extraField,
uLong extraFieldBufferSize,
1128 char* szComment,
uLong commentBufferSize)
1131 szFileName,fileNameBufferSize,
1132 extraField,extraFieldBufferSize,
1133 szComment,commentBufferSize);
1138 char * szFileName,
uLong fileNameBufferSize,
1139 void *extraField,
uLong extraFieldBufferSize,
1140 char* szComment,
uLong commentBufferSize)
1145 szFileName,fileNameBufferSize,
1146 extraField,extraFieldBufferSize,
1147 szComment,commentBufferSize);
1152 pfile_info->
flag = file_info64.
flag;
1155 pfile_info->
crc = file_info64.
crc;
1268 szCurrentFileName,
sizeof(szCurrentFileName)-1,
1273 szFileName,iCaseSensitivity)==0)
1365 if (file_pos ==
NULL)
1386 ZPOS64_T * poffset_local_extrafield,
1387 uInt * psize_local_extrafield)
1389 uLong uMagic,uData,uFlags;
1390 uLong size_filename;
1391 uLong size_extra_field;
1395 *poffset_local_extrafield = 0;
1396 *psize_local_extrafield = 0;
1407 else if (uMagic!=0x04034b50)
1455 *piSizeVar += (
uInt)size_filename;
1461 *psize_local_extrafield = (
uInt)size_extra_field;
1463 *piSizeVar += (
uInt)size_extra_field;
1473 int* level,
int raw,
const char* password)
1480 uInt size_local_extrafield;
1484 if (password !=
NULL)
1501 if (pfile_in_zip_read_info==
NULL)
1508 pfile_in_zip_read_info->
raw=raw;
1512 TRYFREE(pfile_in_zip_read_info);
1526 case 6 : *level = 1;
break;
1527 case 4 : *level = 2;
break;
1528 case 2 : *level = 9;
break;
1541 pfile_in_zip_read_info->
crc32=0;
1553 pfile_in_zip_read_info->bstream.bzalloc = (
void *(*) (
void *,
int,
int))0;
1554 pfile_in_zip_read_info->bstream.bzfree = (free_func)0;
1555 pfile_in_zip_read_info->bstream.opaque = (
voidpf)0;
1556 pfile_in_zip_read_info->bstream.state = (
voidpf)0;
1559 pfile_in_zip_read_info->
stream.
zfree = (free_func)0;
1564 err=BZ2_bzDecompressInit(&pfile_in_zip_read_info->bstream, 0, 0);
1570 TRYFREE(pfile_in_zip_read_info);
1574 pfile_in_zip_read_info->
raw=1;
1580 pfile_in_zip_read_info->
stream.
zfree = (free_func)0;
1591 TRYFREE(pfile_in_zip_read_info);
1618 if (password !=
NULL)
1622 init_keys(password,s->keys,s->pcrc_32_tab);
1631 for (i = 0; i<12; i++)
1632 zdecode(s->keys,s->pcrc_32_tab,source[i]);
1668 if (pfile_in_zip_read_info==
NULL)
1697 if (pfile_in_zip_read_info==
NULL)
1711 (!(pfile_in_zip_read_info->
raw)))
1717 (pfile_in_zip_read_info->
raw))
1741 uReadThis)!=uReadThis)
1749 for(i=0;i<uReadThis;i++)
1751 zdecode(s->keys,s->pcrc_32_tab,
1780 for (i=0;i<uDoCopy;i++)
1800 uLong uTotalOutBefore,uTotalOutAfter;
1801 const Bytef *bufBefore;
1804 pfile_in_zip_read_info->bstream.next_in = (
char*)pfile_in_zip_read_info->
stream.
next_in;
1805 pfile_in_zip_read_info->bstream.avail_in = pfile_in_zip_read_info->
stream.
avail_in;
1806 pfile_in_zip_read_info->bstream.total_in_lo32 = pfile_in_zip_read_info->
stream.
total_in;
1807 pfile_in_zip_read_info->bstream.total_in_hi32 = 0;
1808 pfile_in_zip_read_info->bstream.next_out = (
char*)pfile_in_zip_read_info->
stream.
next_out;
1809 pfile_in_zip_read_info->bstream.avail_out = pfile_in_zip_read_info->
stream.
avail_out;
1810 pfile_in_zip_read_info->bstream.total_out_lo32 = pfile_in_zip_read_info->
stream.
total_out;
1811 pfile_in_zip_read_info->bstream.total_out_hi32 = 0;
1813 uTotalOutBefore = pfile_in_zip_read_info->bstream.total_out_lo32;
1814 bufBefore = (
const Bytef *)pfile_in_zip_read_info->bstream.next_out;
1816 err=BZ2_bzDecompress(&pfile_in_zip_read_info->bstream);
1818 uTotalOutAfter = pfile_in_zip_read_info->bstream.total_out_lo32;
1819 uOutThis = uTotalOutAfter-uTotalOutBefore;
1823 pfile_in_zip_read_info->
crc32 =
crc32(pfile_in_zip_read_info->
crc32,bufBefore, (
uInt)(uOutThis));
1825 iRead += (
uInt)(uTotalOutAfter - uTotalOutBefore);
1827 pfile_in_zip_read_info->
stream.
next_in = (
Bytef*)pfile_in_zip_read_info->bstream.next_in;
1828 pfile_in_zip_read_info->
stream.
avail_in = pfile_in_zip_read_info->bstream.avail_in;
1829 pfile_in_zip_read_info->
stream.
total_in = pfile_in_zip_read_info->bstream.total_in_lo32;
1830 pfile_in_zip_read_info->
stream.
next_out = (
Bytef*)pfile_in_zip_read_info->bstream.next_out;
1831 pfile_in_zip_read_info->
stream.
avail_out = pfile_in_zip_read_info->bstream.avail_out;
1832 pfile_in_zip_read_info->
stream.
total_out = pfile_in_zip_read_info->bstream.total_out_lo32;
1834 if (
err==BZ_STREAM_END)
1835 return (iRead==0) ?
UNZ_EOF : iRead;
1842 ZPOS64_T uTotalOutBefore,uTotalOutAfter;
1843 const Bytef *bufBefore;
1863 if (uTotalOutAfter<uTotalOutBefore)
1864 uTotalOutAfter += 1LL << 32;
1865 uOutThis = uTotalOutAfter-uTotalOutBefore;
1869 pfile_in_zip_read_info->
crc32 =
1870 crc32(pfile_in_zip_read_info->
crc32,bufBefore,
1876 iRead += (
uInt)(uTotalOutAfter - uTotalOutBefore);
1903 if (pfile_in_zip_read_info==
NULL)
1919 if (pfile_in_zip_read_info==
NULL)
1938 if (pfile_in_zip_read_info==
NULL)
1973 if (pfile_in_zip_read_info==
NULL)
1980 return (
int)size_to_read;
1982 if (
len>size_to_read)
1983 read_now = (
uInt)size_to_read;
1999 buf,read_now)!=read_now)
2002 return (
int)read_now;
2020 if (pfile_in_zip_read_info==
NULL)
2025 (!pfile_in_zip_read_info->
raw))
2027 if (pfile_in_zip_read_info->
crc32 != pfile_in_zip_read_info->
crc32_wait)
2038 BZ2_bzDecompressEnd(&pfile_in_zip_read_info->bstream);
2043 TRYFREE(pfile_in_zip_read_info);
2064 uReadThis = uSizeBuf;
2080 return (
int)uReadThis;
2106 return (
uLong)offset64;
const z_crc_t FAR *ZEXPORT get_crc_table()
unsigned long ZEXPORT crc32(unsigned long crc, const unsigned char FAR *buf, uInt len)
#define zdecode(pkeys, pcrc_32_tab, c)
int ZEXPORT inflate(z_streamp strm, int flush)
int ZEXPORT inflateEnd(z_streamp strm)
void fill_zlib_filefunc64_32_def_from_filefunc32(zlib_filefunc64_32_def *p_filefunc64_32, const zlib_filefunc_def *p_filefunc32)
void fill_fopen64_filefunc(zlib_filefunc64_def *pzlib_filefunc_def)
#define ZERROR64(filefunc, filestream)
unsigned __int64 ZPOS64_T
#define ZLIB_FILEFUNC_MODE_EXISTING
#define ZOPEN64(filefunc, filename, mode)
#define ZLIB_FILEFUNC_SEEK_CUR
typedef int(ZCALLBACK *close_file_func) OF((voidpf opaque
#define ZSEEK64(filefunc, filestream, pos, mode)
#define ZLIB_FILEFUNC_SEEK_SET
#define ZREAD64(filefunc, filestream, buf, size)
#define ZCLOSE64(filefunc, filestream)
#define ZTELL64(filefunc, filestream)
#define ZLIB_FILEFUNC_SEEK_END
#define ZLIB_FILEFUNC_MODE_READ
size_t strlen(const char *)
ZPOS64_T byte_before_the_zipfile
ZPOS64_T rest_read_uncompressed
ZPOS64_T offset_local_extrafield
ZPOS64_T rest_read_compressed
zlib_filefunc64_32_def z_filefunc
uInt size_local_extrafield
ZPOS64_T pos_local_extrafield
ZPOS64_T pos_in_zip_directory
zlib_filefunc64_32_def z_filefunc
unz_file_info64 cur_file_info
ZPOS64_T pos_in_central_dir
unz_file_info64_internal cur_file_info_internal
file_in_zip64_read_info_s * pfile_in_zip_read
ZPOS64_T offset_central_dir
ZPOS64_T size_central_dir
ZPOS64_T byte_before_the_zipfile
ZPOS64_T uncompressed_size
uLong pos_in_zip_directory
seek_file_func zseek32_file
zlib_filefunc64_def zfile_func64
tell_file_func ztell32_file
int ZEXPORT unzGetLocalExtrafield(unzFile file, voidp buf, unsigned len)
int ZEXPORT unzOpenCurrentFilePassword(unzFile file, const char *password)
int ZEXPORT unzSetOffset(unzFile file, uLong pos)
z_off_t ZEXPORT unztell(unzFile file)
uLong ZEXPORT unzGetOffset(unzFile file)
#define CASESENSITIVITYDEFAULTVALUE
int ZEXPORT unzLocateFile(unzFile file, const char *szFileName, int iCaseSensitivity)
int ZEXPORT unzGetFilePos(unzFile file, unz_file_pos *file_pos)
#define STRCMPCASENOSENTIVEFUNCTION
int ZEXPORT unzStringFileNameCompare(const char *fileName1, const char *fileName2, int iCaseSensitivity)
ZPOS64_T ZEXPORT unztell64(unzFile file)
int unz64local_getByte(const zlib_filefunc64_32_def *pzlib_filefunc_def, voidpf filestream, int *pi)
unzFile ZEXPORT unzOpen2_64(const void *path, zlib_filefunc64_def *pzlib_filefunc_def)
#define SIZEZIPLOCALHEADER
int ZEXPORT unzGetFilePos64(unzFile file, unz64_file_pos *file_pos)
void unz64local_DosDateToTmuDate(ZPOS64_T ulDosDate, tm_unz *ptm)
unzFile ZEXPORT unzOpen(const char *path)
ZPOS64_T unz64local_SearchCentralDir(const zlib_filefunc64_32_def *pzlib_filefunc_def, voidpf filestream)
int ZEXPORT unzGetCurrentFileInfo64(unzFile file, unz_file_info64 *pfile_info, char *szFileName, uLong fileNameBufferSize, void *extraField, uLong extraFieldBufferSize, char *szComment, uLong commentBufferSize)
int ZEXPORT unzGoToFirstFile(unzFile file)
int ZEXPORT unzeof(unzFile file)
ZPOS64_T unz64local_SearchCentralDir64(const zlib_filefunc64_32_def *pzlib_filefunc_def, voidpf filestream)
int ZEXPORT unzOpenCurrentFile2(unzFile file, int *method, int *level, int raw)
int ZEXPORT unzOpenCurrentFile3(unzFile file, int *method, int *level, int raw, const char *password)
ZPOS64_T ZEXPORT unzGetOffset64(unzFile file)
int ZEXPORT unzOpenCurrentFile(unzFile file)
int ZEXPORT unzGoToFilePos64(unzFile file, const unz64_file_pos *file_pos)
int ZEXPORT unzGoToFilePos(unzFile file, unz_file_pos *file_pos)
int ZEXPORT unzReadCurrentFile(unzFile file, voidp buf, unsigned len)
Addition for GDAL : END.
int ZEXPORT unzGetGlobalInfo64(unzFile file, unz_global_info64 *pglobal_info)
int unz64local_CheckCurrentFileCoherencyHeader(unz64_s *s, uInt *piSizeVar, ZPOS64_T *poffset_local_extrafield, uInt *psize_local_extrafield)
int unz64local_getLong64(const zlib_filefunc64_32_def *pzlib_filefunc_def, voidpf filestream, ZPOS64_T *pX)
unzFile ZEXPORT unzOpen2(const char *path, zlib_filefunc_def *pzlib_filefunc32_def)
int unz64local_getLong(const zlib_filefunc64_32_def *pzlib_filefunc_def, voidpf filestream, uLong *pX)
#define UNZ_MAXFILENAMEINZIP
int ZEXPORT unzSetOffset64(unzFile file, ZPOS64_T pos)
int ZEXPORT unzGetGlobalInfo(unzFile file, unz_global_info *pglobal_info32)
ZPOS64_T ZEXPORT unzGetCurrentFileZStreamPos64(unzFile file)
Addition for GDAL : START.
unzFile ZEXPORT unzOpen64(const void *path)
int unz64local_getShort(const zlib_filefunc64_32_def *pzlib_filefunc_def, voidpf filestream, uLong *pX)
int unz64local_GetCurrentFileInfoInternal(unzFile file, unz_file_info64 *pfile_info, unz_file_info64_internal *pfile_info_internal, char *szFileName, uLong fileNameBufferSize, void *extraField, uLong extraFieldBufferSize, char *szComment, uLong commentBufferSize)
int ZEXPORT unzCloseCurrentFile(unzFile file)
int ZEXPORT unzGetCurrentFileInfo(unzFile file, unz_file_info *pfile_info, char *szFileName, uLong fileNameBufferSize, void *extraField, uLong extraFieldBufferSize, char *szComment, uLong commentBufferSize)
int ZEXPORT unzGoToNextFile(unzFile file)
#define SIZECENTRALDIRITEM
int ZEXPORT unzGetGlobalComment(unzFile file, char *szComment, uLong uSizeBuf)
int strcmpcasenosensitive_internal(const char *fileName1, const char *fileName2)
const char unz_copyright[]
unzFile unzOpenInternal(const void *path, zlib_filefunc64_32_def *pzlib_filefunc64_32_def, int is64bitOpenFunction)
struct unz_file_info64_internal_s unz_file_info64_internal
int ZEXPORT unzClose(unzFile file)
#define UNZ_INTERNALERROR
#define UNZ_END_OF_LIST_OF_FILE
if((ID)(DISPID) nameid !=nameid)
#define inflateInit2(strm, windowBits)