23 changed files with 231 additions and 7526 deletions
@ -1,39 +0,0 @@ |
|||||
cmake_policy(SET CMP0015 NEW) |
|
||||
# this policy was introduced in cmake 3.0 |
|
||||
# remove if, once 3.0 will be used on unix |
|
||||
if (${CMAKE_MAJOR_VERSION} GREATER 2) |
|
||||
# old policy do not use MACOSX_RPATH |
|
||||
cmake_policy(SET CMP0042 OLD) |
|
||||
endif() |
|
||||
set(CMAKE_AUTOMOC OFF) |
|
||||
|
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DSTATICLIB") |
|
||||
|
|
||||
aux_source_directory(. SRC_LIST) |
|
||||
|
|
||||
include_directories(${LEVELDB_INCLUDE_DIRS}) |
|
||||
include_directories(..) |
|
||||
|
|
||||
|
|
||||
file(GLOB HEADERS "*.h") |
|
||||
|
|
||||
if (ETH_STATIC) |
|
||||
add_library(${EXECUTABLE} STATIC ${SRC_LIST} ${HEADERS}) |
|
||||
else() |
|
||||
add_library(${EXECUTABLE} SHARED ${SRC_LIST} ${HEADERS}) |
|
||||
endif() |
|
||||
|
|
||||
|
|
||||
|
|
||||
target_link_libraries(${EXECUTABLE} ethereum) |
|
||||
target_link_libraries(${EXECUTABLE} evm) |
|
||||
target_link_libraries(${EXECUTABLE} lll) |
|
||||
target_link_libraries(${EXECUTABLE} whisper) |
|
||||
target_link_libraries(${EXECUTABLE} p2p) |
|
||||
target_link_libraries(${EXECUTABLE} ethcore) |
|
||||
target_link_libraries(${EXECUTABLE} devcrypto) |
|
||||
target_link_libraries(${EXECUTABLE} secp256k1) |
|
||||
|
|
||||
install( TARGETS ${EXECUTABLE} ARCHIVE DESTINATION lib LIBRARY DESTINATION lib ) |
|
||||
install( FILES ${HEADERS} DESTINATION include/${EXECUTABLE} ) |
|
||||
|
|
@ -1,131 +0,0 @@ |
|||||
/* crypt.h -- base code for crypt/uncrypt ZIPfile
|
|
||||
|
|
||||
|
|
||||
Version 1.01e, February 12th, 2005 |
|
||||
|
|
||||
Copyright (C) 1998-2005 Gilles Vollant |
|
||||
|
|
||||
This code is a modified version of crypting code in Infozip distribution |
|
||||
|
|
||||
The encryption/decryption parts of this source code (as opposed to the |
|
||||
non-echoing password parts) were originally written in Europe. The |
|
||||
whole source package can be freely distributed, including from the USA. |
|
||||
(Prior to January 2000, re-export from the US was a violation of US law.) |
|
||||
|
|
||||
This encryption code is a direct transcription of the algorithm from |
|
||||
Roger Schlafly, described by Phil Katz in the file appnote.txt. This |
|
||||
file (appnote.txt) is distributed with the PKZIP program (even in the |
|
||||
version without encryption capabilities). |
|
||||
|
|
||||
If you don't need crypting in your application, just define symbols |
|
||||
NOCRYPT and NOUNCRYPT. |
|
||||
|
|
||||
This code support the "Traditional PKWARE Encryption". |
|
||||
|
|
||||
The new AES encryption added on Zip format by Winzip (see the page |
|
||||
http://www.winzip.com/aes_info.htm ) and PKWare PKZip 5.x Strong
|
|
||||
Encryption is not supported. |
|
||||
*/ |
|
||||
|
|
||||
#define CRC32(c, b) ((*(pcrc_32_tab+(((int)(c) ^ (b)) & 0xff))) ^ ((c) >> 8)) |
|
||||
|
|
||||
/***********************************************************************
|
|
||||
* Return the next byte in the pseudo-random sequence |
|
||||
*/ |
|
||||
static int decrypt_byte(unsigned long* pkeys, const unsigned long* pcrc_32_tab) |
|
||||
{ |
|
||||
unsigned temp; /* POTENTIAL BUG: temp*(temp^1) may overflow in an
|
|
||||
* unpredictable manner on 16-bit systems; not a problem |
|
||||
* with any known compiler so far, though */ |
|
||||
|
|
||||
temp = ((unsigned)(*(pkeys+2)) & 0xffff) | 2; |
|
||||
return (int)(((temp * (temp ^ 1)) >> 8) & 0xff); |
|
||||
} |
|
||||
|
|
||||
/***********************************************************************
|
|
||||
* Update the encryption keys with the next byte of plain text |
|
||||
*/ |
|
||||
static int update_keys(unsigned long* pkeys,const unsigned long* pcrc_32_tab,int c) |
|
||||
{ |
|
||||
(*(pkeys+0)) = CRC32((*(pkeys+0)), c); |
|
||||
(*(pkeys+1)) += (*(pkeys+0)) & 0xff; |
|
||||
(*(pkeys+1)) = (*(pkeys+1)) * 134775813L + 1; |
|
||||
{ |
|
||||
register int keyshift = (int)((*(pkeys+1)) >> 24); |
|
||||
(*(pkeys+2)) = CRC32((*(pkeys+2)), keyshift); |
|
||||
} |
|
||||
return c; |
|
||||
} |
|
||||
|
|
||||
|
|
||||
/***********************************************************************
|
|
||||
* Initialize the encryption keys and the random header according to |
|
||||
* the given password. |
|
||||
*/ |
|
||||
static void init_keys(const char* passwd,unsigned long* pkeys,const unsigned long* pcrc_32_tab) |
|
||||
{ |
|
||||
*(pkeys+0) = 305419896L; |
|
||||
*(pkeys+1) = 591751049L; |
|
||||
*(pkeys+2) = 878082192L; |
|
||||
while (*passwd != '\0') { |
|
||||
update_keys(pkeys,pcrc_32_tab,(int)*passwd); |
|
||||
passwd++; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
#define zdecode(pkeys,pcrc_32_tab,c) \ |
|
||||
(update_keys(pkeys,pcrc_32_tab,c ^= decrypt_byte(pkeys,pcrc_32_tab))) |
|
||||
|
|
||||
#define zencode(pkeys,pcrc_32_tab,c,t) \ |
|
||||
(t=decrypt_byte(pkeys,pcrc_32_tab), update_keys(pkeys,pcrc_32_tab,c), t^(c)) |
|
||||
|
|
||||
#ifdef INCLUDECRYPTINGCODE_IFCRYPTALLOWED |
|
||||
|
|
||||
#define RAND_HEAD_LEN 12 |
|
||||
/* "last resort" source for second part of crypt seed pattern */ |
|
||||
# ifndef ZCR_SEED2 |
|
||||
# define ZCR_SEED2 3141592654UL /* use PI as default pattern */ |
|
||||
# endif |
|
||||
|
|
||||
static int crypthead(const char* passwd, /* password string */ |
|
||||
unsigned char* buf, /* where to write header */ |
|
||||
int bufSize, |
|
||||
unsigned long* pkeys, |
|
||||
const unsigned long* pcrc_32_tab, |
|
||||
unsigned long crcForCrypting) |
|
||||
{ |
|
||||
int n; /* index in random header */ |
|
||||
int t; /* temporary */ |
|
||||
int c; /* random byte */ |
|
||||
unsigned char header[RAND_HEAD_LEN-2]; /* random header */ |
|
||||
static unsigned calls = 0; /* ensure different random header each time */ |
|
||||
|
|
||||
if (bufSize<RAND_HEAD_LEN) |
|
||||
return 0; |
|
||||
|
|
||||
/* First generate RAND_HEAD_LEN-2 random bytes. We encrypt the
|
|
||||
* output of rand() to get less predictability, since rand() is |
|
||||
* often poorly implemented. |
|
||||
*/ |
|
||||
if (++calls == 1) |
|
||||
{ |
|
||||
srand((unsigned)(time(NULL) ^ ZCR_SEED2)); |
|
||||
} |
|
||||
init_keys(passwd, pkeys, pcrc_32_tab); |
|
||||
for (n = 0; n < RAND_HEAD_LEN-2; n++) |
|
||||
{ |
|
||||
c = (rand() >> 7) & 0xff; |
|
||||
header[n] = (unsigned char)zencode(pkeys, pcrc_32_tab, c, t); |
|
||||
} |
|
||||
/* Encrypt random header (last two bytes is high word of crc) */ |
|
||||
init_keys(passwd, pkeys, pcrc_32_tab); |
|
||||
for (n = 0; n < RAND_HEAD_LEN-2; n++) |
|
||||
{ |
|
||||
buf[n] = (unsigned char)zencode(pkeys, pcrc_32_tab, header[n], t); |
|
||||
} |
|
||||
buf[n++] = (unsigned char)zencode(pkeys, pcrc_32_tab, (int)(crcForCrypting >> 16) & 0xff, t); |
|
||||
buf[n++] = (unsigned char)zencode(pkeys, pcrc_32_tab, (int)(crcForCrypting >> 24) & 0xff, t); |
|
||||
return n; |
|
||||
} |
|
||||
|
|
||||
#endif |
|
@ -1,235 +0,0 @@ |
|||||
/* ioapi.h -- IO base function header for compress/uncompress .zip
|
|
||||
part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )
|
|
||||
|
|
||||
Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )
|
|
||||
|
|
||||
Modifications for Zip64 support |
|
||||
Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )
|
|
||||
|
|
||||
For more info read MiniZip_info.txt |
|
||||
|
|
||||
*/ |
|
||||
|
|
||||
#if (defined(_WIN32)) |
|
||||
#define _CRT_SECURE_NO_WARNINGS |
|
||||
#endif |
|
||||
|
|
||||
#include "ioapi.h" |
|
||||
|
|
||||
voidpf call_zopen64 (const zlib_filefunc64_32_def* pfilefunc,const void*filename,int mode) |
|
||||
{ |
|
||||
if (pfilefunc->zfile_func64.zopen64_file != NULL) |
|
||||
return (*(pfilefunc->zfile_func64.zopen64_file)) (pfilefunc->zfile_func64.opaque,filename,mode); |
|
||||
else |
|
||||
{ |
|
||||
return (*(pfilefunc->zopen32_file))(pfilefunc->zfile_func64.opaque,(const char*)filename,mode); |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
long call_zseek64 (const zlib_filefunc64_32_def* pfilefunc,voidpf filestream, ZPOS64_T offset, int origin) |
|
||||
{ |
|
||||
if (pfilefunc->zfile_func64.zseek64_file != NULL) |
|
||||
return (*(pfilefunc->zfile_func64.zseek64_file)) (pfilefunc->zfile_func64.opaque,filestream,offset,origin); |
|
||||
else |
|
||||
{ |
|
||||
uLong offsetTruncated = (uLong)offset; |
|
||||
if (offsetTruncated != offset) |
|
||||
return -1; |
|
||||
else |
|
||||
return (*(pfilefunc->zseek32_file))(pfilefunc->zfile_func64.opaque,filestream,offsetTruncated,origin); |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
ZPOS64_T call_ztell64 (const zlib_filefunc64_32_def* pfilefunc,voidpf filestream) |
|
||||
{ |
|
||||
if (pfilefunc->zfile_func64.zseek64_file != NULL) |
|
||||
return (*(pfilefunc->zfile_func64.ztell64_file)) (pfilefunc->zfile_func64.opaque,filestream); |
|
||||
else |
|
||||
{ |
|
||||
uLong tell_uLong = (*(pfilefunc->ztell32_file))(pfilefunc->zfile_func64.opaque,filestream); |
|
||||
if ((tell_uLong) == ((uLong)-1)) |
|
||||
return (ZPOS64_T)-1; |
|
||||
else |
|
||||
return tell_uLong; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
void fill_zlib_filefunc64_32_def_from_filefunc32(zlib_filefunc64_32_def* p_filefunc64_32,const zlib_filefunc_def* p_filefunc32) |
|
||||
{ |
|
||||
p_filefunc64_32->zfile_func64.zopen64_file = NULL; |
|
||||
p_filefunc64_32->zopen32_file = p_filefunc32->zopen_file; |
|
||||
p_filefunc64_32->zfile_func64.zerror_file = p_filefunc32->zerror_file; |
|
||||
p_filefunc64_32->zfile_func64.zread_file = p_filefunc32->zread_file; |
|
||||
p_filefunc64_32->zfile_func64.zwrite_file = p_filefunc32->zwrite_file; |
|
||||
p_filefunc64_32->zfile_func64.ztell64_file = NULL; |
|
||||
p_filefunc64_32->zfile_func64.zseek64_file = NULL; |
|
||||
p_filefunc64_32->zfile_func64.zclose_file = p_filefunc32->zclose_file; |
|
||||
p_filefunc64_32->zfile_func64.zerror_file = p_filefunc32->zerror_file; |
|
||||
p_filefunc64_32->zfile_func64.opaque = p_filefunc32->opaque; |
|
||||
p_filefunc64_32->zseek32_file = p_filefunc32->zseek_file; |
|
||||
p_filefunc64_32->ztell32_file = p_filefunc32->ztell_file; |
|
||||
} |
|
||||
|
|
||||
|
|
||||
|
|
||||
static voidpf ZCALLBACK fopen_file_func OF((voidpf opaque, const char* filename, int mode)); |
|
||||
static uLong ZCALLBACK fread_file_func OF((voidpf opaque, voidpf stream, void* buf, uLong size)); |
|
||||
static uLong ZCALLBACK fwrite_file_func OF((voidpf opaque, voidpf stream, const void* buf,uLong size)); |
|
||||
static ZPOS64_T ZCALLBACK ftell64_file_func OF((voidpf opaque, voidpf stream)); |
|
||||
static long ZCALLBACK fseek64_file_func OF((voidpf opaque, voidpf stream, ZPOS64_T offset, int origin)); |
|
||||
static int ZCALLBACK fclose_file_func OF((voidpf opaque, voidpf stream)); |
|
||||
static int ZCALLBACK ferror_file_func OF((voidpf opaque, voidpf stream)); |
|
||||
|
|
||||
static voidpf ZCALLBACK fopen_file_func (voidpf opaque, const char* filename, int mode) |
|
||||
{ |
|
||||
FILE* file = NULL; |
|
||||
const char* mode_fopen = NULL; |
|
||||
if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ) |
|
||||
mode_fopen = "rb"; |
|
||||
else |
|
||||
if (mode & ZLIB_FILEFUNC_MODE_EXISTING) |
|
||||
mode_fopen = "r+b"; |
|
||||
else |
|
||||
if (mode & ZLIB_FILEFUNC_MODE_CREATE) |
|
||||
mode_fopen = "wb"; |
|
||||
|
|
||||
if ((filename!=NULL) && (mode_fopen != NULL)) |
|
||||
file = fopen(filename, mode_fopen); |
|
||||
return file; |
|
||||
} |
|
||||
|
|
||||
static voidpf ZCALLBACK fopen64_file_func (voidpf opaque, const void* filename, int mode) |
|
||||
{ |
|
||||
FILE* file = NULL; |
|
||||
const char* mode_fopen = NULL; |
|
||||
if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ) |
|
||||
mode_fopen = "rb"; |
|
||||
else |
|
||||
if (mode & ZLIB_FILEFUNC_MODE_EXISTING) |
|
||||
mode_fopen = "r+b"; |
|
||||
else |
|
||||
if (mode & ZLIB_FILEFUNC_MODE_CREATE) |
|
||||
mode_fopen = "wb"; |
|
||||
|
|
||||
if ((filename!=NULL) && (mode_fopen != NULL)) |
|
||||
file = fopen64((const char*)filename, mode_fopen); |
|
||||
return file; |
|
||||
} |
|
||||
|
|
||||
|
|
||||
static uLong ZCALLBACK fread_file_func (voidpf opaque, voidpf stream, void* buf, uLong size) |
|
||||
{ |
|
||||
uLong ret; |
|
||||
ret = (uLong)fread(buf, 1, (size_t)size, (FILE *)stream); |
|
||||
return ret; |
|
||||
} |
|
||||
|
|
||||
static uLong ZCALLBACK fwrite_file_func (voidpf opaque, voidpf stream, const void* buf, uLong size) |
|
||||
{ |
|
||||
uLong ret; |
|
||||
ret = (uLong)fwrite(buf, 1, (size_t)size, (FILE *)stream); |
|
||||
return ret; |
|
||||
} |
|
||||
|
|
||||
static long ZCALLBACK ftell_file_func (voidpf opaque, voidpf stream) |
|
||||
{ |
|
||||
long ret; |
|
||||
ret = ftell((FILE *)stream); |
|
||||
return ret; |
|
||||
} |
|
||||
|
|
||||
|
|
||||
static ZPOS64_T ZCALLBACK ftell64_file_func (voidpf opaque, voidpf stream) |
|
||||
{ |
|
||||
ZPOS64_T ret; |
|
||||
ret = ftello64((FILE *)stream); |
|
||||
return ret; |
|
||||
} |
|
||||
|
|
||||
static long ZCALLBACK fseek_file_func (voidpf opaque, voidpf stream, uLong offset, int origin) |
|
||||
{ |
|
||||
int fseek_origin=0; |
|
||||
long ret; |
|
||||
switch (origin) |
|
||||
{ |
|
||||
case ZLIB_FILEFUNC_SEEK_CUR : |
|
||||
fseek_origin = SEEK_CUR; |
|
||||
break; |
|
||||
case ZLIB_FILEFUNC_SEEK_END : |
|
||||
fseek_origin = SEEK_END; |
|
||||
break; |
|
||||
case ZLIB_FILEFUNC_SEEK_SET : |
|
||||
fseek_origin = SEEK_SET; |
|
||||
break; |
|
||||
default: return -1; |
|
||||
} |
|
||||
ret = 0; |
|
||||
if (fseek((FILE *)stream, offset, fseek_origin) != 0) |
|
||||
ret = -1; |
|
||||
return ret; |
|
||||
} |
|
||||
|
|
||||
static long ZCALLBACK fseek64_file_func (voidpf opaque, voidpf stream, ZPOS64_T offset, int origin) |
|
||||
{ |
|
||||
int fseek_origin=0; |
|
||||
long ret; |
|
||||
switch (origin) |
|
||||
{ |
|
||||
case ZLIB_FILEFUNC_SEEK_CUR : |
|
||||
fseek_origin = SEEK_CUR; |
|
||||
break; |
|
||||
case ZLIB_FILEFUNC_SEEK_END : |
|
||||
fseek_origin = SEEK_END; |
|
||||
break; |
|
||||
case ZLIB_FILEFUNC_SEEK_SET : |
|
||||
fseek_origin = SEEK_SET; |
|
||||
break; |
|
||||
default: return -1; |
|
||||
} |
|
||||
ret = 0; |
|
||||
|
|
||||
if(fseeko64((FILE *)stream, offset, fseek_origin) != 0) |
|
||||
ret = -1; |
|
||||
|
|
||||
return ret; |
|
||||
} |
|
||||
|
|
||||
|
|
||||
static int ZCALLBACK fclose_file_func (voidpf opaque, voidpf stream) |
|
||||
{ |
|
||||
int ret; |
|
||||
ret = fclose((FILE *)stream); |
|
||||
return ret; |
|
||||
} |
|
||||
|
|
||||
static int ZCALLBACK ferror_file_func (voidpf opaque, voidpf stream) |
|
||||
{ |
|
||||
int ret; |
|
||||
ret = ferror((FILE *)stream); |
|
||||
return ret; |
|
||||
} |
|
||||
|
|
||||
void fill_fopen_filefunc (pzlib_filefunc_def) |
|
||||
zlib_filefunc_def* pzlib_filefunc_def; |
|
||||
{ |
|
||||
pzlib_filefunc_def->zopen_file = fopen_file_func; |
|
||||
pzlib_filefunc_def->zread_file = fread_file_func; |
|
||||
pzlib_filefunc_def->zwrite_file = fwrite_file_func; |
|
||||
pzlib_filefunc_def->ztell_file = ftell_file_func; |
|
||||
pzlib_filefunc_def->zseek_file = fseek_file_func; |
|
||||
pzlib_filefunc_def->zclose_file = fclose_file_func; |
|
||||
pzlib_filefunc_def->zerror_file = ferror_file_func; |
|
||||
pzlib_filefunc_def->opaque = NULL; |
|
||||
} |
|
||||
|
|
||||
void fill_fopen64_filefunc (zlib_filefunc64_def* pzlib_filefunc_def) |
|
||||
{ |
|
||||
pzlib_filefunc_def->zopen64_file = fopen64_file_func; |
|
||||
pzlib_filefunc_def->zread_file = fread_file_func; |
|
||||
pzlib_filefunc_def->zwrite_file = fwrite_file_func; |
|
||||
pzlib_filefunc_def->ztell64_file = ftell64_file_func; |
|
||||
pzlib_filefunc_def->zseek64_file = fseek64_file_func; |
|
||||
pzlib_filefunc_def->zclose_file = fclose_file_func; |
|
||||
pzlib_filefunc_def->zerror_file = ferror_file_func; |
|
||||
pzlib_filefunc_def->opaque = NULL; |
|
||||
} |
|
@ -1,200 +0,0 @@ |
|||||
/* ioapi.h -- IO base function header for compress/uncompress .zip
|
|
||||
part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )
|
|
||||
|
|
||||
Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )
|
|
||||
|
|
||||
Modifications for Zip64 support |
|
||||
Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )
|
|
||||
|
|
||||
For more info read MiniZip_info.txt |
|
||||
|
|
||||
Changes |
|
||||
|
|
||||
Oct-2009 - Defined ZPOS64_T to fpos_t on windows and u_int64_t on linux. (might need to find a better why for this) |
|
||||
Oct-2009 - Change to fseeko64, ftello64 and fopen64 so large files would work on linux. |
|
||||
More if/def section may be needed to support other platforms |
|
||||
Oct-2009 - Defined fxxxx64 calls to normal fopen/ftell/fseek so they would compile on windows. |
|
||||
(but you should use iowin32.c for windows instead) |
|
||||
|
|
||||
*/ |
|
||||
|
|
||||
#ifndef _ZLIBIOAPI64_H |
|
||||
#define _ZLIBIOAPI64_H |
|
||||
|
|
||||
#if (!defined(_WIN32)) && (!defined(WIN32)) |
|
||||
|
|
||||
// Linux needs this to support file operation on files larger then 4+GB
|
|
||||
// But might need better if/def to select just the platforms that needs them.
|
|
||||
|
|
||||
#ifndef __USE_FILE_OFFSET64 |
|
||||
#define __USE_FILE_OFFSET64 |
|
||||
#endif |
|
||||
#ifndef __USE_LARGEFILE64 |
|
||||
#define __USE_LARGEFILE64 |
|
||||
#endif |
|
||||
#ifndef _LARGEFILE64_SOURCE |
|
||||
#define _LARGEFILE64_SOURCE |
|
||||
#endif |
|
||||
#ifndef _FILE_OFFSET_BIT |
|
||||
#define _FILE_OFFSET_BIT 64 |
|
||||
#endif |
|
||||
#endif |
|
||||
|
|
||||
#include <stdio.h> |
|
||||
#include <stdlib.h> |
|
||||
#include "zlib.h" |
|
||||
|
|
||||
#if defined(USE_FILE32API) |
|
||||
#define fopen64 fopen |
|
||||
#define ftello64 ftell |
|
||||
#define fseeko64 fseek |
|
||||
#else |
|
||||
#ifdef _MSC_VER |
|
||||
#define fopen64 fopen |
|
||||
#if (_MSC_VER >= 1400) && (!(defined(NO_MSCVER_FILE64_FUNC))) |
|
||||
#define ftello64 _ftelli64 |
|
||||
#define fseeko64 _fseeki64 |
|
||||
#else // old MSC
|
|
||||
#define ftello64 ftell |
|
||||
#define fseeko64 fseek |
|
||||
#endif |
|
||||
#endif |
|
||||
#endif |
|
||||
|
|
||||
/*
|
|
||||
#ifndef ZPOS64_T |
|
||||
#ifdef _WIN32 |
|
||||
#define ZPOS64_T fpos_t |
|
||||
#else |
|
||||
#include <stdint.h> |
|
||||
#define ZPOS64_T uint64_t |
|
||||
#endif |
|
||||
#endif |
|
||||
*/ |
|
||||
|
|
||||
#ifdef HAVE_MINIZIP64_CONF_H |
|
||||
#include "mz64conf.h" |
|
||||
#endif |
|
||||
|
|
||||
/* a type choosen by DEFINE */ |
|
||||
#ifdef HAVE_64BIT_INT_CUSTOM |
|
||||
typedef 64BIT_INT_CUSTOM_TYPE ZPOS64_T; |
|
||||
#else |
|
||||
#ifdef HAS_STDINT_H |
|
||||
#include "stdint.h" |
|
||||
typedef uint64_t ZPOS64_T; |
|
||||
#else |
|
||||
|
|
||||
|
|
||||
#if defined(_MSC_VER) || defined(__BORLANDC__) |
|
||||
typedef unsigned __int64 ZPOS64_T; |
|
||||
#else |
|
||||
typedef unsigned long long int ZPOS64_T; |
|
||||
#endif |
|
||||
#endif |
|
||||
#endif |
|
||||
|
|
||||
|
|
||||
|
|
||||
#ifdef __cplusplus |
|
||||
extern "C" { |
|
||||
#endif |
|
||||
|
|
||||
|
|
||||
#define ZLIB_FILEFUNC_SEEK_CUR (1) |
|
||||
#define ZLIB_FILEFUNC_SEEK_END (2) |
|
||||
#define ZLIB_FILEFUNC_SEEK_SET (0) |
|
||||
|
|
||||
#define ZLIB_FILEFUNC_MODE_READ (1) |
|
||||
#define ZLIB_FILEFUNC_MODE_WRITE (2) |
|
||||
#define ZLIB_FILEFUNC_MODE_READWRITEFILTER (3) |
|
||||
|
|
||||
#define ZLIB_FILEFUNC_MODE_EXISTING (4) |
|
||||
#define ZLIB_FILEFUNC_MODE_CREATE (8) |
|
||||
|
|
||||
|
|
||||
#ifndef ZCALLBACK |
|
||||
#if (defined(WIN32) || defined(_WIN32) || defined (WINDOWS) || defined (_WINDOWS)) && defined(CALLBACK) && defined (USEWINDOWS_CALLBACK) |
|
||||
#define ZCALLBACK CALLBACK |
|
||||
#else |
|
||||
#define ZCALLBACK |
|
||||
#endif |
|
||||
#endif |
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
typedef voidpf (ZCALLBACK *open_file_func) OF((voidpf opaque, const char* filename, int mode)); |
|
||||
typedef uLong (ZCALLBACK *read_file_func) OF((voidpf opaque, voidpf stream, void* buf, uLong size)); |
|
||||
typedef uLong (ZCALLBACK *write_file_func) OF((voidpf opaque, voidpf stream, const void* buf, uLong size)); |
|
||||
typedef int (ZCALLBACK *close_file_func) OF((voidpf opaque, voidpf stream)); |
|
||||
typedef int (ZCALLBACK *testerror_file_func) OF((voidpf opaque, voidpf stream)); |
|
||||
|
|
||||
typedef long (ZCALLBACK *tell_file_func) OF((voidpf opaque, voidpf stream)); |
|
||||
typedef long (ZCALLBACK *seek_file_func) OF((voidpf opaque, voidpf stream, uLong offset, int origin)); |
|
||||
|
|
||||
|
|
||||
/* here is the "old" 32 bits structure structure */ |
|
||||
typedef struct zlib_filefunc_def_s |
|
||||
{ |
|
||||
open_file_func zopen_file; |
|
||||
read_file_func zread_file; |
|
||||
write_file_func zwrite_file; |
|
||||
tell_file_func ztell_file; |
|
||||
seek_file_func zseek_file; |
|
||||
close_file_func zclose_file; |
|
||||
testerror_file_func zerror_file; |
|
||||
voidpf opaque; |
|
||||
} zlib_filefunc_def; |
|
||||
|
|
||||
typedef ZPOS64_T (ZCALLBACK *tell64_file_func) OF((voidpf opaque, voidpf stream)); |
|
||||
typedef long (ZCALLBACK *seek64_file_func) OF((voidpf opaque, voidpf stream, ZPOS64_T offset, int origin)); |
|
||||
typedef voidpf (ZCALLBACK *open64_file_func) OF((voidpf opaque, const void* filename, int mode)); |
|
||||
|
|
||||
typedef struct zlib_filefunc64_def_s |
|
||||
{ |
|
||||
open64_file_func zopen64_file; |
|
||||
read_file_func zread_file; |
|
||||
write_file_func zwrite_file; |
|
||||
tell64_file_func ztell64_file; |
|
||||
seek64_file_func zseek64_file; |
|
||||
close_file_func zclose_file; |
|
||||
testerror_file_func zerror_file; |
|
||||
voidpf opaque; |
|
||||
} zlib_filefunc64_def; |
|
||||
|
|
||||
void fill_fopen64_filefunc OF((zlib_filefunc64_def* pzlib_filefunc_def)); |
|
||||
void fill_fopen_filefunc OF((zlib_filefunc_def* pzlib_filefunc_def)); |
|
||||
|
|
||||
/* now internal definition, only for zip.c and unzip.h */ |
|
||||
typedef struct zlib_filefunc64_32_def_s |
|
||||
{ |
|
||||
zlib_filefunc64_def zfile_func64; |
|
||||
open_file_func zopen32_file; |
|
||||
tell_file_func ztell32_file; |
|
||||
seek_file_func zseek32_file; |
|
||||
} zlib_filefunc64_32_def; |
|
||||
|
|
||||
|
|
||||
#define ZREAD64(filefunc,filestream,buf,size) ((*((filefunc).zfile_func64.zread_file)) ((filefunc).zfile_func64.opaque,filestream,buf,size)) |
|
||||
#define ZWRITE64(filefunc,filestream,buf,size) ((*((filefunc).zfile_func64.zwrite_file)) ((filefunc).zfile_func64.opaque,filestream,buf,size)) |
|
||||
//#define ZTELL64(filefunc,filestream) ((*((filefunc).ztell64_file)) ((filefunc).opaque,filestream))
|
|
||||
//#define ZSEEK64(filefunc,filestream,pos,mode) ((*((filefunc).zseek64_file)) ((filefunc).opaque,filestream,pos,mode))
|
|
||||
#define ZCLOSE64(filefunc,filestream) ((*((filefunc).zfile_func64.zclose_file)) ((filefunc).zfile_func64.opaque,filestream)) |
|
||||
#define ZERROR64(filefunc,filestream) ((*((filefunc).zfile_func64.zerror_file)) ((filefunc).zfile_func64.opaque,filestream)) |
|
||||
|
|
||||
voidpf call_zopen64 OF((const zlib_filefunc64_32_def* pfilefunc,const void*filename,int mode)); |
|
||||
long call_zseek64 OF((const zlib_filefunc64_32_def* pfilefunc,voidpf filestream, ZPOS64_T offset, int origin)); |
|
||||
ZPOS64_T call_ztell64 OF((const zlib_filefunc64_32_def* pfilefunc,voidpf filestream)); |
|
||||
|
|
||||
void fill_zlib_filefunc64_32_def_from_filefunc32(zlib_filefunc64_32_def* p_filefunc64_32,const zlib_filefunc_def* p_filefunc32); |
|
||||
|
|
||||
#define ZOPEN64(filefunc,filename,mode) (call_zopen64((&(filefunc)),(filename),(mode))) |
|
||||
#define ZTELL64(filefunc,filestream) (call_ztell64((&(filefunc)),(filestream))) |
|
||||
#define ZSEEK64(filefunc,filestream,pos,mode) (call_zseek64((&(filefunc)),(filestream),(pos),(mode))) |
|
||||
|
|
||||
#ifdef __cplusplus |
|
||||
} |
|
||||
#endif |
|
||||
|
|
||||
#endif |
|
@ -1,389 +0,0 @@ |
|||||
/* iowin32.c -- IO base function header for compress/uncompress .zip
|
|
||||
Version 1.1, February 14h, 2010 |
|
||||
part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )
|
|
||||
|
|
||||
Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )
|
|
||||
|
|
||||
Modifications for Zip64 support |
|
||||
Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )
|
|
||||
|
|
||||
For more info read MiniZip_info.txt |
|
||||
|
|
||||
*/ |
|
||||
|
|
||||
#include <stdlib.h> |
|
||||
|
|
||||
#include "zlib.h" |
|
||||
#include "ioapi.h" |
|
||||
#include "iowin32.h" |
|
||||
|
|
||||
#ifndef INVALID_HANDLE_VALUE |
|
||||
#define INVALID_HANDLE_VALUE (0xFFFFFFFF) |
|
||||
#endif |
|
||||
|
|
||||
#ifndef INVALID_SET_FILE_POINTER |
|
||||
#define INVALID_SET_FILE_POINTER ((DWORD)-1) |
|
||||
#endif |
|
||||
|
|
||||
voidpf ZCALLBACK win32_open_file_func OF((voidpf opaque, const char* filename, int mode)); |
|
||||
uLong ZCALLBACK win32_read_file_func OF((voidpf opaque, voidpf stream, void* buf, uLong size)); |
|
||||
uLong ZCALLBACK win32_write_file_func OF((voidpf opaque, voidpf stream, const void* buf, uLong size)); |
|
||||
ZPOS64_T ZCALLBACK win32_tell64_file_func OF((voidpf opaque, voidpf stream)); |
|
||||
long ZCALLBACK win32_seek64_file_func OF((voidpf opaque, voidpf stream, ZPOS64_T offset, int origin)); |
|
||||
int ZCALLBACK win32_close_file_func OF((voidpf opaque, voidpf stream)); |
|
||||
int ZCALLBACK win32_error_file_func OF((voidpf opaque, voidpf stream)); |
|
||||
|
|
||||
typedef struct |
|
||||
{ |
|
||||
HANDLE hf; |
|
||||
int error; |
|
||||
} WIN32FILE_IOWIN; |
|
||||
|
|
||||
|
|
||||
static void win32_translate_open_mode(int mode, |
|
||||
DWORD* lpdwDesiredAccess, |
|
||||
DWORD* lpdwCreationDisposition, |
|
||||
DWORD* lpdwShareMode, |
|
||||
DWORD* lpdwFlagsAndAttributes) |
|
||||
{ |
|
||||
*lpdwDesiredAccess = *lpdwShareMode = *lpdwFlagsAndAttributes = *lpdwCreationDisposition = 0; |
|
||||
|
|
||||
if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ) |
|
||||
{ |
|
||||
*lpdwDesiredAccess = GENERIC_READ; |
|
||||
*lpdwCreationDisposition = OPEN_EXISTING; |
|
||||
*lpdwShareMode = FILE_SHARE_READ; |
|
||||
} |
|
||||
else if (mode & ZLIB_FILEFUNC_MODE_EXISTING) |
|
||||
{ |
|
||||
*lpdwDesiredAccess = GENERIC_WRITE | GENERIC_READ; |
|
||||
*lpdwCreationDisposition = OPEN_EXISTING; |
|
||||
} |
|
||||
else if (mode & ZLIB_FILEFUNC_MODE_CREATE) |
|
||||
{ |
|
||||
*lpdwDesiredAccess = GENERIC_WRITE | GENERIC_READ; |
|
||||
*lpdwCreationDisposition = CREATE_ALWAYS; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
static voidpf win32_build_iowin(HANDLE hFile) |
|
||||
{ |
|
||||
voidpf ret=NULL; |
|
||||
|
|
||||
if ((hFile != NULL) && (hFile != INVALID_HANDLE_VALUE)) |
|
||||
{ |
|
||||
WIN32FILE_IOWIN w32fiow; |
|
||||
w32fiow.hf = hFile; |
|
||||
w32fiow.error = 0; |
|
||||
ret = malloc(sizeof(WIN32FILE_IOWIN)); |
|
||||
|
|
||||
if (ret==NULL) |
|
||||
CloseHandle(hFile); |
|
||||
else |
|
||||
*((WIN32FILE_IOWIN*)ret) = w32fiow; |
|
||||
} |
|
||||
return ret; |
|
||||
} |
|
||||
|
|
||||
voidpf ZCALLBACK win32_open64_file_func (voidpf opaque,const void* filename,int mode) |
|
||||
{ |
|
||||
const char* mode_fopen = NULL; |
|
||||
DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ; |
|
||||
HANDLE hFile = NULL; |
|
||||
|
|
||||
win32_translate_open_mode(mode,&dwDesiredAccess,&dwCreationDisposition,&dwShareMode,&dwFlagsAndAttributes); |
|
||||
|
|
||||
if ((filename!=NULL) && (dwDesiredAccess != 0)) |
|
||||
hFile = CreateFile((LPCTSTR)filename, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, dwFlagsAndAttributes, NULL); |
|
||||
|
|
||||
return win32_build_iowin(hFile); |
|
||||
} |
|
||||
|
|
||||
|
|
||||
voidpf ZCALLBACK win32_open64_file_funcA (voidpf opaque,const void* filename,int mode) |
|
||||
{ |
|
||||
const char* mode_fopen = NULL; |
|
||||
DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ; |
|
||||
HANDLE hFile = NULL; |
|
||||
|
|
||||
win32_translate_open_mode(mode,&dwDesiredAccess,&dwCreationDisposition,&dwShareMode,&dwFlagsAndAttributes); |
|
||||
|
|
||||
if ((filename!=NULL) && (dwDesiredAccess != 0)) |
|
||||
hFile = CreateFileA((LPCSTR)filename, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, dwFlagsAndAttributes, NULL); |
|
||||
|
|
||||
return win32_build_iowin(hFile); |
|
||||
} |
|
||||
|
|
||||
|
|
||||
voidpf ZCALLBACK win32_open64_file_funcW (voidpf opaque,const void* filename,int mode) |
|
||||
{ |
|
||||
const char* mode_fopen = NULL; |
|
||||
DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ; |
|
||||
HANDLE hFile = NULL; |
|
||||
|
|
||||
win32_translate_open_mode(mode,&dwDesiredAccess,&dwCreationDisposition,&dwShareMode,&dwFlagsAndAttributes); |
|
||||
|
|
||||
if ((filename!=NULL) && (dwDesiredAccess != 0)) |
|
||||
hFile = CreateFileW((LPCWSTR)filename, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, dwFlagsAndAttributes, NULL); |
|
||||
|
|
||||
return win32_build_iowin(hFile); |
|
||||
} |
|
||||
|
|
||||
|
|
||||
voidpf ZCALLBACK win32_open_file_func (voidpf opaque,const char* filename,int mode) |
|
||||
{ |
|
||||
const char* mode_fopen = NULL; |
|
||||
DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ; |
|
||||
HANDLE hFile = NULL; |
|
||||
|
|
||||
win32_translate_open_mode(mode,&dwDesiredAccess,&dwCreationDisposition,&dwShareMode,&dwFlagsAndAttributes); |
|
||||
|
|
||||
if ((filename!=NULL) && (dwDesiredAccess != 0)) |
|
||||
hFile = CreateFile((LPCTSTR)filename, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, dwFlagsAndAttributes, NULL); |
|
||||
|
|
||||
return win32_build_iowin(hFile); |
|
||||
} |
|
||||
|
|
||||
|
|
||||
uLong ZCALLBACK win32_read_file_func (voidpf opaque, voidpf stream, void* buf,uLong size) |
|
||||
{ |
|
||||
uLong ret=0; |
|
||||
HANDLE hFile = NULL; |
|
||||
if (stream!=NULL) |
|
||||
hFile = ((WIN32FILE_IOWIN*)stream) -> hf; |
|
||||
|
|
||||
if (hFile != NULL) |
|
||||
{ |
|
||||
if (!ReadFile(hFile, buf, size, &ret, NULL)) |
|
||||
{ |
|
||||
DWORD dwErr = GetLastError(); |
|
||||
if (dwErr == ERROR_HANDLE_EOF) |
|
||||
dwErr = 0; |
|
||||
((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
return ret; |
|
||||
} |
|
||||
|
|
||||
|
|
||||
uLong ZCALLBACK win32_write_file_func (voidpf opaque,voidpf stream,const void* buf,uLong size) |
|
||||
{ |
|
||||
uLong ret=0; |
|
||||
HANDLE hFile = NULL; |
|
||||
if (stream!=NULL) |
|
||||
hFile = ((WIN32FILE_IOWIN*)stream) -> hf; |
|
||||
|
|
||||
if (hFile != NULL) |
|
||||
{ |
|
||||
if (!WriteFile(hFile, buf, size, &ret, NULL)) |
|
||||
{ |
|
||||
DWORD dwErr = GetLastError(); |
|
||||
if (dwErr == ERROR_HANDLE_EOF) |
|
||||
dwErr = 0; |
|
||||
((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
return ret; |
|
||||
} |
|
||||
|
|
||||
long ZCALLBACK win32_tell_file_func (voidpf opaque,voidpf stream) |
|
||||
{ |
|
||||
long ret=-1; |
|
||||
HANDLE hFile = NULL; |
|
||||
if (stream!=NULL) |
|
||||
hFile = ((WIN32FILE_IOWIN*)stream) -> hf; |
|
||||
if (hFile != NULL) |
|
||||
{ |
|
||||
DWORD dwSet = SetFilePointer(hFile, 0, NULL, FILE_CURRENT); |
|
||||
if (dwSet == INVALID_SET_FILE_POINTER) |
|
||||
{ |
|
||||
DWORD dwErr = GetLastError(); |
|
||||
((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr; |
|
||||
ret = -1; |
|
||||
} |
|
||||
else |
|
||||
ret=(long)dwSet; |
|
||||
} |
|
||||
return ret; |
|
||||
} |
|
||||
|
|
||||
ZPOS64_T ZCALLBACK win32_tell64_file_func (voidpf opaque, voidpf stream) |
|
||||
{ |
|
||||
ZPOS64_T ret= (ZPOS64_T)-1; |
|
||||
HANDLE hFile = NULL; |
|
||||
if (stream!=NULL) |
|
||||
hFile = ((WIN32FILE_IOWIN*)stream)->hf; |
|
||||
|
|
||||
if (hFile) |
|
||||
{ |
|
||||
LARGE_INTEGER li; |
|
||||
li.QuadPart = 0; |
|
||||
li.u.LowPart = SetFilePointer(hFile, li.u.LowPart, &li.u.HighPart, FILE_CURRENT); |
|
||||
if ( (li.LowPart == 0xFFFFFFFF) && (GetLastError() != NO_ERROR)) |
|
||||
{ |
|
||||
DWORD dwErr = GetLastError(); |
|
||||
((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr; |
|
||||
ret = (ZPOS64_T)-1; |
|
||||
} |
|
||||
else |
|
||||
ret=li.QuadPart; |
|
||||
} |
|
||||
return ret; |
|
||||
} |
|
||||
|
|
||||
|
|
||||
long ZCALLBACK win32_seek_file_func (voidpf opaque,voidpf stream,uLong offset,int origin) |
|
||||
{ |
|
||||
DWORD dwMoveMethod=0xFFFFFFFF; |
|
||||
HANDLE hFile = NULL; |
|
||||
|
|
||||
long ret=-1; |
|
||||
if (stream!=NULL) |
|
||||
hFile = ((WIN32FILE_IOWIN*)stream) -> hf; |
|
||||
switch (origin) |
|
||||
{ |
|
||||
case ZLIB_FILEFUNC_SEEK_CUR : |
|
||||
dwMoveMethod = FILE_CURRENT; |
|
||||
break; |
|
||||
case ZLIB_FILEFUNC_SEEK_END : |
|
||||
dwMoveMethod = FILE_END; |
|
||||
break; |
|
||||
case ZLIB_FILEFUNC_SEEK_SET : |
|
||||
dwMoveMethod = FILE_BEGIN; |
|
||||
break; |
|
||||
default: return -1; |
|
||||
} |
|
||||
|
|
||||
if (hFile != NULL) |
|
||||
{ |
|
||||
DWORD dwSet = SetFilePointer(hFile, offset, NULL, dwMoveMethod); |
|
||||
if (dwSet == INVALID_SET_FILE_POINTER) |
|
||||
{ |
|
||||
DWORD dwErr = GetLastError(); |
|
||||
((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr; |
|
||||
ret = -1; |
|
||||
} |
|
||||
else |
|
||||
ret=0; |
|
||||
} |
|
||||
return ret; |
|
||||
} |
|
||||
|
|
||||
long ZCALLBACK win32_seek64_file_func (voidpf opaque, voidpf stream,ZPOS64_T offset,int origin) |
|
||||
{ |
|
||||
DWORD dwMoveMethod=0xFFFFFFFF; |
|
||||
HANDLE hFile = NULL; |
|
||||
long ret=-1; |
|
||||
|
|
||||
if (stream!=NULL) |
|
||||
hFile = ((WIN32FILE_IOWIN*)stream)->hf; |
|
||||
|
|
||||
switch (origin) |
|
||||
{ |
|
||||
case ZLIB_FILEFUNC_SEEK_CUR : |
|
||||
dwMoveMethod = FILE_CURRENT; |
|
||||
break; |
|
||||
case ZLIB_FILEFUNC_SEEK_END : |
|
||||
dwMoveMethod = FILE_END; |
|
||||
break; |
|
||||
case ZLIB_FILEFUNC_SEEK_SET : |
|
||||
dwMoveMethod = FILE_BEGIN; |
|
||||
break; |
|
||||
default: return -1; |
|
||||
} |
|
||||
|
|
||||
if (hFile) |
|
||||
{ |
|
||||
LARGE_INTEGER* li = (LARGE_INTEGER*)&offset; |
|
||||
DWORD dwSet = SetFilePointer(hFile, li->u.LowPart, &li->u.HighPart, dwMoveMethod); |
|
||||
if (dwSet == INVALID_SET_FILE_POINTER) |
|
||||
{ |
|
||||
DWORD dwErr = GetLastError(); |
|
||||
((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr; |
|
||||
ret = -1; |
|
||||
} |
|
||||
else |
|
||||
ret=0; |
|
||||
} |
|
||||
return ret; |
|
||||
} |
|
||||
|
|
||||
int ZCALLBACK win32_close_file_func (voidpf opaque, voidpf stream) |
|
||||
{ |
|
||||
int ret=-1; |
|
||||
|
|
||||
if (stream!=NULL) |
|
||||
{ |
|
||||
HANDLE hFile; |
|
||||
hFile = ((WIN32FILE_IOWIN*)stream) -> hf; |
|
||||
if (hFile != NULL) |
|
||||
{ |
|
||||
CloseHandle(hFile); |
|
||||
ret=0; |
|
||||
} |
|
||||
free(stream); |
|
||||
} |
|
||||
return ret; |
|
||||
} |
|
||||
|
|
||||
int ZCALLBACK win32_error_file_func (voidpf opaque,voidpf stream) |
|
||||
{ |
|
||||
int ret=-1; |
|
||||
if (stream!=NULL) |
|
||||
{ |
|
||||
ret = ((WIN32FILE_IOWIN*)stream) -> error; |
|
||||
} |
|
||||
return ret; |
|
||||
} |
|
||||
|
|
||||
void fill_win32_filefunc (zlib_filefunc_def* pzlib_filefunc_def) |
|
||||
{ |
|
||||
pzlib_filefunc_def->zopen_file = win32_open_file_func; |
|
||||
pzlib_filefunc_def->zread_file = win32_read_file_func; |
|
||||
pzlib_filefunc_def->zwrite_file = win32_write_file_func; |
|
||||
pzlib_filefunc_def->ztell_file = win32_tell_file_func; |
|
||||
pzlib_filefunc_def->zseek_file = win32_seek_file_func; |
|
||||
pzlib_filefunc_def->zclose_file = win32_close_file_func; |
|
||||
pzlib_filefunc_def->zerror_file = win32_error_file_func; |
|
||||
pzlib_filefunc_def->opaque = NULL; |
|
||||
} |
|
||||
|
|
||||
void fill_win32_filefunc64(zlib_filefunc64_def* pzlib_filefunc_def) |
|
||||
{ |
|
||||
pzlib_filefunc_def->zopen64_file = win32_open64_file_func; |
|
||||
pzlib_filefunc_def->zread_file = win32_read_file_func; |
|
||||
pzlib_filefunc_def->zwrite_file = win32_write_file_func; |
|
||||
pzlib_filefunc_def->ztell64_file = win32_tell64_file_func; |
|
||||
pzlib_filefunc_def->zseek64_file = win32_seek64_file_func; |
|
||||
pzlib_filefunc_def->zclose_file = win32_close_file_func; |
|
||||
pzlib_filefunc_def->zerror_file = win32_error_file_func; |
|
||||
pzlib_filefunc_def->opaque = NULL; |
|
||||
} |
|
||||
|
|
||||
|
|
||||
void fill_win32_filefunc64A(zlib_filefunc64_def* pzlib_filefunc_def) |
|
||||
{ |
|
||||
pzlib_filefunc_def->zopen64_file = win32_open64_file_funcA; |
|
||||
pzlib_filefunc_def->zread_file = win32_read_file_func; |
|
||||
pzlib_filefunc_def->zwrite_file = win32_write_file_func; |
|
||||
pzlib_filefunc_def->ztell64_file = win32_tell64_file_func; |
|
||||
pzlib_filefunc_def->zseek64_file = win32_seek64_file_func; |
|
||||
pzlib_filefunc_def->zclose_file = win32_close_file_func; |
|
||||
pzlib_filefunc_def->zerror_file = win32_error_file_func; |
|
||||
pzlib_filefunc_def->opaque = NULL; |
|
||||
} |
|
||||
|
|
||||
|
|
||||
void fill_win32_filefunc64W(zlib_filefunc64_def* pzlib_filefunc_def) |
|
||||
{ |
|
||||
pzlib_filefunc_def->zopen64_file = win32_open64_file_funcW; |
|
||||
pzlib_filefunc_def->zread_file = win32_read_file_func; |
|
||||
pzlib_filefunc_def->zwrite_file = win32_write_file_func; |
|
||||
pzlib_filefunc_def->ztell64_file = win32_tell64_file_func; |
|
||||
pzlib_filefunc_def->zseek64_file = win32_seek64_file_func; |
|
||||
pzlib_filefunc_def->zclose_file = win32_close_file_func; |
|
||||
pzlib_filefunc_def->zerror_file = win32_error_file_func; |
|
||||
pzlib_filefunc_def->opaque = NULL; |
|
||||
} |
|
@ -1,28 +0,0 @@ |
|||||
/* iowin32.h -- IO base function header for compress/uncompress .zip
|
|
||||
Version 1.1, February 14h, 2010 |
|
||||
part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )
|
|
||||
|
|
||||
Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )
|
|
||||
|
|
||||
Modifications for Zip64 support |
|
||||
Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )
|
|
||||
|
|
||||
For more info read MiniZip_info.txt |
|
||||
|
|
||||
*/ |
|
||||
|
|
||||
#include <windows.h> |
|
||||
|
|
||||
|
|
||||
#ifdef __cplusplus |
|
||||
extern "C" { |
|
||||
#endif |
|
||||
|
|
||||
void fill_win32_filefunc OF((zlib_filefunc_def* pzlib_filefunc_def)); |
|
||||
void fill_win32_filefunc64 OF((zlib_filefunc64_def* pzlib_filefunc_def)); |
|
||||
void fill_win32_filefunc64A OF((zlib_filefunc64_def* pzlib_filefunc_def)); |
|
||||
void fill_win32_filefunc64W OF((zlib_filefunc64_def* pzlib_filefunc_def)); |
|
||||
|
|
||||
#ifdef __cplusplus |
|
||||
} |
|
||||
#endif |
|
@ -1,648 +0,0 @@ |
|||||
/*
|
|
||||
miniunz.c |
|
||||
Version 1.1, February 14h, 2010 |
|
||||
sample part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )
|
|
||||
|
|
||||
Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )
|
|
||||
|
|
||||
Modifications of Unzip for Zip64 |
|
||||
Copyright (C) 2007-2008 Even Rouault |
|
||||
|
|
||||
Modifications for Zip64 support on both zip and unzip |
|
||||
Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )
|
|
||||
*/ |
|
||||
|
|
||||
#ifndef _WIN32 |
|
||||
#ifndef __USE_FILE_OFFSET64 |
|
||||
#define __USE_FILE_OFFSET64 |
|
||||
#endif |
|
||||
#ifndef __USE_LARGEFILE64 |
|
||||
#define __USE_LARGEFILE64 |
|
||||
#endif |
|
||||
#ifndef _LARGEFILE64_SOURCE |
|
||||
#define _LARGEFILE64_SOURCE |
|
||||
#endif |
|
||||
#ifndef _FILE_OFFSET_BIT |
|
||||
#define _FILE_OFFSET_BIT 64 |
|
||||
#endif |
|
||||
#endif |
|
||||
|
|
||||
#include <stdio.h> |
|
||||
#include <stdlib.h> |
|
||||
#include <string.h> |
|
||||
#include <time.h> |
|
||||
#include <errno.h> |
|
||||
#include <fcntl.h> |
|
||||
|
|
||||
#ifdef unix |
|
||||
# include <unistd.h> |
|
||||
# include <utime.h> |
|
||||
#else |
|
||||
# include <direct.h> |
|
||||
# include <io.h> |
|
||||
#endif |
|
||||
|
|
||||
#include "unzip.h" |
|
||||
|
|
||||
#define CASESENSITIVITY (0) |
|
||||
#define WRITEBUFFERSIZE (8192) |
|
||||
#define MAXFILENAME (256) |
|
||||
|
|
||||
#ifdef _WIN32 |
|
||||
#define USEWIN32IOAPI |
|
||||
#include "iowin32.h" |
|
||||
#endif |
|
||||
/*
|
|
||||
mini unzip, demo of unzip package |
|
||||
|
|
||||
usage : |
|
||||
Usage : miniunz [-exvlo] file.zip [file_to_extract] [-d extractdir] |
|
||||
|
|
||||
list the file in the zipfile, and print the content of FILE_ID.ZIP or README.TXT |
|
||||
if it exists |
|
||||
*/ |
|
||||
|
|
||||
|
|
||||
/* change_file_date : change the date/time of a file
|
|
||||
filename : the filename of the file where date/time must be modified |
|
||||
dosdate : the new date at the MSDos format (4 bytes) |
|
||||
tmu_date : the SAME new date at the tm_unz format */ |
|
||||
void change_file_date(filename,dosdate,tmu_date) |
|
||||
const char *filename; |
|
||||
uLong dosdate; |
|
||||
tm_unz tmu_date; |
|
||||
{ |
|
||||
#ifdef _WIN32 |
|
||||
HANDLE hFile; |
|
||||
FILETIME ftm,ftLocal,ftCreate,ftLastAcc,ftLastWrite; |
|
||||
|
|
||||
hFile = CreateFileA(filename,GENERIC_READ | GENERIC_WRITE, |
|
||||
0,NULL,OPEN_EXISTING,0,NULL); |
|
||||
GetFileTime(hFile,&ftCreate,&ftLastAcc,&ftLastWrite); |
|
||||
DosDateTimeToFileTime((WORD)(dosdate>>16),(WORD)dosdate,&ftLocal); |
|
||||
LocalFileTimeToFileTime(&ftLocal,&ftm); |
|
||||
SetFileTime(hFile,&ftm,&ftLastAcc,&ftm); |
|
||||
CloseHandle(hFile); |
|
||||
#else |
|
||||
#ifdef unix |
|
||||
struct utimbuf ut; |
|
||||
struct tm newdate; |
|
||||
newdate.tm_sec = tmu_date.tm_sec; |
|
||||
newdate.tm_min=tmu_date.tm_min; |
|
||||
newdate.tm_hour=tmu_date.tm_hour; |
|
||||
newdate.tm_mday=tmu_date.tm_mday; |
|
||||
newdate.tm_mon=tmu_date.tm_mon; |
|
||||
if (tmu_date.tm_year > 1900) |
|
||||
newdate.tm_year=tmu_date.tm_year - 1900; |
|
||||
else |
|
||||
newdate.tm_year=tmu_date.tm_year ; |
|
||||
newdate.tm_isdst=-1; |
|
||||
|
|
||||
ut.actime=ut.modtime=mktime(&newdate); |
|
||||
utime(filename,&ut); |
|
||||
#endif |
|
||||
#endif |
|
||||
} |
|
||||
|
|
||||
|
|
||||
/* mymkdir and change_file_date are not 100 % portable
|
|
||||
As I don't know well Unix, I wait feedback for the unix portion */ |
|
||||
|
|
||||
int mymkdir(dirname) |
|
||||
const char* dirname; |
|
||||
{ |
|
||||
int ret=0; |
|
||||
#ifdef _WIN32 |
|
||||
ret = _mkdir(dirname); |
|
||||
#else |
|
||||
#ifdef unix |
|
||||
ret = mkdir (dirname,0775); |
|
||||
#endif |
|
||||
#endif |
|
||||
return ret; |
|
||||
} |
|
||||
|
|
||||
int makedir (newdir) |
|
||||
char *newdir; |
|
||||
{ |
|
||||
char *buffer ; |
|
||||
char *p; |
|
||||
int len = (int)strlen(newdir); |
|
||||
|
|
||||
if (len <= 0) |
|
||||
return 0; |
|
||||
|
|
||||
buffer = (char*)malloc(len+1); |
|
||||
if (buffer==NULL) |
|
||||
{ |
|
||||
printf("Error allocating memory\n"); |
|
||||
return UNZ_INTERNALERROR; |
|
||||
} |
|
||||
strcpy(buffer,newdir); |
|
||||
|
|
||||
if (buffer[len-1] == '/') { |
|
||||
buffer[len-1] = '\0'; |
|
||||
} |
|
||||
if (mymkdir(buffer) == 0) |
|
||||
{ |
|
||||
free(buffer); |
|
||||
return 1; |
|
||||
} |
|
||||
|
|
||||
p = buffer+1; |
|
||||
while (1) |
|
||||
{ |
|
||||
char hold; |
|
||||
|
|
||||
while(*p && *p != '\\' && *p != '/') |
|
||||
p++; |
|
||||
hold = *p; |
|
||||
*p = 0; |
|
||||
if ((mymkdir(buffer) == -1) && (errno == ENOENT)) |
|
||||
{ |
|
||||
printf("couldn't create directory %s\n",buffer); |
|
||||
free(buffer); |
|
||||
return 0; |
|
||||
} |
|
||||
if (hold == 0) |
|
||||
break; |
|
||||
*p++ = hold; |
|
||||
} |
|
||||
free(buffer); |
|
||||
return 1; |
|
||||
} |
|
||||
|
|
||||
void do_banner() |
|
||||
{ |
|
||||
printf("MiniUnz 1.01b, demo of zLib + Unz package written by Gilles Vollant\n"); |
|
||||
printf("more info at http://www.winimage.com/zLibDll/unzip.html\n\n"); |
|
||||
} |
|
||||
|
|
||||
void do_help() |
|
||||
{ |
|
||||
printf("Usage : miniunz [-e] [-x] [-v] [-l] [-o] [-p password] file.zip [file_to_extr.] [-d extractdir]\n\n" \ |
|
||||
" -e Extract without pathname (junk paths)\n" \ |
|
||||
" -x Extract with pathname\n" \ |
|
||||
" -v list files\n" \ |
|
||||
" -l list files\n" \ |
|
||||
" -d directory to extract into\n" \ |
|
||||
" -o overwrite files without prompting\n" \ |
|
||||
" -p extract crypted file using password\n\n"); |
|
||||
} |
|
||||
|
|
||||
void Display64BitsSize(ZPOS64_T n, int size_char) |
|
||||
{ |
|
||||
/* to avoid compatibility problem , we do here the conversion */ |
|
||||
char number[21]; |
|
||||
int offset=19; |
|
||||
int pos_string = 19; |
|
||||
number[20]=0; |
|
||||
for (;;) { |
|
||||
number[offset]=(char)((n%10)+'0'); |
|
||||
if (number[offset] != '0') |
|
||||
pos_string=offset; |
|
||||
n/=10; |
|
||||
if (offset==0) |
|
||||
break; |
|
||||
offset--; |
|
||||
} |
|
||||
{ |
|
||||
int size_display_string = 19-pos_string; |
|
||||
while (size_char > size_display_string) |
|
||||
{ |
|
||||
size_char--; |
|
||||
printf(" "); |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
printf("%s",&number[pos_string]); |
|
||||
} |
|
||||
|
|
||||
int do_list(uf) |
|
||||
unzFile uf; |
|
||||
{ |
|
||||
uLong i; |
|
||||
unz_global_info64 gi; |
|
||||
int err; |
|
||||
|
|
||||
err = unzGetGlobalInfo64(uf,&gi); |
|
||||
if (err!=UNZ_OK) |
|
||||
printf("error %d with zipfile in unzGetGlobalInfo \n",err); |
|
||||
printf(" Length Method Size Ratio Date Time CRC-32 Name\n"); |
|
||||
printf(" ------ ------ ---- ----- ---- ---- ------ ----\n"); |
|
||||
for (i=0;i<gi.number_entry;i++) |
|
||||
{ |
|
||||
char filename_inzip[256]; |
|
||||
unz_file_info64 file_info; |
|
||||
uLong ratio=0; |
|
||||
const char *string_method; |
|
||||
char charCrypt=' '; |
|
||||
err = unzGetCurrentFileInfo64(uf,&file_info,filename_inzip,sizeof(filename_inzip),NULL,0,NULL,0); |
|
||||
if (err!=UNZ_OK) |
|
||||
{ |
|
||||
printf("error %d with zipfile in unzGetCurrentFileInfo\n",err); |
|
||||
break; |
|
||||
} |
|
||||
if (file_info.uncompressed_size>0) |
|
||||
ratio = (uLong)((file_info.compressed_size*100)/file_info.uncompressed_size); |
|
||||
|
|
||||
/* display a '*' if the file is crypted */ |
|
||||
if ((file_info.flag & 1) != 0) |
|
||||
charCrypt='*'; |
|
||||
|
|
||||
if (file_info.compression_method==0) |
|
||||
string_method="Stored"; |
|
||||
else |
|
||||
if (file_info.compression_method==Z_DEFLATED) |
|
||||
{ |
|
||||
uInt iLevel=(uInt)((file_info.flag & 0x6)/2); |
|
||||
if (iLevel==0) |
|
||||
string_method="Defl:N"; |
|
||||
else if (iLevel==1) |
|
||||
string_method="Defl:X"; |
|
||||
else if ((iLevel==2) || (iLevel==3)) |
|
||||
string_method="Defl:F"; /* 2:fast , 3 : extra fast*/ |
|
||||
} |
|
||||
else |
|
||||
if (file_info.compression_method==Z_BZIP2ED) |
|
||||
{ |
|
||||
string_method="BZip2 "; |
|
||||
} |
|
||||
else |
|
||||
string_method="Unkn. "; |
|
||||
|
|
||||
Display64BitsSize(file_info.uncompressed_size,7); |
|
||||
printf(" %6s%c",string_method,charCrypt); |
|
||||
Display64BitsSize(file_info.compressed_size,7); |
|
||||
printf(" %3lu%% %2.2lu-%2.2lu-%2.2lu %2.2lu:%2.2lu %8.8lx %s\n", |
|
||||
ratio, |
|
||||
(uLong)file_info.tmu_date.tm_mon + 1, |
|
||||
(uLong)file_info.tmu_date.tm_mday, |
|
||||
(uLong)file_info.tmu_date.tm_year % 100, |
|
||||
(uLong)file_info.tmu_date.tm_hour,(uLong)file_info.tmu_date.tm_min, |
|
||||
(uLong)file_info.crc,filename_inzip); |
|
||||
if ((i+1)<gi.number_entry) |
|
||||
{ |
|
||||
err = unzGoToNextFile(uf); |
|
||||
if (err!=UNZ_OK) |
|
||||
{ |
|
||||
printf("error %d with zipfile in unzGoToNextFile\n",err); |
|
||||
break; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
return 0; |
|
||||
} |
|
||||
|
|
||||
|
|
||||
int do_extract_currentfile(uf,popt_extract_without_path,popt_overwrite,password) |
|
||||
unzFile uf; |
|
||||
const int* popt_extract_without_path; |
|
||||
int* popt_overwrite; |
|
||||
const char* password; |
|
||||
{ |
|
||||
char filename_inzip[256]; |
|
||||
char* filename_withoutpath; |
|
||||
char* p; |
|
||||
int err=UNZ_OK; |
|
||||
FILE *fout=NULL; |
|
||||
void* buf; |
|
||||
uInt size_buf; |
|
||||
|
|
||||
unz_file_info64 file_info; |
|
||||
uLong ratio=0; |
|
||||
err = unzGetCurrentFileInfo64(uf,&file_info,filename_inzip,sizeof(filename_inzip),NULL,0,NULL,0); |
|
||||
|
|
||||
if (err!=UNZ_OK) |
|
||||
{ |
|
||||
printf("error %d with zipfile in unzGetCurrentFileInfo\n",err); |
|
||||
return err; |
|
||||
} |
|
||||
|
|
||||
size_buf = WRITEBUFFERSIZE; |
|
||||
buf = (void*)malloc(size_buf); |
|
||||
if (buf==NULL) |
|
||||
{ |
|
||||
printf("Error allocating memory\n"); |
|
||||
return UNZ_INTERNALERROR; |
|
||||
} |
|
||||
|
|
||||
p = filename_withoutpath = filename_inzip; |
|
||||
while ((*p) != '\0') |
|
||||
{ |
|
||||
if (((*p)=='/') || ((*p)=='\\')) |
|
||||
filename_withoutpath = p+1; |
|
||||
p++; |
|
||||
} |
|
||||
|
|
||||
if ((*filename_withoutpath)=='\0') |
|
||||
{ |
|
||||
if ((*popt_extract_without_path)==0) |
|
||||
{ |
|
||||
printf("creating directory: %s\n",filename_inzip); |
|
||||
mymkdir(filename_inzip); |
|
||||
} |
|
||||
} |
|
||||
else |
|
||||
{ |
|
||||
const char* write_filename; |
|
||||
int skip=0; |
|
||||
|
|
||||
if ((*popt_extract_without_path)==0) |
|
||||
write_filename = filename_inzip; |
|
||||
else |
|
||||
write_filename = filename_withoutpath; |
|
||||
|
|
||||
err = unzOpenCurrentFilePassword(uf,password); |
|
||||
if (err!=UNZ_OK) |
|
||||
{ |
|
||||
printf("error %d with zipfile in unzOpenCurrentFilePassword\n",err); |
|
||||
} |
|
||||
|
|
||||
if (((*popt_overwrite)==0) && (err==UNZ_OK)) |
|
||||
{ |
|
||||
char rep=0; |
|
||||
FILE* ftestexist; |
|
||||
ftestexist = fopen64(write_filename,"rb"); |
|
||||
if (ftestexist!=NULL) |
|
||||
{ |
|
||||
fclose(ftestexist); |
|
||||
do |
|
||||
{ |
|
||||
char answer[128]; |
|
||||
int ret; |
|
||||
|
|
||||
printf("The file %s exists. Overwrite ? [y]es, [n]o, [A]ll: ",write_filename); |
|
||||
ret = scanf("%1s",answer); |
|
||||
if (ret != 1) |
|
||||
{ |
|
||||
exit(EXIT_FAILURE); |
|
||||
} |
|
||||
rep = answer[0] ; |
|
||||
if ((rep>='a') && (rep<='z')) |
|
||||
rep -= 0x20; |
|
||||
} |
|
||||
while ((rep!='Y') && (rep!='N') && (rep!='A')); |
|
||||
} |
|
||||
|
|
||||
if (rep == 'N') |
|
||||
skip = 1; |
|
||||
|
|
||||
if (rep == 'A') |
|
||||
*popt_overwrite=1; |
|
||||
} |
|
||||
|
|
||||
if ((skip==0) && (err==UNZ_OK)) |
|
||||
{ |
|
||||
fout=fopen64(write_filename,"wb"); |
|
||||
|
|
||||
/* some zipfile don't contain directory alone before file */ |
|
||||
if ((fout==NULL) && ((*popt_extract_without_path)==0) && |
|
||||
(filename_withoutpath!=(char*)filename_inzip)) |
|
||||
{ |
|
||||
char c=*(filename_withoutpath-1); |
|
||||
*(filename_withoutpath-1)='\0'; |
|
||||
makedir(write_filename); |
|
||||
*(filename_withoutpath-1)=c; |
|
||||
fout=fopen64(write_filename,"wb"); |
|
||||
} |
|
||||
|
|
||||
if (fout==NULL) |
|
||||
{ |
|
||||
printf("error opening %s\n",write_filename); |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
if (fout!=NULL) |
|
||||
{ |
|
||||
printf(" extracting: %s\n",write_filename); |
|
||||
|
|
||||
do |
|
||||
{ |
|
||||
err = unzReadCurrentFile(uf,buf,size_buf); |
|
||||
if (err<0) |
|
||||
{ |
|
||||
printf("error %d with zipfile in unzReadCurrentFile\n",err); |
|
||||
break; |
|
||||
} |
|
||||
if (err>0) |
|
||||
if (fwrite(buf,err,1,fout)!=1) |
|
||||
{ |
|
||||
printf("error in writing extracted file\n"); |
|
||||
err=UNZ_ERRNO; |
|
||||
break; |
|
||||
} |
|
||||
} |
|
||||
while (err>0); |
|
||||
if (fout) |
|
||||
fclose(fout); |
|
||||
|
|
||||
if (err==0) |
|
||||
change_file_date(write_filename,file_info.dosDate, |
|
||||
file_info.tmu_date); |
|
||||
} |
|
||||
|
|
||||
if (err==UNZ_OK) |
|
||||
{ |
|
||||
err = unzCloseCurrentFile (uf); |
|
||||
if (err!=UNZ_OK) |
|
||||
{ |
|
||||
printf("error %d with zipfile in unzCloseCurrentFile\n",err); |
|
||||
} |
|
||||
} |
|
||||
else |
|
||||
unzCloseCurrentFile(uf); /* don't lose the error */ |
|
||||
} |
|
||||
|
|
||||
free(buf); |
|
||||
return err; |
|
||||
} |
|
||||
|
|
||||
|
|
||||
int do_extract(uf,opt_extract_without_path,opt_overwrite,password) |
|
||||
unzFile uf; |
|
||||
int opt_extract_without_path; |
|
||||
int opt_overwrite; |
|
||||
const char* password; |
|
||||
{ |
|
||||
uLong i; |
|
||||
unz_global_info64 gi; |
|
||||
int err; |
|
||||
FILE* fout=NULL; |
|
||||
|
|
||||
err = unzGetGlobalInfo64(uf,&gi); |
|
||||
if (err!=UNZ_OK) |
|
||||
printf("error %d with zipfile in unzGetGlobalInfo \n",err); |
|
||||
|
|
||||
for (i=0;i<gi.number_entry;i++) |
|
||||
{ |
|
||||
if (do_extract_currentfile(uf,&opt_extract_without_path, |
|
||||
&opt_overwrite, |
|
||||
password) != UNZ_OK) |
|
||||
break; |
|
||||
|
|
||||
if ((i+1)<gi.number_entry) |
|
||||
{ |
|
||||
err = unzGoToNextFile(uf); |
|
||||
if (err!=UNZ_OK) |
|
||||
{ |
|
||||
printf("error %d with zipfile in unzGoToNextFile\n",err); |
|
||||
break; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
return 0; |
|
||||
} |
|
||||
|
|
||||
int do_extract_onefile(uf,filename,opt_extract_without_path,opt_overwrite,password) |
|
||||
unzFile uf; |
|
||||
const char* filename; |
|
||||
int opt_extract_without_path; |
|
||||
int opt_overwrite; |
|
||||
const char* password; |
|
||||
{ |
|
||||
int err = UNZ_OK; |
|
||||
if (unzLocateFile(uf,filename,CASESENSITIVITY)!=UNZ_OK) |
|
||||
{ |
|
||||
printf("file %s not found in the zipfile\n",filename); |
|
||||
return 2; |
|
||||
} |
|
||||
|
|
||||
if (do_extract_currentfile(uf,&opt_extract_without_path, |
|
||||
&opt_overwrite, |
|
||||
password) == UNZ_OK) |
|
||||
return 0; |
|
||||
else |
|
||||
return 1; |
|
||||
} |
|
||||
|
|
||||
|
|
||||
int main(argc,argv) |
|
||||
int argc; |
|
||||
char *argv[]; |
|
||||
{ |
|
||||
const char *zipfilename=NULL; |
|
||||
const char *filename_to_extract=NULL; |
|
||||
const char *password=NULL; |
|
||||
char filename_try[MAXFILENAME+16] = ""; |
|
||||
int i; |
|
||||
int ret_value=0; |
|
||||
int opt_do_list=0; |
|
||||
int opt_do_extract=1; |
|
||||
int opt_do_extract_withoutpath=0; |
|
||||
int opt_overwrite=0; |
|
||||
int opt_extractdir=0; |
|
||||
const char *dirname=NULL; |
|
||||
unzFile uf=NULL; |
|
||||
|
|
||||
do_banner(); |
|
||||
if (argc==1) |
|
||||
{ |
|
||||
do_help(); |
|
||||
return 0; |
|
||||
} |
|
||||
else |
|
||||
{ |
|
||||
for (i=1;i<argc;i++) |
|
||||
{ |
|
||||
if ((*argv[i])=='-') |
|
||||
{ |
|
||||
const char *p=argv[i]+1; |
|
||||
|
|
||||
while ((*p)!='\0') |
|
||||
{ |
|
||||
char c=*(p++);; |
|
||||
if ((c=='l') || (c=='L')) |
|
||||
opt_do_list = 1; |
|
||||
if ((c=='v') || (c=='V')) |
|
||||
opt_do_list = 1; |
|
||||
if ((c=='x') || (c=='X')) |
|
||||
opt_do_extract = 1; |
|
||||
if ((c=='e') || (c=='E')) |
|
||||
opt_do_extract = opt_do_extract_withoutpath = 1; |
|
||||
if ((c=='o') || (c=='O')) |
|
||||
opt_overwrite=1; |
|
||||
if ((c=='d') || (c=='D')) |
|
||||
{ |
|
||||
opt_extractdir=1; |
|
||||
dirname=argv[i+1]; |
|
||||
} |
|
||||
|
|
||||
if (((c=='p') || (c=='P')) && (i+1<argc)) |
|
||||
{ |
|
||||
password=argv[i+1]; |
|
||||
i++; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
else |
|
||||
{ |
|
||||
if (zipfilename == NULL) |
|
||||
zipfilename = argv[i]; |
|
||||
else if ((filename_to_extract==NULL) && (!opt_extractdir)) |
|
||||
filename_to_extract = argv[i] ; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
if (zipfilename!=NULL) |
|
||||
{ |
|
||||
|
|
||||
# ifdef USEWIN32IOAPI |
|
||||
zlib_filefunc64_def ffunc; |
|
||||
# endif |
|
||||
|
|
||||
strncpy(filename_try, zipfilename,MAXFILENAME-1); |
|
||||
/* strncpy doesnt append the trailing NULL, of the string is too long. */ |
|
||||
filename_try[ MAXFILENAME ] = '\0'; |
|
||||
|
|
||||
# ifdef USEWIN32IOAPI |
|
||||
fill_win32_filefunc64A(&ffunc); |
|
||||
uf = unzOpen2_64(zipfilename,&ffunc); |
|
||||
# else |
|
||||
uf = unzOpen64(zipfilename); |
|
||||
# endif |
|
||||
if (uf==NULL) |
|
||||
{ |
|
||||
strcat(filename_try,".zip"); |
|
||||
# ifdef USEWIN32IOAPI |
|
||||
uf = unzOpen2_64(filename_try,&ffunc); |
|
||||
# else |
|
||||
uf = unzOpen64(filename_try); |
|
||||
# endif |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
if (uf==NULL) |
|
||||
{ |
|
||||
printf("Cannot open %s or %s.zip\n",zipfilename,zipfilename); |
|
||||
return 1; |
|
||||
} |
|
||||
printf("%s opened\n",filename_try); |
|
||||
|
|
||||
if (opt_do_list==1) |
|
||||
ret_value = do_list(uf); |
|
||||
else if (opt_do_extract==1) |
|
||||
{ |
|
||||
#ifdef _WIN32 |
|
||||
if (opt_extractdir && _chdir(dirname)) |
|
||||
#else |
|
||||
if (opt_extractdir && chdir(dirname)) |
|
||||
#endif |
|
||||
{ |
|
||||
printf("Error changing into %s, aborting\n", dirname); |
|
||||
exit(-1); |
|
||||
} |
|
||||
|
|
||||
if (filename_to_extract == NULL) |
|
||||
ret_value = do_extract(uf, opt_do_extract_withoutpath, opt_overwrite, password); |
|
||||
else |
|
||||
ret_value = do_extract_onefile(uf, filename_to_extract, opt_do_extract_withoutpath, opt_overwrite, password); |
|
||||
} |
|
||||
|
|
||||
unzClose(uf); |
|
||||
|
|
||||
return ret_value; |
|
||||
} |
|
@ -1,507 +0,0 @@ |
|||||
/*
|
|
||||
minizip.c |
|
||||
Version 1.1, February 14h, 2010 |
|
||||
sample part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )
|
|
||||
|
|
||||
Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )
|
|
||||
|
|
||||
Modifications of Unzip for Zip64 |
|
||||
Copyright (C) 2007-2008 Even Rouault |
|
||||
|
|
||||
Modifications for Zip64 support on both zip and unzip |
|
||||
Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )
|
|
||||
*/ |
|
||||
|
|
||||
|
|
||||
#ifndef _WIN32 |
|
||||
#ifndef __USE_FILE_OFFSET64 |
|
||||
#define __USE_FILE_OFFSET64 |
|
||||
#endif |
|
||||
#ifndef __USE_LARGEFILE64 |
|
||||
#define __USE_LARGEFILE64 |
|
||||
#endif |
|
||||
#ifndef _LARGEFILE64_SOURCE |
|
||||
#define _LARGEFILE64_SOURCE |
|
||||
#endif |
|
||||
#ifndef _FILE_OFFSET_BIT |
|
||||
#define _FILE_OFFSET_BIT 64 |
|
||||
#endif |
|
||||
#endif |
|
||||
|
|
||||
#include <stdio.h> |
|
||||
#include <stdlib.h> |
|
||||
#include <string.h> |
|
||||
#include <time.h> |
|
||||
#include <errno.h> |
|
||||
#include <fcntl.h> |
|
||||
|
|
||||
#ifdef unix |
|
||||
# include <unistd.h> |
|
||||
# include <utime.h> |
|
||||
# include <sys/types.h> |
|
||||
# include <sys/stat.h> |
|
||||
#else |
|
||||
# include <direct.h> |
|
||||
# include <io.h> |
|
||||
#endif |
|
||||
|
|
||||
#include "zip.h" |
|
||||
|
|
||||
#ifdef _WIN32 |
|
||||
#define USEWIN32IOAPI |
|
||||
#include "iowin32.h" |
|
||||
#endif |
|
||||
|
|
||||
|
|
||||
|
|
||||
#define WRITEBUFFERSIZE (16384) |
|
||||
#define MAXFILENAME (256) |
|
||||
|
|
||||
#ifdef _WIN32 |
|
||||
uLong filetime(f, tmzip, dt) |
|
||||
char *f; /* name of file to get info on */ |
|
||||
tm_zip *tmzip; /* return value: access, modific. and creation times */ |
|
||||
uLong *dt; /* dostime */ |
|
||||
{ |
|
||||
int ret = 0; |
|
||||
{ |
|
||||
FILETIME ftLocal; |
|
||||
HANDLE hFind; |
|
||||
WIN32_FIND_DATAA ff32; |
|
||||
|
|
||||
hFind = FindFirstFileA(f,&ff32); |
|
||||
if (hFind != INVALID_HANDLE_VALUE) |
|
||||
{ |
|
||||
FileTimeToLocalFileTime(&(ff32.ftLastWriteTime),&ftLocal); |
|
||||
FileTimeToDosDateTime(&ftLocal,((LPWORD)dt)+1,((LPWORD)dt)+0); |
|
||||
FindClose(hFind); |
|
||||
ret = 1; |
|
||||
} |
|
||||
} |
|
||||
return ret; |
|
||||
} |
|
||||
#else |
|
||||
#ifdef unix |
|
||||
uLong filetime(f, tmzip, dt) |
|
||||
char *f; /* name of file to get info on */ |
|
||||
tm_zip *tmzip; /* return value: access, modific. and creation times */ |
|
||||
uLong *dt; /* dostime */ |
|
||||
{ |
|
||||
int ret=0; |
|
||||
struct stat s; /* results of stat() */ |
|
||||
struct tm* filedate; |
|
||||
time_t tm_t=0; |
|
||||
|
|
||||
if (strcmp(f,"-")!=0) |
|
||||
{ |
|
||||
char name[MAXFILENAME+1]; |
|
||||
int len = strlen(f); |
|
||||
if (len > MAXFILENAME) |
|
||||
len = MAXFILENAME; |
|
||||
|
|
||||
strncpy(name, f,MAXFILENAME-1); |
|
||||
/* strncpy doesnt append the trailing NULL, of the string is too long. */ |
|
||||
name[ MAXFILENAME ] = '\0'; |
|
||||
|
|
||||
if (name[len - 1] == '/') |
|
||||
name[len - 1] = '\0'; |
|
||||
/* not all systems allow stat'ing a file with / appended */ |
|
||||
if (stat(name,&s)==0) |
|
||||
{ |
|
||||
tm_t = s.st_mtime; |
|
||||
ret = 1; |
|
||||
} |
|
||||
} |
|
||||
filedate = localtime(&tm_t); |
|
||||
|
|
||||
tmzip->tm_sec = filedate->tm_sec; |
|
||||
tmzip->tm_min = filedate->tm_min; |
|
||||
tmzip->tm_hour = filedate->tm_hour; |
|
||||
tmzip->tm_mday = filedate->tm_mday; |
|
||||
tmzip->tm_mon = filedate->tm_mon ; |
|
||||
tmzip->tm_year = filedate->tm_year; |
|
||||
|
|
||||
return ret; |
|
||||
} |
|
||||
#else |
|
||||
uLong filetime(f, tmzip, dt) |
|
||||
char *f; /* name of file to get info on */ |
|
||||
tm_zip *tmzip; /* return value: access, modific. and creation times */ |
|
||||
uLong *dt; /* dostime */ |
|
||||
{ |
|
||||
return 0; |
|
||||
} |
|
||||
#endif |
|
||||
#endif |
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
int check_exist_file(filename) |
|
||||
const char* filename; |
|
||||
{ |
|
||||
FILE* ftestexist; |
|
||||
int ret = 1; |
|
||||
ftestexist = fopen64(filename,"rb"); |
|
||||
if (ftestexist==NULL) |
|
||||
ret = 0; |
|
||||
else |
|
||||
fclose(ftestexist); |
|
||||
return ret; |
|
||||
} |
|
||||
|
|
||||
void do_banner() |
|
||||
{ |
|
||||
printf("MiniZip 1.1, demo of zLib + MiniZip64 package, written by Gilles Vollant\n"); |
|
||||
printf("more info on MiniZip at http://www.winimage.com/zLibDll/minizip.html\n\n"); |
|
||||
} |
|
||||
|
|
||||
void do_help() |
|
||||
{ |
|
||||
printf("Usage : minizip [-o] [-a] [-0 to -9] [-p password] [-j] file.zip [files_to_add]\n\n" \ |
|
||||
" -o Overwrite existing file.zip\n" \ |
|
||||
" -a Append to existing file.zip\n" \ |
|
||||
" -0 Store only\n" \ |
|
||||
" -1 Compress faster\n" \ |
|
||||
" -9 Compress better\n\n" \ |
|
||||
" -j exclude path. store only the file name.\n\n"); |
|
||||
} |
|
||||
|
|
||||
/* calculate the CRC32 of a file,
|
|
||||
because to encrypt a file, we need known the CRC32 of the file before */ |
|
||||
int getFileCrc(const char* filenameinzip,void*buf,unsigned long size_buf,unsigned long* result_crc) |
|
||||
{ |
|
||||
unsigned long calculate_crc=0; |
|
||||
int err=ZIP_OK; |
|
||||
FILE * fin = fopen64(filenameinzip,"rb"); |
|
||||
unsigned long size_read = 0; |
|
||||
unsigned long total_read = 0; |
|
||||
if (fin==NULL) |
|
||||
{ |
|
||||
err = ZIP_ERRNO; |
|
||||
} |
|
||||
|
|
||||
if (err == ZIP_OK) |
|
||||
do |
|
||||
{ |
|
||||
err = ZIP_OK; |
|
||||
size_read = (int)fread(buf,1,size_buf,fin); |
|
||||
if (size_read < size_buf) |
|
||||
if (feof(fin)==0) |
|
||||
{ |
|
||||
printf("error in reading %s\n",filenameinzip); |
|
||||
err = ZIP_ERRNO; |
|
||||
} |
|
||||
|
|
||||
if (size_read>0) |
|
||||
calculate_crc = crc32(calculate_crc,buf,size_read); |
|
||||
total_read += size_read; |
|
||||
|
|
||||
} while ((err == ZIP_OK) && (size_read>0)); |
|
||||
|
|
||||
if (fin) |
|
||||
fclose(fin); |
|
||||
|
|
||||
*result_crc=calculate_crc; |
|
||||
printf("file %s crc %lx\n", filenameinzip, calculate_crc); |
|
||||
return err; |
|
||||
} |
|
||||
|
|
||||
int isLargeFile(const char* filename) |
|
||||
{ |
|
||||
int largeFile = 0; |
|
||||
ZPOS64_T pos = 0; |
|
||||
FILE* pFile = fopen64(filename, "rb"); |
|
||||
|
|
||||
if(pFile != NULL) |
|
||||
{ |
|
||||
int n = fseeko64(pFile, 0, SEEK_END); |
|
||||
|
|
||||
pos = ftello64(pFile); |
|
||||
|
|
||||
printf("File : %s is %lld bytes\n", filename, pos); |
|
||||
|
|
||||
if(pos >= 0xffffffff) |
|
||||
largeFile = 1; |
|
||||
|
|
||||
fclose(pFile); |
|
||||
} |
|
||||
|
|
||||
return largeFile; |
|
||||
} |
|
||||
|
|
||||
int main(argc,argv) |
|
||||
int argc; |
|
||||
char *argv[]; |
|
||||
{ |
|
||||
int i; |
|
||||
int opt_overwrite=0; |
|
||||
int opt_compress_level=Z_DEFAULT_COMPRESSION; |
|
||||
int opt_exclude_path=0; |
|
||||
int zipfilenamearg = 0; |
|
||||
char filename_try[MAXFILENAME+16]; |
|
||||
int zipok; |
|
||||
int err=0; |
|
||||
int size_buf=0; |
|
||||
void* buf=NULL; |
|
||||
const char* password=NULL; |
|
||||
|
|
||||
|
|
||||
do_banner(); |
|
||||
if (argc==1) |
|
||||
{ |
|
||||
do_help(); |
|
||||
return 0; |
|
||||
} |
|
||||
else |
|
||||
{ |
|
||||
for (i=1;i<argc;i++) |
|
||||
{ |
|
||||
if ((*argv[i])=='-') |
|
||||
{ |
|
||||
const char *p=argv[i]+1; |
|
||||
|
|
||||
while ((*p)!='\0') |
|
||||
{ |
|
||||
char c=*(p++);; |
|
||||
if ((c=='o') || (c=='O')) |
|
||||
opt_overwrite = 1; |
|
||||
if ((c=='a') || (c=='A')) |
|
||||
opt_overwrite = 2; |
|
||||
if ((c>='0') && (c<='9')) |
|
||||
opt_compress_level = c-'0'; |
|
||||
if ((c=='j') || (c=='J')) |
|
||||
opt_exclude_path = 1; |
|
||||
|
|
||||
if (((c=='p') || (c=='P')) && (i+1<argc)) |
|
||||
{ |
|
||||
password=argv[i+1]; |
|
||||
i++; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
else |
|
||||
{ |
|
||||
if (zipfilenamearg == 0) |
|
||||
{ |
|
||||
zipfilenamearg = i ; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
size_buf = WRITEBUFFERSIZE; |
|
||||
buf = (void*)malloc(size_buf); |
|
||||
if (buf==NULL) |
|
||||
{ |
|
||||
printf("Error allocating memory\n"); |
|
||||
return ZIP_INTERNALERROR; |
|
||||
} |
|
||||
|
|
||||
if (zipfilenamearg==0) |
|
||||
{ |
|
||||
zipok=0; |
|
||||
} |
|
||||
else |
|
||||
{ |
|
||||
int i,len; |
|
||||
int dot_found=0; |
|
||||
|
|
||||
zipok = 1 ; |
|
||||
strncpy(filename_try, argv[zipfilenamearg],MAXFILENAME-1); |
|
||||
/* strncpy doesnt append the trailing NULL, of the string is too long. */ |
|
||||
filename_try[ MAXFILENAME ] = '\0'; |
|
||||
|
|
||||
len=(int)strlen(filename_try); |
|
||||
for (i=0;i<len;i++) |
|
||||
if (filename_try[i]=='.') |
|
||||
dot_found=1; |
|
||||
|
|
||||
if (dot_found==0) |
|
||||
strcat(filename_try,".zip"); |
|
||||
|
|
||||
if (opt_overwrite==2) |
|
||||
{ |
|
||||
/* if the file don't exist, we not append file */ |
|
||||
if (check_exist_file(filename_try)==0) |
|
||||
opt_overwrite=1; |
|
||||
} |
|
||||
else |
|
||||
if (opt_overwrite==0) |
|
||||
if (check_exist_file(filename_try)!=0) |
|
||||
{ |
|
||||
char rep=0; |
|
||||
do |
|
||||
{ |
|
||||
char answer[128]; |
|
||||
int ret; |
|
||||
printf("The file %s exists. Overwrite ? [y]es, [n]o, [a]ppend : ",filename_try); |
|
||||
ret = scanf("%1s",answer); |
|
||||
if (ret != 1) |
|
||||
{ |
|
||||
exit(EXIT_FAILURE); |
|
||||
} |
|
||||
rep = answer[0] ; |
|
||||
if ((rep>='a') && (rep<='z')) |
|
||||
rep -= 0x20; |
|
||||
} |
|
||||
while ((rep!='Y') && (rep!='N') && (rep!='A')); |
|
||||
if (rep=='N') |
|
||||
zipok = 0; |
|
||||
if (rep=='A') |
|
||||
opt_overwrite = 2; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
if (zipok==1) |
|
||||
{ |
|
||||
zipFile zf; |
|
||||
int errclose; |
|
||||
# ifdef USEWIN32IOAPI |
|
||||
zlib_filefunc64_def ffunc; |
|
||||
fill_win32_filefunc64A(&ffunc); |
|
||||
zf = zipOpen2_64(filename_try,(opt_overwrite==2) ? 2 : 0,NULL,&ffunc); |
|
||||
# else |
|
||||
zf = zipOpen64(filename_try,(opt_overwrite==2) ? 2 : 0); |
|
||||
# endif |
|
||||
|
|
||||
if (zf == NULL) |
|
||||
{ |
|
||||
printf("error opening %s\n",filename_try); |
|
||||
err= ZIP_ERRNO; |
|
||||
} |
|
||||
else |
|
||||
printf("creating %s\n",filename_try); |
|
||||
|
|
||||
for (i=zipfilenamearg+1;(i<argc) && (err==ZIP_OK);i++) |
|
||||
{ |
|
||||
if (!((((*(argv[i]))=='-') || ((*(argv[i]))=='/')) && |
|
||||
((argv[i][1]=='o') || (argv[i][1]=='O') || |
|
||||
(argv[i][1]=='a') || (argv[i][1]=='A') || |
|
||||
(argv[i][1]=='p') || (argv[i][1]=='P') || |
|
||||
((argv[i][1]>='0') || (argv[i][1]<='9'))) && |
|
||||
(strlen(argv[i]) == 2))) |
|
||||
{ |
|
||||
FILE * fin; |
|
||||
int size_read; |
|
||||
const char* filenameinzip = argv[i]; |
|
||||
const char *savefilenameinzip; |
|
||||
zip_fileinfo zi; |
|
||||
unsigned long crcFile=0; |
|
||||
int zip64 = 0; |
|
||||
|
|
||||
zi.tmz_date.tm_sec = zi.tmz_date.tm_min = zi.tmz_date.tm_hour = |
|
||||
zi.tmz_date.tm_mday = zi.tmz_date.tm_mon = zi.tmz_date.tm_year = 0; |
|
||||
zi.dosDate = 0; |
|
||||
zi.internal_fa = 0; |
|
||||
zi.external_fa = 0; |
|
||||
filetime(filenameinzip,&zi.tmz_date,&zi.dosDate); |
|
||||
|
|
||||
/*
|
|
||||
err = zipOpenNewFileInZip(zf,filenameinzip,&zi, |
|
||||
NULL,0,NULL,0,NULL / * comment * /, |
|
||||
(opt_compress_level != 0) ? Z_DEFLATED : 0, |
|
||||
opt_compress_level); |
|
||||
*/ |
|
||||
if ((password != NULL) && (err==ZIP_OK)) |
|
||||
err = getFileCrc(filenameinzip,buf,size_buf,&crcFile); |
|
||||
|
|
||||
zip64 = isLargeFile(filenameinzip); |
|
||||
|
|
||||
/* The path name saved, should not include a leading slash. */ |
|
||||
/*if it did, windows/xp and dynazip couldn't read the zip file. */ |
|
||||
savefilenameinzip = filenameinzip; |
|
||||
while( savefilenameinzip[0] == '\\' || savefilenameinzip[0] == '/' ) |
|
||||
{ |
|
||||
savefilenameinzip++; |
|
||||
} |
|
||||
|
|
||||
/*should the zip file contain any path at all?*/ |
|
||||
if( opt_exclude_path ) |
|
||||
{ |
|
||||
const char *tmpptr; |
|
||||
const char *lastslash = 0; |
|
||||
for( tmpptr = savefilenameinzip; *tmpptr; tmpptr++) |
|
||||
{ |
|
||||
if( *tmpptr == '\\' || *tmpptr == '/') |
|
||||
{ |
|
||||
lastslash = tmpptr; |
|
||||
} |
|
||||
} |
|
||||
if( lastslash != NULL ) |
|
||||
{ |
|
||||
savefilenameinzip = lastslash+1; // base filename follows last slash.
|
|
||||
} |
|
||||
} |
|
||||
|
|
||||
/**/ |
|
||||
err = zipOpenNewFileInZip3_64(zf,savefilenameinzip,&zi, |
|
||||
NULL,0,NULL,0,NULL /* comment*/, |
|
||||
(opt_compress_level != 0) ? Z_DEFLATED : 0, |
|
||||
opt_compress_level,0, |
|
||||
/* -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY, */ |
|
||||
-MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY, |
|
||||
password,crcFile, zip64); |
|
||||
|
|
||||
if (err != ZIP_OK) |
|
||||
printf("error in opening %s in zipfile\n",filenameinzip); |
|
||||
else |
|
||||
{ |
|
||||
fin = fopen64(filenameinzip,"rb"); |
|
||||
if (fin==NULL) |
|
||||
{ |
|
||||
err=ZIP_ERRNO; |
|
||||
printf("error in opening %s for reading\n",filenameinzip); |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
if (err == ZIP_OK) |
|
||||
do |
|
||||
{ |
|
||||
err = ZIP_OK; |
|
||||
size_read = (int)fread(buf,1,size_buf,fin); |
|
||||
if (size_read < size_buf) |
|
||||
if (feof(fin)==0) |
|
||||
{ |
|
||||
printf("error in reading %s\n",filenameinzip); |
|
||||
err = ZIP_ERRNO; |
|
||||
} |
|
||||
|
|
||||
if (size_read>0) |
|
||||
{ |
|
||||
err = zipWriteInFileInZip (zf,buf,size_read); |
|
||||
if (err<0) |
|
||||
{ |
|
||||
printf("error in writing %s in the zipfile\n", |
|
||||
filenameinzip); |
|
||||
} |
|
||||
|
|
||||
} |
|
||||
} while ((err == ZIP_OK) && (size_read>0)); |
|
||||
|
|
||||
if (fin) |
|
||||
fclose(fin); |
|
||||
|
|
||||
if (err<0) |
|
||||
err=ZIP_ERRNO; |
|
||||
else |
|
||||
{ |
|
||||
err = zipCloseFileInZip(zf); |
|
||||
if (err!=ZIP_OK) |
|
||||
printf("error in closing %s in the zipfile\n", |
|
||||
filenameinzip); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
errclose = zipClose(zf,NULL); |
|
||||
if (errclose != ZIP_OK) |
|
||||
printf("error in closing %s\n",filename_try); |
|
||||
} |
|
||||
else |
|
||||
{ |
|
||||
do_help(); |
|
||||
} |
|
||||
|
|
||||
free(buf); |
|
||||
return 0; |
|
||||
} |
|
@ -1,281 +0,0 @@ |
|||||
/*
|
|
||||
Additional tools for Minizip |
|
||||
Code: Xavier Roche '2004 |
|
||||
License: Same as ZLIB (www.gzip.org) |
|
||||
*/ |
|
||||
|
|
||||
/* Code */ |
|
||||
#include <stdio.h> |
|
||||
#include <stdlib.h> |
|
||||
#include <string.h> |
|
||||
#include "zlib.h" |
|
||||
#include "unzip.h" |
|
||||
|
|
||||
#define READ_8(adr) ((unsigned char)*(adr)) |
|
||||
#define READ_16(adr) ( READ_8(adr) | (READ_8(adr+1) << 8) ) |
|
||||
#define READ_32(adr) ( READ_16(adr) | (READ_16((adr)+2) << 16) ) |
|
||||
|
|
||||
#define WRITE_8(buff, n) do { \ |
|
||||
*((unsigned char*)(buff)) = (unsigned char) ((n) & 0xff); \ |
|
||||
} while(0) |
|
||||
#define WRITE_16(buff, n) do { \ |
|
||||
WRITE_8((unsigned char*)(buff), n); \ |
|
||||
WRITE_8(((unsigned char*)(buff)) + 1, (n) >> 8); \ |
|
||||
} while(0) |
|
||||
#define WRITE_32(buff, n) do { \ |
|
||||
WRITE_16((unsigned char*)(buff), (n) & 0xffff); \ |
|
||||
WRITE_16((unsigned char*)(buff) + 2, (n) >> 16); \ |
|
||||
} while(0) |
|
||||
|
|
||||
extern int ZEXPORT unzRepair(file, fileOut, fileOutTmp, nRecovered, bytesRecovered) |
|
||||
const char* file; |
|
||||
const char* fileOut; |
|
||||
const char* fileOutTmp; |
|
||||
uLong* nRecovered; |
|
||||
uLong* bytesRecovered; |
|
||||
{ |
|
||||
int err = Z_OK; |
|
||||
FILE* fpZip = fopen(file, "rb"); |
|
||||
FILE* fpOut = fopen(fileOut, "wb"); |
|
||||
FILE* fpOutCD = fopen(fileOutTmp, "wb"); |
|
||||
if (fpZip != NULL && fpOut != NULL) { |
|
||||
int entries = 0; |
|
||||
uLong totalBytes = 0; |
|
||||
char header[30]; |
|
||||
char filename[256]; |
|
||||
char extra[1024]; |
|
||||
int offset = 0; |
|
||||
int offsetCD = 0; |
|
||||
while ( fread(header, 1, 30, fpZip) == 30 ) { |
|
||||
int currentOffset = offset; |
|
||||
|
|
||||
/* File entry */ |
|
||||
if (READ_32(header) == 0x04034b50) { |
|
||||
unsigned int version = READ_16(header + 4); |
|
||||
unsigned int gpflag = READ_16(header + 6); |
|
||||
unsigned int method = READ_16(header + 8); |
|
||||
unsigned int filetime = READ_16(header + 10); |
|
||||
unsigned int filedate = READ_16(header + 12); |
|
||||
unsigned int crc = READ_32(header + 14); /* crc */ |
|
||||
unsigned int cpsize = READ_32(header + 18); /* compressed size */ |
|
||||
unsigned int uncpsize = READ_32(header + 22); /* uncompressed sz */ |
|
||||
unsigned int fnsize = READ_16(header + 26); /* file name length */ |
|
||||
unsigned int extsize = READ_16(header + 28); /* extra field length */ |
|
||||
filename[0] = extra[0] = '\0'; |
|
||||
|
|
||||
/* Header */ |
|
||||
if (fwrite(header, 1, 30, fpOut) == 30) { |
|
||||
offset += 30; |
|
||||
} else { |
|
||||
err = Z_ERRNO; |
|
||||
break; |
|
||||
} |
|
||||
|
|
||||
/* Filename */ |
|
||||
if (fnsize > 0) { |
|
||||
if (fread(filename, 1, fnsize, fpZip) == fnsize) { |
|
||||
if (fwrite(filename, 1, fnsize, fpOut) == fnsize) { |
|
||||
offset += fnsize; |
|
||||
} else { |
|
||||
err = Z_ERRNO; |
|
||||
break; |
|
||||
} |
|
||||
} else { |
|
||||
err = Z_ERRNO; |
|
||||
break; |
|
||||
} |
|
||||
} else { |
|
||||
err = Z_STREAM_ERROR; |
|
||||
break; |
|
||||
} |
|
||||
|
|
||||
/* Extra field */ |
|
||||
if (extsize > 0) { |
|
||||
if (fread(extra, 1, extsize, fpZip) == extsize) { |
|
||||
if (fwrite(extra, 1, extsize, fpOut) == extsize) { |
|
||||
offset += extsize; |
|
||||
} else { |
|
||||
err = Z_ERRNO; |
|
||||
break; |
|
||||
} |
|
||||
} else { |
|
||||
err = Z_ERRNO; |
|
||||
break; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
/* Data */ |
|
||||
{ |
|
||||
int dataSize = cpsize; |
|
||||
if (dataSize == 0) { |
|
||||
dataSize = uncpsize; |
|
||||
} |
|
||||
if (dataSize > 0) { |
|
||||
char* data = malloc(dataSize); |
|
||||
if (data != NULL) { |
|
||||
if ((int)fread(data, 1, dataSize, fpZip) == dataSize) { |
|
||||
if ((int)fwrite(data, 1, dataSize, fpOut) == dataSize) { |
|
||||
offset += dataSize; |
|
||||
totalBytes += dataSize; |
|
||||
} else { |
|
||||
err = Z_ERRNO; |
|
||||
} |
|
||||
} else { |
|
||||
err = Z_ERRNO; |
|
||||
} |
|
||||
free(data); |
|
||||
if (err != Z_OK) { |
|
||||
break; |
|
||||
} |
|
||||
} else { |
|
||||
err = Z_MEM_ERROR; |
|
||||
break; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
/* Central directory entry */ |
|
||||
{ |
|
||||
char header[46]; |
|
||||
char* comment = ""; |
|
||||
int comsize = (int) strlen(comment); |
|
||||
WRITE_32(header, 0x02014b50); |
|
||||
WRITE_16(header + 4, version); |
|
||||
WRITE_16(header + 6, version); |
|
||||
WRITE_16(header + 8, gpflag); |
|
||||
WRITE_16(header + 10, method); |
|
||||
WRITE_16(header + 12, filetime); |
|
||||
WRITE_16(header + 14, filedate); |
|
||||
WRITE_32(header + 16, crc); |
|
||||
WRITE_32(header + 20, cpsize); |
|
||||
WRITE_32(header + 24, uncpsize); |
|
||||
WRITE_16(header + 28, fnsize); |
|
||||
WRITE_16(header + 30, extsize); |
|
||||
WRITE_16(header + 32, comsize); |
|
||||
WRITE_16(header + 34, 0); /* disk # */ |
|
||||
WRITE_16(header + 36, 0); /* int attrb */ |
|
||||
WRITE_32(header + 38, 0); /* ext attrb */ |
|
||||
WRITE_32(header + 42, currentOffset); |
|
||||
/* Header */ |
|
||||
if (fwrite(header, 1, 46, fpOutCD) == 46) { |
|
||||
offsetCD += 46; |
|
||||
|
|
||||
/* Filename */ |
|
||||
if (fnsize > 0) { |
|
||||
if (fwrite(filename, 1, fnsize, fpOutCD) == fnsize) { |
|
||||
offsetCD += fnsize; |
|
||||
} else { |
|
||||
err = Z_ERRNO; |
|
||||
break; |
|
||||
} |
|
||||
} else { |
|
||||
err = Z_STREAM_ERROR; |
|
||||
break; |
|
||||
} |
|
||||
|
|
||||
/* Extra field */ |
|
||||
if (extsize > 0) { |
|
||||
if (fwrite(extra, 1, extsize, fpOutCD) == extsize) { |
|
||||
offsetCD += extsize; |
|
||||
} else { |
|
||||
err = Z_ERRNO; |
|
||||
break; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
/* Comment field */ |
|
||||
if (comsize > 0) { |
|
||||
if ((int)fwrite(comment, 1, comsize, fpOutCD) == comsize) { |
|
||||
offsetCD += comsize; |
|
||||
} else { |
|
||||
err = Z_ERRNO; |
|
||||
break; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
|
|
||||
} else { |
|
||||
err = Z_ERRNO; |
|
||||
break; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
/* Success */ |
|
||||
entries++; |
|
||||
|
|
||||
} else { |
|
||||
break; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
/* Final central directory */ |
|
||||
{ |
|
||||
int entriesZip = entries; |
|
||||
char header[22]; |
|
||||
char* comment = ""; // "ZIP File recovered by zlib/minizip/mztools";
|
|
||||
int comsize = (int) strlen(comment); |
|
||||
if (entriesZip > 0xffff) { |
|
||||
entriesZip = 0xffff; |
|
||||
} |
|
||||
WRITE_32(header, 0x06054b50); |
|
||||
WRITE_16(header + 4, 0); /* disk # */ |
|
||||
WRITE_16(header + 6, 0); /* disk # */ |
|
||||
WRITE_16(header + 8, entriesZip); /* hack */ |
|
||||
WRITE_16(header + 10, entriesZip); /* hack */ |
|
||||
WRITE_32(header + 12, offsetCD); /* size of CD */ |
|
||||
WRITE_32(header + 16, offset); /* offset to CD */ |
|
||||
WRITE_16(header + 20, comsize); /* comment */ |
|
||||
|
|
||||
/* Header */ |
|
||||
if (fwrite(header, 1, 22, fpOutCD) == 22) { |
|
||||
|
|
||||
/* Comment field */ |
|
||||
if (comsize > 0) { |
|
||||
if ((int)fwrite(comment, 1, comsize, fpOutCD) != comsize) { |
|
||||
err = Z_ERRNO; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
} else { |
|
||||
err = Z_ERRNO; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
/* Final merge (file + central directory) */ |
|
||||
fclose(fpOutCD); |
|
||||
if (err == Z_OK) { |
|
||||
fpOutCD = fopen(fileOutTmp, "rb"); |
|
||||
if (fpOutCD != NULL) { |
|
||||
int nRead; |
|
||||
char buffer[8192]; |
|
||||
while ( (nRead = (int)fread(buffer, 1, sizeof(buffer), fpOutCD)) > 0) { |
|
||||
if ((int)fwrite(buffer, 1, nRead, fpOut) != nRead) { |
|
||||
err = Z_ERRNO; |
|
||||
break; |
|
||||
} |
|
||||
} |
|
||||
fclose(fpOutCD); |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
/* Close */ |
|
||||
fclose(fpZip); |
|
||||
fclose(fpOut); |
|
||||
|
|
||||
/* Wipe temporary file */ |
|
||||
(void)remove(fileOutTmp); |
|
||||
|
|
||||
/* Number of recovered entries */ |
|
||||
if (err == Z_OK) { |
|
||||
if (nRecovered != NULL) { |
|
||||
*nRecovered = entries; |
|
||||
} |
|
||||
if (bytesRecovered != NULL) { |
|
||||
*bytesRecovered = totalBytes; |
|
||||
} |
|
||||
} |
|
||||
} else { |
|
||||
err = Z_STREAM_ERROR; |
|
||||
} |
|
||||
return err; |
|
||||
} |
|
@ -1,31 +0,0 @@ |
|||||
/*
|
|
||||
Additional tools for Minizip |
|
||||
Code: Xavier Roche '2004 |
|
||||
License: Same as ZLIB (www.gzip.org) |
|
||||
*/ |
|
||||
|
|
||||
#ifndef _zip_tools_H |
|
||||
#define _zip_tools_H |
|
||||
|
|
||||
#ifdef __cplusplus |
|
||||
extern "C" { |
|
||||
#endif |
|
||||
|
|
||||
#ifndef _ZLIB_H |
|
||||
#include "zlib.h" |
|
||||
#endif |
|
||||
|
|
||||
#include "unzip.h" |
|
||||
|
|
||||
/* Repair a ZIP file (missing central directory)
|
|
||||
file: file to recover |
|
||||
fileOut: output file after recovery |
|
||||
fileOutTmp: temporary file name used for recovery |
|
||||
*/ |
|
||||
extern int ZEXPORT unzRepair(const char* file, |
|
||||
const char* fileOut, |
|
||||
const char* fileOutTmp, |
|
||||
uLong* nRecovered, |
|
||||
uLong* bytesRecovered); |
|
||||
|
|
||||
#endif |
|
File diff suppressed because it is too large
@ -1,437 +0,0 @@ |
|||||
/* unzip.h -- IO for uncompress .zip files using zlib
|
|
||||
Version 1.1, February 14h, 2010 |
|
||||
part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )
|
|
||||
|
|
||||
Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )
|
|
||||
|
|
||||
Modifications of Unzip for Zip64 |
|
||||
Copyright (C) 2007-2008 Even Rouault |
|
||||
|
|
||||
Modifications for Zip64 support on both zip and unzip |
|
||||
Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )
|
|
||||
|
|
||||
For more info read MiniZip_info.txt |
|
||||
|
|
||||
--------------------------------------------------------------------------------- |
|
||||
|
|
||||
Condition of use and distribution are the same than zlib : |
|
||||
|
|
||||
This software is provided 'as-is', without any express or implied |
|
||||
warranty. In no event will the authors be held liable for any damages |
|
||||
arising from the use of this software. |
|
||||
|
|
||||
Permission is granted to anyone to use this software for any purpose, |
|
||||
including commercial applications, and to alter it and redistribute it |
|
||||
freely, subject to the following restrictions: |
|
||||
|
|
||||
1. The origin of this software must not be misrepresented; you must not |
|
||||
claim that you wrote the original software. If you use this software |
|
||||
in a product, an acknowledgment in the product documentation would be |
|
||||
appreciated but is not required. |
|
||||
2. Altered source versions must be plainly marked as such, and must not be |
|
||||
misrepresented as being the original software. |
|
||||
3. This notice may not be removed or altered from any source distribution. |
|
||||
|
|
||||
--------------------------------------------------------------------------------- |
|
||||
|
|
||||
Changes |
|
||||
|
|
||||
See header of unzip64.c |
|
||||
|
|
||||
*/ |
|
||||
|
|
||||
#ifndef _unz64_H |
|
||||
#define _unz64_H |
|
||||
|
|
||||
#ifdef __cplusplus |
|
||||
extern "C" { |
|
||||
#endif |
|
||||
|
|
||||
#ifndef _ZLIB_H |
|
||||
#include "zlib.h" |
|
||||
#endif |
|
||||
|
|
||||
#ifndef _ZLIBIOAPI_H |
|
||||
#include "ioapi.h" |
|
||||
#endif |
|
||||
|
|
||||
#ifdef HAVE_BZIP2 |
|
||||
#include "bzlib.h" |
|
||||
#endif |
|
||||
|
|
||||
#define Z_BZIP2ED 12 |
|
||||
|
|
||||
#if defined(STRICTUNZIP) || defined(STRICTZIPUNZIP) |
|
||||
/* like the STRICT of WIN32, we define a pointer that cannot be converted
|
|
||||
from (void*) without cast */ |
|
||||
typedef struct TagunzFile__ { int unused; } unzFile__; |
|
||||
typedef unzFile__ *unzFile; |
|
||||
#else |
|
||||
typedef voidp unzFile; |
|
||||
#endif |
|
||||
|
|
||||
|
|
||||
#define UNZ_OK (0) |
|
||||
#define UNZ_END_OF_LIST_OF_FILE (-100) |
|
||||
#define UNZ_ERRNO (Z_ERRNO) |
|
||||
#define UNZ_EOF (0) |
|
||||
#define UNZ_PARAMERROR (-102) |
|
||||
#define UNZ_BADZIPFILE (-103) |
|
||||
#define UNZ_INTERNALERROR (-104) |
|
||||
#define UNZ_CRCERROR (-105) |
|
||||
|
|
||||
/* tm_unz contain date/time info */ |
|
||||
typedef struct tm_unz_s |
|
||||
{ |
|
||||
uInt tm_sec; /* seconds after the minute - [0,59] */ |
|
||||
uInt tm_min; /* minutes after the hour - [0,59] */ |
|
||||
uInt tm_hour; /* hours since midnight - [0,23] */ |
|
||||
uInt tm_mday; /* day of the month - [1,31] */ |
|
||||
uInt tm_mon; /* months since January - [0,11] */ |
|
||||
uInt tm_year; /* years - [1980..2044] */ |
|
||||
} tm_unz; |
|
||||
|
|
||||
/* unz_global_info structure contain global data about the ZIPfile
|
|
||||
These data comes from the end of central dir */ |
|
||||
typedef struct unz_global_info64_s |
|
||||
{ |
|
||||
ZPOS64_T number_entry; /* total number of entries in
|
|
||||
the central dir on this disk */ |
|
||||
uLong size_comment; /* size of the global comment of the zipfile */ |
|
||||
} unz_global_info64; |
|
||||
|
|
||||
typedef struct unz_global_info_s |
|
||||
{ |
|
||||
uLong number_entry; /* total number of entries in
|
|
||||
the central dir on this disk */ |
|
||||
uLong size_comment; /* size of the global comment of the zipfile */ |
|
||||
} unz_global_info; |
|
||||
|
|
||||
/* unz_file_info contain information about a file in the zipfile */ |
|
||||
typedef struct unz_file_info64_s |
|
||||
{ |
|
||||
uLong version; /* version made by 2 bytes */ |
|
||||
uLong version_needed; /* version needed to extract 2 bytes */ |
|
||||
uLong flag; /* general purpose bit flag 2 bytes */ |
|
||||
uLong compression_method; /* compression method 2 bytes */ |
|
||||
uLong dosDate; /* last mod file date in Dos fmt 4 bytes */ |
|
||||
uLong crc; /* crc-32 4 bytes */ |
|
||||
ZPOS64_T compressed_size; /* compressed size 8 bytes */ |
|
||||
ZPOS64_T uncompressed_size; /* uncompressed size 8 bytes */ |
|
||||
uLong size_filename; /* filename length 2 bytes */ |
|
||||
uLong size_file_extra; /* extra field length 2 bytes */ |
|
||||
uLong size_file_comment; /* file comment length 2 bytes */ |
|
||||
|
|
||||
uLong disk_num_start; /* disk number start 2 bytes */ |
|
||||
uLong internal_fa; /* internal file attributes 2 bytes */ |
|
||||
uLong external_fa; /* external file attributes 4 bytes */ |
|
||||
|
|
||||
tm_unz tmu_date; |
|
||||
} unz_file_info64; |
|
||||
|
|
||||
typedef struct unz_file_info_s |
|
||||
{ |
|
||||
uLong version; /* version made by 2 bytes */ |
|
||||
uLong version_needed; /* version needed to extract 2 bytes */ |
|
||||
uLong flag; /* general purpose bit flag 2 bytes */ |
|
||||
uLong compression_method; /* compression method 2 bytes */ |
|
||||
uLong dosDate; /* last mod file date in Dos fmt 4 bytes */ |
|
||||
uLong crc; /* crc-32 4 bytes */ |
|
||||
uLong compressed_size; /* compressed size 4 bytes */ |
|
||||
uLong uncompressed_size; /* uncompressed size 4 bytes */ |
|
||||
uLong size_filename; /* filename length 2 bytes */ |
|
||||
uLong size_file_extra; /* extra field length 2 bytes */ |
|
||||
uLong size_file_comment; /* file comment length 2 bytes */ |
|
||||
|
|
||||
uLong disk_num_start; /* disk number start 2 bytes */ |
|
||||
uLong internal_fa; /* internal file attributes 2 bytes */ |
|
||||
uLong external_fa; /* external file attributes 4 bytes */ |
|
||||
|
|
||||
tm_unz tmu_date; |
|
||||
} unz_file_info; |
|
||||
|
|
||||
extern int ZEXPORT unzStringFileNameCompare OF ((const char* fileName1, |
|
||||
const char* fileName2, |
|
||||
int iCaseSensitivity)); |
|
||||
/*
|
|
||||
Compare two filename (fileName1,fileName2). |
|
||||
If iCaseSenisivity = 1, comparision is case sensitivity (like strcmp) |
|
||||
If iCaseSenisivity = 2, comparision is not case sensitivity (like strcmpi |
|
||||
or strcasecmp) |
|
||||
If iCaseSenisivity = 0, case sensitivity is defaut of your operating system |
|
||||
(like 1 on Unix, 2 on Windows) |
|
||||
*/ |
|
||||
|
|
||||
|
|
||||
extern unzFile ZEXPORT unzOpen OF((const char *path)); |
|
||||
extern unzFile ZEXPORT unzOpen64 OF((const void *path)); |
|
||||
/*
|
|
||||
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 |
|
||||
"zlib/zlib113.zip". |
|
||||
If the zipfile cannot be opened (file don't exist or in not valid), the |
|
||||
return value is NULL. |
|
||||
Else, the return value is a unzFile Handle, usable with other function |
|
||||
of this unzip package. |
|
||||
the "64" function take a const void* pointer, because the path is just the |
|
||||
value passed to the open64_file_func callback. |
|
||||
Under Windows, if UNICODE is defined, using fill_fopen64_filefunc, the path |
|
||||
is a pointer to a wide unicode string (LPCTSTR is LPCWSTR), so const char* |
|
||||
does not describe the reality |
|
||||
*/ |
|
||||
|
|
||||
|
|
||||
extern unzFile ZEXPORT unzOpen2 OF((const char *path, |
|
||||
zlib_filefunc_def* pzlib_filefunc_def)); |
|
||||
/*
|
|
||||
Open a Zip file, like unzOpen, but provide a set of file low level API |
|
||||
for read/write the zip file (see ioapi.h) |
|
||||
*/ |
|
||||
|
|
||||
extern unzFile ZEXPORT unzOpen2_64 OF((const void *path, |
|
||||
zlib_filefunc64_def* pzlib_filefunc_def)); |
|
||||
/*
|
|
||||
Open a Zip file, like unz64Open, but provide a set of file low level API |
|
||||
for read/write the zip file (see ioapi.h) |
|
||||
*/ |
|
||||
|
|
||||
extern int ZEXPORT unzClose OF((unzFile file)); |
|
||||
/*
|
|
||||
Close a ZipFile opened with unzipOpen. |
|
||||
If there is files inside the .Zip opened with unzOpenCurrentFile (see later), |
|
||||
these files MUST be closed with unzipCloseCurrentFile before call unzipClose. |
|
||||
return UNZ_OK if there is no problem. */ |
|
||||
|
|
||||
extern int ZEXPORT unzGetGlobalInfo OF((unzFile file, |
|
||||
unz_global_info *pglobal_info)); |
|
||||
|
|
||||
extern int ZEXPORT unzGetGlobalInfo64 OF((unzFile file, |
|
||||
unz_global_info64 *pglobal_info)); |
|
||||
/*
|
|
||||
Write info about the ZipFile in the *pglobal_info structure. |
|
||||
No preparation of the structure is needed |
|
||||
return UNZ_OK if there is no problem. */ |
|
||||
|
|
||||
|
|
||||
extern int ZEXPORT unzGetGlobalComment OF((unzFile file, |
|
||||
char *szComment, |
|
||||
uLong uSizeBuf)); |
|
||||
/*
|
|
||||
Get the global comment string of the ZipFile, in the szComment buffer. |
|
||||
uSizeBuf is the size of the szComment buffer. |
|
||||
return the number of byte copied or an error code <0 |
|
||||
*/ |
|
||||
|
|
||||
|
|
||||
/***************************************************************************/ |
|
||||
/* Unzip package allow you browse the directory of the zipfile */ |
|
||||
|
|
||||
extern int ZEXPORT unzGoToFirstFile OF((unzFile file)); |
|
||||
/*
|
|
||||
Set the current file of the zipfile to the first file. |
|
||||
return UNZ_OK if there is no problem |
|
||||
*/ |
|
||||
|
|
||||
extern int ZEXPORT unzGoToNextFile OF((unzFile file)); |
|
||||
/*
|
|
||||
Set the current file of the zipfile to the next file. |
|
||||
return UNZ_OK if there is no problem |
|
||||
return UNZ_END_OF_LIST_OF_FILE if the actual file was the latest. |
|
||||
*/ |
|
||||
|
|
||||
extern int ZEXPORT unzLocateFile OF((unzFile file, |
|
||||
const char *szFileName, |
|
||||
int iCaseSensitivity)); |
|
||||
/*
|
|
||||
Try locate the file szFileName in the zipfile. |
|
||||
For the iCaseSensitivity signification, see unzStringFileNameCompare |
|
||||
|
|
||||
return value : |
|
||||
UNZ_OK if the file is found. It becomes the current file. |
|
||||
UNZ_END_OF_LIST_OF_FILE if the file is not found |
|
||||
*/ |
|
||||
|
|
||||
|
|
||||
/* ****************************************** */ |
|
||||
/* Ryan supplied functions */ |
|
||||
/* unz_file_info contain information about a file in the zipfile */ |
|
||||
typedef struct unz_file_pos_s |
|
||||
{ |
|
||||
uLong pos_in_zip_directory; /* offset in zip file directory */ |
|
||||
uLong num_of_file; /* # of file */ |
|
||||
} unz_file_pos; |
|
||||
|
|
||||
extern int ZEXPORT unzGetFilePos( |
|
||||
unzFile file, |
|
||||
unz_file_pos* file_pos); |
|
||||
|
|
||||
extern int ZEXPORT unzGoToFilePos( |
|
||||
unzFile file, |
|
||||
unz_file_pos* file_pos); |
|
||||
|
|
||||
typedef struct unz64_file_pos_s |
|
||||
{ |
|
||||
ZPOS64_T pos_in_zip_directory; /* offset in zip file directory */ |
|
||||
ZPOS64_T num_of_file; /* # of file */ |
|
||||
} unz64_file_pos; |
|
||||
|
|
||||
extern int ZEXPORT unzGetFilePos64( |
|
||||
unzFile file, |
|
||||
unz64_file_pos* file_pos); |
|
||||
|
|
||||
extern int ZEXPORT unzGoToFilePos64( |
|
||||
unzFile file, |
|
||||
const unz64_file_pos* file_pos); |
|
||||
|
|
||||
/* ****************************************** */ |
|
||||
|
|
||||
extern int ZEXPORT unzGetCurrentFileInfo64 OF((unzFile file, |
|
||||
unz_file_info64 *pfile_info, |
|
||||
char *szFileName, |
|
||||
uLong fileNameBufferSize, |
|
||||
void *extraField, |
|
||||
uLong extraFieldBufferSize, |
|
||||
char *szComment, |
|
||||
uLong commentBufferSize)); |
|
||||
|
|
||||
extern int ZEXPORT unzGetCurrentFileInfo OF((unzFile file, |
|
||||
unz_file_info *pfile_info, |
|
||||
char *szFileName, |
|
||||
uLong fileNameBufferSize, |
|
||||
void *extraField, |
|
||||
uLong extraFieldBufferSize, |
|
||||
char *szComment, |
|
||||
uLong commentBufferSize)); |
|
||||
/*
|
|
||||
Get Info about the current file |
|
||||
if pfile_info!=NULL, the *pfile_info structure will contain somes info about |
|
||||
the current file |
|
||||
if szFileName!=NULL, the filemane string will be copied in szFileName |
|
||||
(fileNameBufferSize is the size of the buffer) |
|
||||
if extraField!=NULL, the extra field information will be copied in extraField |
|
||||
(extraFieldBufferSize is the size of the buffer). |
|
||||
This is the Central-header version of the extra field |
|
||||
if szComment!=NULL, the comment string of the file will be copied in szComment |
|
||||
(commentBufferSize is the size of the buffer) |
|
||||
*/ |
|
||||
|
|
||||
|
|
||||
/** Addition for GDAL : START */ |
|
||||
|
|
||||
extern ZPOS64_T ZEXPORT unzGetCurrentFileZStreamPos64 OF((unzFile file)); |
|
||||
|
|
||||
/** Addition for GDAL : END */ |
|
||||
|
|
||||
|
|
||||
/***************************************************************************/ |
|
||||
/* for reading the content of the current zipfile, you can open it, read data
|
|
||||
from it, and close it (you can close it before reading all the file) |
|
||||
*/ |
|
||||
|
|
||||
extern int ZEXPORT unzOpenCurrentFile OF((unzFile file)); |
|
||||
/*
|
|
||||
Open for reading data the current file in the zipfile. |
|
||||
If there is no error, the return value is UNZ_OK. |
|
||||
*/ |
|
||||
|
|
||||
extern int ZEXPORT unzOpenCurrentFilePassword OF((unzFile file, |
|
||||
const char* password)); |
|
||||
/*
|
|
||||
Open for reading data the current file in the zipfile. |
|
||||
password is a crypting password |
|
||||
If there is no error, the return value is UNZ_OK. |
|
||||
*/ |
|
||||
|
|
||||
extern int ZEXPORT unzOpenCurrentFile2 OF((unzFile file, |
|
||||
int* method, |
|
||||
int* level, |
|
||||
int raw)); |
|
||||
/*
|
|
||||
Same than unzOpenCurrentFile, but open for read raw the file (not uncompress) |
|
||||
if raw==1 |
|
||||
*method will receive method of compression, *level will receive level of |
|
||||
compression |
|
||||
note : you can set level parameter as NULL (if you did not want known level, |
|
||||
but you CANNOT set method parameter as NULL |
|
||||
*/ |
|
||||
|
|
||||
extern int ZEXPORT unzOpenCurrentFile3 OF((unzFile file, |
|
||||
int* method, |
|
||||
int* level, |
|
||||
int raw, |
|
||||
const char* password)); |
|
||||
/*
|
|
||||
Same than unzOpenCurrentFile, but open for read raw the file (not uncompress) |
|
||||
if raw==1 |
|
||||
*method will receive method of compression, *level will receive level of |
|
||||
compression |
|
||||
note : you can set level parameter as NULL (if you did not want known level, |
|
||||
but you CANNOT set method parameter as NULL |
|
||||
*/ |
|
||||
|
|
||||
|
|
||||
extern int ZEXPORT unzCloseCurrentFile OF((unzFile file)); |
|
||||
/*
|
|
||||
Close the file in zip opened with unzOpenCurrentFile |
|
||||
Return UNZ_CRCERROR if all the file was read but the CRC is not good |
|
||||
*/ |
|
||||
|
|
||||
extern int ZEXPORT unzReadCurrentFile OF((unzFile file, |
|
||||
voidp buf, |
|
||||
unsigned len)); |
|
||||
/*
|
|
||||
Read bytes from the current file (opened by unzOpenCurrentFile) |
|
||||
buf contain buffer where data must be copied |
|
||||
len the size of buf. |
|
||||
|
|
||||
return the number of byte copied if somes bytes are copied |
|
||||
return 0 if the end of file was reached |
|
||||
return <0 with error code if there is an error |
|
||||
(UNZ_ERRNO for IO error, or zLib error for uncompress error) |
|
||||
*/ |
|
||||
|
|
||||
extern z_off_t ZEXPORT unztell OF((unzFile file)); |
|
||||
|
|
||||
extern ZPOS64_T ZEXPORT unztell64 OF((unzFile file)); |
|
||||
/*
|
|
||||
Give the current position in uncompressed data |
|
||||
*/ |
|
||||
|
|
||||
extern int ZEXPORT unzeof OF((unzFile file)); |
|
||||
/*
|
|
||||
return 1 if the end of file was reached, 0 elsewhere |
|
||||
*/ |
|
||||
|
|
||||
extern int ZEXPORT unzGetLocalExtrafield OF((unzFile file, |
|
||||
voidp buf, |
|
||||
unsigned len)); |
|
||||
/*
|
|
||||
Read extra field from the current file (opened by unzOpenCurrentFile) |
|
||||
This is the local-header version of the extra field (sometimes, there is |
|
||||
more info in the local-header version than in the central-header) |
|
||||
|
|
||||
if buf==NULL, it return the size of the local extra field |
|
||||
|
|
||||
if buf!=NULL, len is the size of the buffer, the extra header is copied in |
|
||||
buf. |
|
||||
the return value is the number of bytes copied in buf, or (if <0) |
|
||||
the error code |
|
||||
*/ |
|
||||
|
|
||||
/***************************************************************************/ |
|
||||
|
|
||||
/* Get the current file offset */ |
|
||||
extern ZPOS64_T ZEXPORT unzGetOffset64 (unzFile file); |
|
||||
extern uLong ZEXPORT unzGetOffset (unzFile file); |
|
||||
|
|
||||
/* Set the current file offset */ |
|
||||
extern int ZEXPORT unzSetOffset64 (unzFile file, ZPOS64_T pos); |
|
||||
extern int ZEXPORT unzSetOffset (unzFile file, uLong pos); |
|
||||
|
|
||||
|
|
||||
|
|
||||
#ifdef __cplusplus |
|
||||
} |
|
||||
#endif |
|
||||
|
|
||||
#endif /* _unz64_H */ |
|
File diff suppressed because it is too large
@ -1,362 +0,0 @@ |
|||||
/* zip.h -- IO on .zip files using zlib
|
|
||||
Version 1.1, February 14h, 2010 |
|
||||
part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )
|
|
||||
|
|
||||
Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )
|
|
||||
|
|
||||
Modifications for Zip64 support |
|
||||
Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )
|
|
||||
|
|
||||
For more info read MiniZip_info.txt |
|
||||
|
|
||||
--------------------------------------------------------------------------- |
|
||||
|
|
||||
Condition of use and distribution are the same than zlib : |
|
||||
|
|
||||
This software is provided 'as-is', without any express or implied |
|
||||
warranty. In no event will the authors be held liable for any damages |
|
||||
arising from the use of this software. |
|
||||
|
|
||||
Permission is granted to anyone to use this software for any purpose, |
|
||||
including commercial applications, and to alter it and redistribute it |
|
||||
freely, subject to the following restrictions: |
|
||||
|
|
||||
1. The origin of this software must not be misrepresented; you must not |
|
||||
claim that you wrote the original software. If you use this software |
|
||||
in a product, an acknowledgment in the product documentation would be |
|
||||
appreciated but is not required. |
|
||||
2. Altered source versions must be plainly marked as such, and must not be |
|
||||
misrepresented as being the original software. |
|
||||
3. This notice may not be removed or altered from any source distribution. |
|
||||
|
|
||||
--------------------------------------------------------------------------- |
|
||||
|
|
||||
Changes |
|
||||
|
|
||||
See header of zip.h |
|
||||
|
|
||||
*/ |
|
||||
|
|
||||
#ifndef _zip12_H |
|
||||
#define _zip12_H |
|
||||
|
|
||||
#ifdef __cplusplus |
|
||||
extern "C" { |
|
||||
#endif |
|
||||
|
|
||||
//#define HAVE_BZIP2
|
|
||||
|
|
||||
#ifndef _ZLIB_H |
|
||||
#include "zlib/zlib.h" |
|
||||
#endif |
|
||||
|
|
||||
#ifndef _ZLIBIOAPI_H |
|
||||
#include "ioapi.h" |
|
||||
#endif |
|
||||
|
|
||||
#ifdef HAVE_BZIP2 |
|
||||
#include "bzlib.h" |
|
||||
#endif |
|
||||
|
|
||||
#define Z_BZIP2ED 12 |
|
||||
|
|
||||
#if defined(STRICTZIP) || defined(STRICTZIPUNZIP) |
|
||||
/* like the STRICT of WIN32, we define a pointer that cannot be converted
|
|
||||
from (void*) without cast */ |
|
||||
typedef struct TagzipFile__ { int unused; } zipFile__; |
|
||||
typedef zipFile__ *zipFile; |
|
||||
#else |
|
||||
typedef voidp zipFile; |
|
||||
#endif |
|
||||
|
|
||||
#define ZIP_OK (0) |
|
||||
#define ZIP_EOF (0) |
|
||||
#define ZIP_ERRNO (Z_ERRNO) |
|
||||
#define ZIP_PARAMERROR (-102) |
|
||||
#define ZIP_BADZIPFILE (-103) |
|
||||
#define ZIP_INTERNALERROR (-104) |
|
||||
|
|
||||
#ifndef DEF_MEM_LEVEL |
|
||||
# if MAX_MEM_LEVEL >= 8 |
|
||||
# define DEF_MEM_LEVEL 8 |
|
||||
# else |
|
||||
# define DEF_MEM_LEVEL MAX_MEM_LEVEL |
|
||||
# endif |
|
||||
#endif |
|
||||
/* default memLevel */ |
|
||||
|
|
||||
/* tm_zip contain date/time info */ |
|
||||
typedef struct tm_zip_s |
|
||||
{ |
|
||||
uInt tm_sec; /* seconds after the minute - [0,59] */ |
|
||||
uInt tm_min; /* minutes after the hour - [0,59] */ |
|
||||
uInt tm_hour; /* hours since midnight - [0,23] */ |
|
||||
uInt tm_mday; /* day of the month - [1,31] */ |
|
||||
uInt tm_mon; /* months since January - [0,11] */ |
|
||||
uInt tm_year; /* years - [1980..2044] */ |
|
||||
} tm_zip; |
|
||||
|
|
||||
typedef struct |
|
||||
{ |
|
||||
tm_zip tmz_date; /* date in understandable format */ |
|
||||
uLong dosDate; /* if dos_date == 0, tmu_date is used */ |
|
||||
/* uLong flag; */ /* general purpose bit flag 2 bytes */ |
|
||||
|
|
||||
uLong internal_fa; /* internal file attributes 2 bytes */ |
|
||||
uLong external_fa; /* external file attributes 4 bytes */ |
|
||||
} zip_fileinfo; |
|
||||
|
|
||||
typedef const char* zipcharpc; |
|
||||
|
|
||||
|
|
||||
#define APPEND_STATUS_CREATE (0) |
|
||||
#define APPEND_STATUS_CREATEAFTER (1) |
|
||||
#define APPEND_STATUS_ADDINZIP (2) |
|
||||
|
|
||||
extern zipFile ZEXPORT zipOpen OF((const char *pathname, int append)); |
|
||||
extern zipFile ZEXPORT zipOpen64 OF((const void *pathname, int append)); |
|
||||
/*
|
|
||||
Create a zipfile. |
|
||||
pathname contain on Windows XP a filename like "c:\\zlib\\zlib113.zip" or on |
|
||||
an Unix computer "zlib/zlib113.zip". |
|
||||
if the file pathname exist and append==APPEND_STATUS_CREATEAFTER, the zip |
|
||||
will be created at the end of the file. |
|
||||
(useful if the file contain a self extractor code) |
|
||||
if the file pathname exist and append==APPEND_STATUS_ADDINZIP, we will |
|
||||
add files in existing zip (be sure you don't add file that doesn't exist) |
|
||||
If the zipfile cannot be opened, the return value is NULL. |
|
||||
Else, the return value is a zipFile Handle, usable with other function |
|
||||
of this zip package. |
|
||||
*/ |
|
||||
|
|
||||
/* Note : there is no delete function into a zipfile.
|
|
||||
If you want delete file into a zipfile, you must open a zipfile, and create another |
|
||||
Of couse, you can use RAW reading and writing to copy the file you did not want delte |
|
||||
*/ |
|
||||
|
|
||||
extern zipFile ZEXPORT zipOpen2 OF((const char *pathname, |
|
||||
int append, |
|
||||
zipcharpc* globalcomment, |
|
||||
zlib_filefunc_def* pzlib_filefunc_def)); |
|
||||
|
|
||||
extern zipFile ZEXPORT zipOpen2_64 OF((const void *pathname, |
|
||||
int append, |
|
||||
zipcharpc* globalcomment, |
|
||||
zlib_filefunc64_def* pzlib_filefunc_def)); |
|
||||
|
|
||||
extern int ZEXPORT zipOpenNewFileInZip OF((zipFile file, |
|
||||
const char* filename, |
|
||||
const zip_fileinfo* zipfi, |
|
||||
const void* extrafield_local, |
|
||||
uInt size_extrafield_local, |
|
||||
const void* extrafield_global, |
|
||||
uInt size_extrafield_global, |
|
||||
const char* comment, |
|
||||
int method, |
|
||||
int level)); |
|
||||
|
|
||||
extern int ZEXPORT zipOpenNewFileInZip64 OF((zipFile file, |
|
||||
const char* filename, |
|
||||
const zip_fileinfo* zipfi, |
|
||||
const void* extrafield_local, |
|
||||
uInt size_extrafield_local, |
|
||||
const void* extrafield_global, |
|
||||
uInt size_extrafield_global, |
|
||||
const char* comment, |
|
||||
int method, |
|
||||
int level, |
|
||||
int zip64)); |
|
||||
|
|
||||
/*
|
|
||||
Open a file in the ZIP for writing. |
|
||||
filename : the filename in zip (if NULL, '-' without quote will be used |
|
||||
*zipfi contain supplemental information |
|
||||
if extrafield_local!=NULL and size_extrafield_local>0, extrafield_local |
|
||||
contains the extrafield data the the local header |
|
||||
if extrafield_global!=NULL and size_extrafield_global>0, extrafield_global |
|
||||
contains the extrafield data the the local header |
|
||||
if comment != NULL, comment contain the comment string |
|
||||
method contain the compression method (0 for store, Z_DEFLATED for deflate) |
|
||||
level contain the level of compression (can be Z_DEFAULT_COMPRESSION) |
|
||||
zip64 is set to 1 if a zip64 extended information block should be added to the local file header. |
|
||||
this MUST be '1' if the uncompressed size is >= 0xffffffff. |
|
||||
|
|
||||
*/ |
|
||||
|
|
||||
|
|
||||
extern int ZEXPORT zipOpenNewFileInZip2 OF((zipFile file, |
|
||||
const char* filename, |
|
||||
const zip_fileinfo* zipfi, |
|
||||
const void* extrafield_local, |
|
||||
uInt size_extrafield_local, |
|
||||
const void* extrafield_global, |
|
||||
uInt size_extrafield_global, |
|
||||
const char* comment, |
|
||||
int method, |
|
||||
int level, |
|
||||
int raw)); |
|
||||
|
|
||||
|
|
||||
extern int ZEXPORT zipOpenNewFileInZip2_64 OF((zipFile file, |
|
||||
const char* filename, |
|
||||
const zip_fileinfo* zipfi, |
|
||||
const void* extrafield_local, |
|
||||
uInt size_extrafield_local, |
|
||||
const void* extrafield_global, |
|
||||
uInt size_extrafield_global, |
|
||||
const char* comment, |
|
||||
int method, |
|
||||
int level, |
|
||||
int raw, |
|
||||
int zip64)); |
|
||||
/*
|
|
||||
Same than zipOpenNewFileInZip, except if raw=1, we write raw file |
|
||||
*/ |
|
||||
|
|
||||
extern int ZEXPORT zipOpenNewFileInZip3 OF((zipFile file, |
|
||||
const char* filename, |
|
||||
const zip_fileinfo* zipfi, |
|
||||
const void* extrafield_local, |
|
||||
uInt size_extrafield_local, |
|
||||
const void* extrafield_global, |
|
||||
uInt size_extrafield_global, |
|
||||
const char* comment, |
|
||||
int method, |
|
||||
int level, |
|
||||
int raw, |
|
||||
int windowBits, |
|
||||
int memLevel, |
|
||||
int strategy, |
|
||||
const char* password, |
|
||||
uLong crcForCrypting)); |
|
||||
|
|
||||
extern int ZEXPORT zipOpenNewFileInZip3_64 OF((zipFile file, |
|
||||
const char* filename, |
|
||||
const zip_fileinfo* zipfi, |
|
||||
const void* extrafield_local, |
|
||||
uInt size_extrafield_local, |
|
||||
const void* extrafield_global, |
|
||||
uInt size_extrafield_global, |
|
||||
const char* comment, |
|
||||
int method, |
|
||||
int level, |
|
||||
int raw, |
|
||||
int windowBits, |
|
||||
int memLevel, |
|
||||
int strategy, |
|
||||
const char* password, |
|
||||
uLong crcForCrypting, |
|
||||
int zip64 |
|
||||
)); |
|
||||
|
|
||||
/*
|
|
||||
Same than zipOpenNewFileInZip2, except |
|
||||
windowBits,memLevel,,strategy : see parameter strategy in deflateInit2 |
|
||||
password : crypting password (NULL for no crypting) |
|
||||
crcForCrypting : crc of file to compress (needed for crypting) |
|
||||
*/ |
|
||||
|
|
||||
extern int ZEXPORT zipOpenNewFileInZip4 OF((zipFile file, |
|
||||
const char* filename, |
|
||||
const zip_fileinfo* zipfi, |
|
||||
const void* extrafield_local, |
|
||||
uInt size_extrafield_local, |
|
||||
const void* extrafield_global, |
|
||||
uInt size_extrafield_global, |
|
||||
const char* comment, |
|
||||
int method, |
|
||||
int level, |
|
||||
int raw, |
|
||||
int windowBits, |
|
||||
int memLevel, |
|
||||
int strategy, |
|
||||
const char* password, |
|
||||
uLong crcForCrypting, |
|
||||
uLong versionMadeBy, |
|
||||
uLong flagBase |
|
||||
)); |
|
||||
|
|
||||
|
|
||||
extern int ZEXPORT zipOpenNewFileInZip4_64 OF((zipFile file, |
|
||||
const char* filename, |
|
||||
const zip_fileinfo* zipfi, |
|
||||
const void* extrafield_local, |
|
||||
uInt size_extrafield_local, |
|
||||
const void* extrafield_global, |
|
||||
uInt size_extrafield_global, |
|
||||
const char* comment, |
|
||||
int method, |
|
||||
int level, |
|
||||
int raw, |
|
||||
int windowBits, |
|
||||
int memLevel, |
|
||||
int strategy, |
|
||||
const char* password, |
|
||||
uLong crcForCrypting, |
|
||||
uLong versionMadeBy, |
|
||||
uLong flagBase, |
|
||||
int zip64 |
|
||||
)); |
|
||||
/*
|
|
||||
Same than zipOpenNewFileInZip4, except |
|
||||
versionMadeBy : value for Version made by field |
|
||||
flag : value for flag field (compression level info will be added) |
|
||||
*/ |
|
||||
|
|
||||
|
|
||||
extern int ZEXPORT zipWriteInFileInZip OF((zipFile file, |
|
||||
const void* buf, |
|
||||
unsigned len)); |
|
||||
/*
|
|
||||
Write data in the zipfile |
|
||||
*/ |
|
||||
|
|
||||
extern int ZEXPORT zipCloseFileInZip OF((zipFile file)); |
|
||||
/*
|
|
||||
Close the current file in the zipfile |
|
||||
*/ |
|
||||
|
|
||||
extern int ZEXPORT zipCloseFileInZipRaw OF((zipFile file, |
|
||||
uLong uncompressed_size, |
|
||||
uLong crc32)); |
|
||||
|
|
||||
extern int ZEXPORT zipCloseFileInZipRaw64 OF((zipFile file, |
|
||||
ZPOS64_T uncompressed_size, |
|
||||
uLong crc32)); |
|
||||
|
|
||||
/*
|
|
||||
Close the current file in the zipfile, for file opened with |
|
||||
parameter raw=1 in zipOpenNewFileInZip2 |
|
||||
uncompressed_size and crc32 are value for the uncompressed size |
|
||||
*/ |
|
||||
|
|
||||
extern int ZEXPORT zipClose OF((zipFile file, |
|
||||
const char* global_comment)); |
|
||||
/*
|
|
||||
Close the zipfile |
|
||||
*/ |
|
||||
|
|
||||
|
|
||||
extern int ZEXPORT zipRemoveExtraInfoBlock OF((char* pData, int* dataLen, short sHeader)); |
|
||||
/*
|
|
||||
zipRemoveExtraInfoBlock - Added by Mathias Svensson |
|
||||
|
|
||||
Remove extra information block from a extra information data for the local file header or central directory header |
|
||||
|
|
||||
It is needed to remove ZIP64 extra information blocks when before data is written if using RAW mode. |
|
||||
|
|
||||
0x0001 is the signature header for the ZIP64 extra information blocks |
|
||||
|
|
||||
usage. |
|
||||
Remove ZIP64 Extra information from a central director extra field data |
|
||||
zipRemoveExtraInfoBlock(pCenDirExtraFieldData, &nCenDirExtraFieldDataLen, 0x0001); |
|
||||
|
|
||||
Remove ZIP64 Extra information from a Local File Header extra field data |
|
||||
zipRemoveExtraInfoBlock(pLocalHeaderExtraFieldData, &nLocalHeaderExtraFieldDataLen, 0x0001); |
|
||||
*/ |
|
||||
|
|
||||
#ifdef __cplusplus |
|
||||
} |
|
||||
#endif |
|
||||
|
|
||||
#endif /* _zip64_H */ |
|
Loading…
Reference in new issue