unzip: latest greatest.

pull/1378/head
Kim Kulling 2017-08-05 18:46:34 +02:00
parent d052b74b96
commit c3cd7349d0
4 changed files with 69 additions and 83 deletions

View File

@ -10,11 +10,7 @@
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
# ifdef ASSIMP_BUILD_NO_OWN_ZLIB #include "zlib.h"
# include <zlib.h>
# else
# include "../zlib/zlib.h"
# endif
#include "ioapi.h" #include "ioapi.h"
@ -33,40 +29,40 @@
#define SEEK_SET 0 #define SEEK_SET 0
#endif #endif
voidpf ZCALLBACK fopen_file_func ( voidpf ZCALLBACK fopen_file_func OF((
voidpf opaque, voidpf opaque,
const char* filename, const char* filename,
int mode); int mode));
uLong ZCALLBACK fread_file_func ( uLong ZCALLBACK fread_file_func OF((
voidpf opaque, voidpf opaque,
voidpf stream, voidpf stream,
void* buf, void* buf,
uLong size); uLong size));
uLong ZCALLBACK fwrite_file_func ( uLong ZCALLBACK fwrite_file_func OF((
voidpf opaque, voidpf opaque,
voidpf stream, voidpf stream,
const void* buf, const void* buf,
uLong size); uLong size));
long ZCALLBACK ftell_file_func ( long ZCALLBACK ftell_file_func OF((
voidpf opaque, voidpf opaque,
voidpf stream); voidpf stream));
long ZCALLBACK fseek_file_func ( long ZCALLBACK fseek_file_func OF((
voidpf opaque, voidpf opaque,
voidpf stream, voidpf stream,
uLong offset, uLong offset,
int origin); int origin));
int ZCALLBACK fclose_file_func ( int ZCALLBACK fclose_file_func OF((
voidpf opaque, voidpf opaque,
voidpf stream); voidpf stream));
int ZCALLBACK ferror_file_func ( int ZCALLBACK ferror_file_func OF((
voidpf opaque, voidpf opaque,
voidpf stream); voidpf stream));
voidpf ZCALLBACK fopen_file_func (opaque, filename, mode) voidpf ZCALLBACK fopen_file_func (opaque, filename, mode)

View File

@ -35,13 +35,13 @@
extern "C" { extern "C" {
#endif #endif
typedef voidpf (ZCALLBACK *open_file_func) (voidpf opaque, const char* filename, int mode); typedef voidpf (ZCALLBACK *open_file_func) OF((voidpf opaque, const char* filename, int mode));
typedef uLong (ZCALLBACK *read_file_func) (voidpf opaque, voidpf stream, void* buf, uLong size); typedef uLong (ZCALLBACK *read_file_func) OF((voidpf opaque, voidpf stream, void* buf, uLong size));
typedef uLong (ZCALLBACK *write_file_func)(voidpf opaque, voidpf stream, const void* buf, uLong size); typedef uLong (ZCALLBACK *write_file_func) OF((voidpf opaque, voidpf stream, const void* buf, uLong size));
typedef long (ZCALLBACK *tell_file_func) (voidpf opaque, voidpf stream); typedef long (ZCALLBACK *tell_file_func) OF((voidpf opaque, voidpf stream));
typedef long (ZCALLBACK *seek_file_func) (voidpf opaque, voidpf stream, uLong offset, int origin); typedef long (ZCALLBACK *seek_file_func) OF((voidpf opaque, voidpf stream, uLong offset, int origin));
typedef int (ZCALLBACK *close_file_func) (voidpf opaque, voidpf stream); typedef int (ZCALLBACK *close_file_func) OF((voidpf opaque, voidpf stream));
typedef int (ZCALLBACK *testerror_file_func) (voidpf opaque, voidpf stream); typedef int (ZCALLBACK *testerror_file_func) OF((voidpf opaque, voidpf stream));
typedef struct zlib_filefunc_def_s typedef struct zlib_filefunc_def_s
{ {
@ -57,7 +57,7 @@ typedef struct zlib_filefunc_def_s
void fill_fopen_filefunc (zlib_filefunc_def* pzlib_filefunc_def); void fill_fopen_filefunc OF((zlib_filefunc_def* pzlib_filefunc_def));
#define ZREAD(filefunc,filestream,buf,size) ((*((filefunc).zread_file))((filefunc).opaque,filestream,buf,size)) #define ZREAD(filefunc,filestream,buf,size) ((*((filefunc).zread_file))((filefunc).opaque,filestream,buf,size))
#define ZWRITE(filefunc,filestream,buf,size) ((*((filefunc).zwrite_file))((filefunc).opaque,filestream,buf,size)) #define ZWRITE(filefunc,filestream,buf,size) ((*((filefunc).zwrite_file))((filefunc).opaque,filestream,buf,size))

View File

@ -38,7 +38,8 @@ woven in by Terry Thorsen 1/2003.
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include "./unzip.h" #include "zlib.h"
#include "unzip.h"
#ifdef STDC #ifdef STDC
# include <stddef.h> # include <stddef.h>
@ -162,10 +163,10 @@ typedef struct
*/ */
local int unzlocal_getByte ( local int unzlocal_getByte OF((
const zlib_filefunc_def* pzlib_filefunc_def, const zlib_filefunc_def* pzlib_filefunc_def,
voidpf filestream, voidpf filestream,
int *pi); int *pi));
local int unzlocal_getByte(pzlib_filefunc_def,filestream,pi) local int unzlocal_getByte(pzlib_filefunc_def,filestream,pi)
const zlib_filefunc_def* pzlib_filefunc_def; const zlib_filefunc_def* pzlib_filefunc_def;
@ -192,10 +193,10 @@ local int unzlocal_getByte(pzlib_filefunc_def,filestream,pi)
/* =========================================================================== /* ===========================================================================
Reads a long in LSB order from the given gz_stream. Sets Reads a long in LSB order from the given gz_stream. Sets
*/ */
local int unzlocal_getShort ( local int unzlocal_getShort OF((
const zlib_filefunc_def* pzlib_filefunc_def, const zlib_filefunc_def* pzlib_filefunc_def,
voidpf filestream, voidpf filestream,
uLong *pX); uLong *pX));
local int unzlocal_getShort (pzlib_filefunc_def,filestream,pX) local int unzlocal_getShort (pzlib_filefunc_def,filestream,pX)
const zlib_filefunc_def* pzlib_filefunc_def; const zlib_filefunc_def* pzlib_filefunc_def;
@ -220,10 +221,10 @@ local int unzlocal_getShort (pzlib_filefunc_def,filestream,pX)
return err; return err;
} }
local int unzlocal_getLong ( local int unzlocal_getLong OF((
const zlib_filefunc_def* pzlib_filefunc_def, const zlib_filefunc_def* pzlib_filefunc_def,
voidpf filestream, voidpf filestream,
uLong *pX); uLong *pX));
local int unzlocal_getLong (pzlib_filefunc_def,filestream,pX) local int unzlocal_getLong (pzlib_filefunc_def,filestream,pX)
const zlib_filefunc_def* pzlib_filefunc_def; const zlib_filefunc_def* pzlib_filefunc_def;
@ -323,9 +324,9 @@ extern int ZEXPORT unzStringFileNameCompare (fileName1,fileName2,iCaseSensitivit
Locate the Central directory of a zipfile (at the end, just before Locate the Central directory of a zipfile (at the end, just before
the global comment) the global comment)
*/ */
local uLong unzlocal_SearchCentralDir ( local uLong unzlocal_SearchCentralDir OF((
const zlib_filefunc_def* pzlib_filefunc_def, const zlib_filefunc_def* pzlib_filefunc_def,
voidpf filestream); voidpf filestream));
local uLong unzlocal_SearchCentralDir(pzlib_filefunc_def,filestream) local uLong unzlocal_SearchCentralDir(pzlib_filefunc_def,filestream)
const zlib_filefunc_def* pzlib_filefunc_def; const zlib_filefunc_def* pzlib_filefunc_def;
@ -562,7 +563,7 @@ local void unzlocal_DosDateToTmuDate (ulDosDate, ptm)
/* /*
Get Info about the current file in the zipfile, with internal only info Get Info about the current file in the zipfile, with internal only info
*/ */
local int unzlocal_GetCurrentFileInfoInternal (unzFile file, local int unzlocal_GetCurrentFileInfoInternal OF((unzFile file,
unz_file_info *pfile_info, unz_file_info *pfile_info,
unz_file_info_internal unz_file_info_internal
*pfile_info_internal, *pfile_info_internal,
@ -571,7 +572,7 @@ local int unzlocal_GetCurrentFileInfoInternal (unzFile file,
void *extraField, void *extraField,
uLong extraFieldBufferSize, uLong extraFieldBufferSize,
char *szComment, char *szComment,
uLong commentBufferSize); uLong commentBufferSize));
local int unzlocal_GetCurrentFileInfoInternal (file, local int unzlocal_GetCurrentFileInfoInternal (file,
pfile_info, pfile_info,
@ -607,12 +608,10 @@ local int unzlocal_GetCurrentFileInfoInternal (file,
/* we check the magic */ /* we check the magic */
if (err==UNZ_OK) if (err==UNZ_OK)
{
if (unzlocal_getLong(&s->z_filefunc, s->filestream,&uMagic) != UNZ_OK) if (unzlocal_getLong(&s->z_filefunc, s->filestream,&uMagic) != UNZ_OK)
err=UNZ_ERRNO; err=UNZ_ERRNO;
else if (uMagic!=0x02014b50) else if (uMagic!=0x02014b50)
err=UNZ_BADZIPFILE; err=UNZ_BADZIPFILE;
}
if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.version) != UNZ_OK) if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.version) != UNZ_OK)
err=UNZ_ERRNO; err=UNZ_ERRNO;
@ -689,12 +688,10 @@ local int unzlocal_GetCurrentFileInfoInternal (file,
uSizeRead = extraFieldBufferSize; uSizeRead = extraFieldBufferSize;
if (lSeek!=0) if (lSeek!=0)
{
if (ZSEEK(s->z_filefunc, s->filestream,lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0) if (ZSEEK(s->z_filefunc, s->filestream,lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0)
lSeek=0; lSeek=0;
else else
err=UNZ_ERRNO; err=UNZ_ERRNO;
}
if ((file_info.size_file_extra>0) && (extraFieldBufferSize>0)) if ((file_info.size_file_extra>0) && (extraFieldBufferSize>0))
if (ZREAD(s->z_filefunc, s->filestream,extraField,uSizeRead)!=uSizeRead) if (ZREAD(s->z_filefunc, s->filestream,extraField,uSizeRead)!=uSizeRead)
err=UNZ_ERRNO; err=UNZ_ERRNO;
@ -716,12 +713,10 @@ local int unzlocal_GetCurrentFileInfoInternal (file,
uSizeRead = commentBufferSize; uSizeRead = commentBufferSize;
if (lSeek!=0) if (lSeek!=0)
{
if (ZSEEK(s->z_filefunc, s->filestream,lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0) if (ZSEEK(s->z_filefunc, s->filestream,lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0)
lSeek=0; lSeek=0;
else else
err=UNZ_ERRNO; err=UNZ_ERRNO;
}
if ((file_info.size_file_comment>0) && (commentBufferSize>0)) if ((file_info.size_file_comment>0) && (commentBufferSize>0))
if (ZREAD(s->z_filefunc, s->filestream,szComment,uSizeRead)!=uSizeRead) if (ZREAD(s->z_filefunc, s->filestream,szComment,uSizeRead)!=uSizeRead)
err=UNZ_ERRNO; err=UNZ_ERRNO;
@ -982,13 +977,11 @@ local int unzlocal_CheckCurrentFileCoherencyHeader (s,piSizeVar,
if (err==UNZ_OK) if (err==UNZ_OK)
{
if (unzlocal_getLong(&s->z_filefunc, s->filestream,&uMagic) != UNZ_OK) if (unzlocal_getLong(&s->z_filefunc, s->filestream,&uMagic) != UNZ_OK)
err=UNZ_ERRNO; err=UNZ_ERRNO;
else if (uMagic!=0x04034b50) else if (uMagic!=0x04034b50)
err=UNZ_BADZIPFILE; err=UNZ_BADZIPFILE;
}
if (unzlocal_getShort(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) if (unzlocal_getShort(&s->z_filefunc, s->filestream,&uData) != UNZ_OK)
err=UNZ_ERRNO; err=UNZ_ERRNO;
/* /*
@ -1246,7 +1239,7 @@ extern int ZEXPORT unzReadCurrentFile (file, buf, len)
return UNZ_PARAMERROR; return UNZ_PARAMERROR;
if (pfile_in_zip_read_info->read_buffer == NULL) if ((pfile_in_zip_read_info->read_buffer == NULL))
return UNZ_END_OF_LIST_OF_FILE; return UNZ_END_OF_LIST_OF_FILE;
if (len==0) if (len==0)
return 0; return 0;
@ -1541,6 +1534,7 @@ extern int ZEXPORT unzGetGlobalComment (file, szComment, uSizeBuf)
char *szComment; char *szComment;
uLong uSizeBuf; uLong uSizeBuf;
{ {
int err=UNZ_OK;
unz_s* s; unz_s* s;
uLong uReadThis ; uLong uReadThis ;
if (file==NULL) if (file==NULL)

View File

@ -50,11 +50,7 @@ extern "C" {
#endif #endif
#ifndef _ZLIB_H #ifndef _ZLIB_H
# ifdef ASSIMP_BUILD_NO_OWN_ZLIB #include "zlib.h"
# include <zlib.h>
# else
# include "../zlib/zlib.h"
# endif
#endif #endif
#ifndef _ZLIBIOAPI_H #ifndef _ZLIBIOAPI_H
@ -123,9 +119,9 @@ typedef struct unz_file_info_s
tm_unz tmu_date; tm_unz tmu_date;
} unz_file_info; } unz_file_info;
extern int ZEXPORT unzStringFileNameCompare (const char* fileName1, extern int ZEXPORT unzStringFileNameCompare OF ((const char* fileName1,
const char* fileName2, const char* fileName2,
int iCaseSensitivity); int iCaseSensitivity));
/* /*
Compare two filename (fileName1,fileName2). Compare two filename (fileName1,fileName2).
If iCaseSenisivity = 1, comparision is case sensitivity (like strcmp) If iCaseSenisivity = 1, comparision is case sensitivity (like strcmp)
@ -136,7 +132,7 @@ extern int ZEXPORT unzStringFileNameCompare (const char* fileName1,
*/ */
extern unzFile ZEXPORT unzOpen (const char *path); extern unzFile ZEXPORT unzOpen OF((const char *path));
/* /*
Open a Zip file. path contain the full pathname (by example, Open a Zip file. path contain the full pathname (by example,
on a Windows XP computer "c:\\zlib\\zlib113.zip" or on an Unix computer on a Windows XP computer "c:\\zlib\\zlib113.zip" or on an Unix computer
@ -147,31 +143,31 @@ extern unzFile ZEXPORT unzOpen (const char *path);
of this unzip package. of this unzip package.
*/ */
extern unzFile ZEXPORT unzOpen2 (const char *path, extern unzFile ZEXPORT unzOpen2 OF((const char *path,
zlib_filefunc_def* pzlib_filefunc_def); zlib_filefunc_def* pzlib_filefunc_def));
/* /*
Open a Zip file, like unzOpen, but provide a set of file low level API Open a Zip file, like unzOpen, but provide a set of file low level API
for read/write the zip file (see ioapi.h) for read/write the zip file (see ioapi.h)
*/ */
extern int ZEXPORT unzClose (unzFile file); extern int ZEXPORT unzClose OF((unzFile file));
/* /*
Close a ZipFile opened with unzipOpen. Close a ZipFile opened with unzipOpen.
If there is files inside the .Zip opened with unzOpenCurrentFile (see later), If there is files inside the .Zip opened with unzOpenCurrentFile (see later),
these files MUST be closed with unzipCloseCurrentFile before call unzipClose. these files MUST be closed with unzipCloseCurrentFile before call unzipClose.
return UNZ_OK if there is no problem. */ return UNZ_OK if there is no problem. */
extern int ZEXPORT unzGetGlobalInfo (unzFile file, extern int ZEXPORT unzGetGlobalInfo OF((unzFile file,
unz_global_info *pglobal_info); unz_global_info *pglobal_info));
/* /*
Write info about the ZipFile in the *pglobal_info structure. Write info about the ZipFile in the *pglobal_info structure.
No preparation of the structure is needed No preparation of the structure is needed
return UNZ_OK if there is no problem. */ return UNZ_OK if there is no problem. */
extern int ZEXPORT unzGetGlobalComment (unzFile file, extern int ZEXPORT unzGetGlobalComment OF((unzFile file,
char *szComment, char *szComment,
uLong uSizeBuf); uLong uSizeBuf));
/* /*
Get the global comment string of the ZipFile, in the szComment buffer. Get the global comment string of the ZipFile, in the szComment buffer.
uSizeBuf is the size of the szComment buffer. uSizeBuf is the size of the szComment buffer.
@ -182,22 +178,22 @@ extern int ZEXPORT unzGetGlobalComment (unzFile file,
/***************************************************************************/ /***************************************************************************/
/* Unzip package allow you browse the directory of the zipfile */ /* Unzip package allow you browse the directory of the zipfile */
extern int ZEXPORT unzGoToFirstFile (unzFile file); extern int ZEXPORT unzGoToFirstFile OF((unzFile file));
/* /*
Set the current file of the zipfile to the first file. Set the current file of the zipfile to the first file.
return UNZ_OK if there is no problem return UNZ_OK if there is no problem
*/ */
extern int ZEXPORT unzGoToNextFile (unzFile file); extern int ZEXPORT unzGoToNextFile OF((unzFile file));
/* /*
Set the current file of the zipfile to the next file. Set the current file of the zipfile to the next file.
return UNZ_OK if there is no problem return UNZ_OK if there is no problem
return UNZ_END_OF_LIST_OF_FILE if the actual file was the latest. return UNZ_END_OF_LIST_OF_FILE if the actual file was the latest.
*/ */
extern int ZEXPORT unzLocateFile (unzFile file, extern int ZEXPORT unzLocateFile OF((unzFile file,
const char *szFileName, const char *szFileName,
int iCaseSensitivity); int iCaseSensitivity));
/* /*
Try locate the file szFileName in the zipfile. Try locate the file szFileName in the zipfile.
For the iCaseSensitivity signification, see unzStringFileNameCompare For the iCaseSensitivity signification, see unzStringFileNameCompare
@ -227,14 +223,14 @@ extern int ZEXPORT unzGoToFilePos(
/* ****************************************** */ /* ****************************************** */
extern int ZEXPORT unzGetCurrentFileInfo (unzFile file, extern int ZEXPORT unzGetCurrentFileInfo OF((unzFile file,
unz_file_info *pfile_info, unz_file_info *pfile_info,
char *szFileName, char *szFileName,
uLong fileNameBufferSize, uLong fileNameBufferSize,
void *extraField, void *extraField,
uLong extraFieldBufferSize, uLong extraFieldBufferSize,
char *szComment, char *szComment,
uLong commentBufferSize); uLong commentBufferSize));
/* /*
Get Info about the current file Get Info about the current file
if pfile_info!=NULL, the *pfile_info structure will contain somes info about if pfile_info!=NULL, the *pfile_info structure will contain somes info about
@ -253,24 +249,24 @@ extern int ZEXPORT unzGetCurrentFileInfo (unzFile file,
from it, and close it (you can close it before reading all the file) from it, and close it (you can close it before reading all the file)
*/ */
extern int ZEXPORT unzOpenCurrentFile (unzFile file); extern int ZEXPORT unzOpenCurrentFile OF((unzFile file));
/* /*
Open for reading data the current file in the zipfile. Open for reading data the current file in the zipfile.
If there is no error, the return value is UNZ_OK. If there is no error, the return value is UNZ_OK.
*/ */
extern int ZEXPORT unzOpenCurrentFilePassword (unzFile file, extern int ZEXPORT unzOpenCurrentFilePassword OF((unzFile file,
const char* password); const char* password));
/* /*
Open for reading data the current file in the zipfile. Open for reading data the current file in the zipfile.
password is a crypting password password is a crypting password
If there is no error, the return value is UNZ_OK. If there is no error, the return value is UNZ_OK.
*/ */
extern int ZEXPORT unzOpenCurrentFile2 (unzFile file, extern int ZEXPORT unzOpenCurrentFile2 OF((unzFile file,
int* method, int* method,
int* level, int* level,
int raw); int raw));
/* /*
Same than unzOpenCurrentFile, but open for read raw the file (not uncompress) Same than unzOpenCurrentFile, but open for read raw the file (not uncompress)
if raw==1 if raw==1
@ -280,11 +276,11 @@ extern int ZEXPORT unzOpenCurrentFile2 (unzFile file,
but you CANNOT set method parameter as NULL but you CANNOT set method parameter as NULL
*/ */
extern int ZEXPORT unzOpenCurrentFile3 (unzFile file, extern int ZEXPORT unzOpenCurrentFile3 OF((unzFile file,
int* method, int* method,
int* level, int* level,
int raw, int raw,
const char* password); const char* password));
/* /*
Same than unzOpenCurrentFile, but open for read raw the file (not uncompress) Same than unzOpenCurrentFile, but open for read raw the file (not uncompress)
if raw==1 if raw==1
@ -295,15 +291,15 @@ extern int ZEXPORT unzOpenCurrentFile3 (unzFile file,
*/ */
extern int ZEXPORT unzCloseCurrentFile (unzFile file); extern int ZEXPORT unzCloseCurrentFile OF((unzFile file));
/* /*
Close the file in zip opened with unzOpenCurrentFile Close the file in zip opened with unzOpenCurrentFile
Return UNZ_CRCERROR if all the file was read but the CRC is not good Return UNZ_CRCERROR if all the file was read but the CRC is not good
*/ */
extern int ZEXPORT unzReadCurrentFile (unzFile file, extern int ZEXPORT unzReadCurrentFile OF((unzFile file,
voidp buf, voidp buf,
unsigned len); unsigned len));
/* /*
Read bytes from the current file (opened by unzOpenCurrentFile) Read bytes from the current file (opened by unzOpenCurrentFile)
buf contain buffer where data must be copied buf contain buffer where data must be copied
@ -315,19 +311,19 @@ extern int ZEXPORT unzReadCurrentFile (unzFile file,
(UNZ_ERRNO for IO error, or zLib error for uncompress error) (UNZ_ERRNO for IO error, or zLib error for uncompress error)
*/ */
extern z_off_t ZEXPORT unztell (unzFile file); extern z_off_t ZEXPORT unztell OF((unzFile file));
/* /*
Give the current position in uncompressed data Give the current position in uncompressed data
*/ */
extern int ZEXPORT unzeof (unzFile file); extern int ZEXPORT unzeof OF((unzFile file));
/* /*
return 1 if the end of file was reached, 0 elsewhere return 1 if the end of file was reached, 0 elsewhere
*/ */
extern int ZEXPORT unzGetLocalExtrafield (unzFile file, extern int ZEXPORT unzGetLocalExtrafield OF((unzFile file,
voidp buf, voidp buf,
unsigned len); unsigned len));
/* /*
Read extra field from the current file (opened by unzOpenCurrentFile) Read extra field from the current file (opened by unzOpenCurrentFile)
This is the local-header version of the extra field (sometimes, there is This is the local-header version of the extra field (sometimes, there is