1*86ee64e7SAndroid Build Coastguard Worker /* ioapi.h -- IO base function header for compress/uncompress .zip 2*86ee64e7SAndroid Build Coastguard Worker part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html ) 3*86ee64e7SAndroid Build Coastguard Worker 4*86ee64e7SAndroid Build Coastguard Worker Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html ) 5*86ee64e7SAndroid Build Coastguard Worker 6*86ee64e7SAndroid Build Coastguard Worker Modifications for Zip64 support 7*86ee64e7SAndroid Build Coastguard Worker Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com ) 8*86ee64e7SAndroid Build Coastguard Worker 9*86ee64e7SAndroid Build Coastguard Worker For more info read MiniZip_info.txt 10*86ee64e7SAndroid Build Coastguard Worker 11*86ee64e7SAndroid Build Coastguard Worker Changes 12*86ee64e7SAndroid Build Coastguard Worker 13*86ee64e7SAndroid Build Coastguard Worker 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) 14*86ee64e7SAndroid Build Coastguard Worker Oct-2009 - Change to fseeko64, ftello64 and fopen64 so large files would work on linux. 15*86ee64e7SAndroid Build Coastguard Worker More if/def section may be needed to support other platforms 16*86ee64e7SAndroid Build Coastguard Worker Oct-2009 - Defined fxxxx64 calls to normal fopen/ftell/fseek so they would compile on windows. 17*86ee64e7SAndroid Build Coastguard Worker (but you should use iowin32.c for windows instead) 18*86ee64e7SAndroid Build Coastguard Worker 19*86ee64e7SAndroid Build Coastguard Worker */ 20*86ee64e7SAndroid Build Coastguard Worker 21*86ee64e7SAndroid Build Coastguard Worker #ifndef _ZLIBIOAPI64_H 22*86ee64e7SAndroid Build Coastguard Worker #define _ZLIBIOAPI64_H 23*86ee64e7SAndroid Build Coastguard Worker 24*86ee64e7SAndroid Build Coastguard Worker #if (!defined(_WIN32)) && (!defined(WIN32)) && (!defined(__APPLE__)) 25*86ee64e7SAndroid Build Coastguard Worker 26*86ee64e7SAndroid Build Coastguard Worker // Linux needs this to support file operation on files larger then 4+GB 27*86ee64e7SAndroid Build Coastguard Worker // But might need better if/def to select just the platforms that needs them. 28*86ee64e7SAndroid Build Coastguard Worker 29*86ee64e7SAndroid Build Coastguard Worker #ifndef __USE_FILE_OFFSET64 30*86ee64e7SAndroid Build Coastguard Worker #define __USE_FILE_OFFSET64 31*86ee64e7SAndroid Build Coastguard Worker #endif 32*86ee64e7SAndroid Build Coastguard Worker #ifndef __USE_LARGEFILE64 33*86ee64e7SAndroid Build Coastguard Worker #define __USE_LARGEFILE64 34*86ee64e7SAndroid Build Coastguard Worker #endif 35*86ee64e7SAndroid Build Coastguard Worker #ifndef _LARGEFILE64_SOURCE 36*86ee64e7SAndroid Build Coastguard Worker #define _LARGEFILE64_SOURCE 37*86ee64e7SAndroid Build Coastguard Worker #endif 38*86ee64e7SAndroid Build Coastguard Worker #ifndef _FILE_OFFSET_BIT 39*86ee64e7SAndroid Build Coastguard Worker #define _FILE_OFFSET_BIT 64 40*86ee64e7SAndroid Build Coastguard Worker #endif 41*86ee64e7SAndroid Build Coastguard Worker 42*86ee64e7SAndroid Build Coastguard Worker #endif 43*86ee64e7SAndroid Build Coastguard Worker 44*86ee64e7SAndroid Build Coastguard Worker #include <stdio.h> 45*86ee64e7SAndroid Build Coastguard Worker #include <stdlib.h> 46*86ee64e7SAndroid Build Coastguard Worker #include "zlib.h" 47*86ee64e7SAndroid Build Coastguard Worker 48*86ee64e7SAndroid Build Coastguard Worker #if defined(USE_FILE32API) 49*86ee64e7SAndroid Build Coastguard Worker #define fopen64 fopen 50*86ee64e7SAndroid Build Coastguard Worker #define ftello64 ftell 51*86ee64e7SAndroid Build Coastguard Worker #define fseeko64 fseek 52*86ee64e7SAndroid Build Coastguard Worker #else 53*86ee64e7SAndroid Build Coastguard Worker #if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__HAIKU__) || defined(MINIZIP_FOPEN_NO_64) 54*86ee64e7SAndroid Build Coastguard Worker #define fopen64 fopen 55*86ee64e7SAndroid Build Coastguard Worker #define ftello64 ftello 56*86ee64e7SAndroid Build Coastguard Worker #define fseeko64 fseeko 57*86ee64e7SAndroid Build Coastguard Worker #endif 58*86ee64e7SAndroid Build Coastguard Worker #ifdef _MSC_VER 59*86ee64e7SAndroid Build Coastguard Worker #define fopen64 fopen 60*86ee64e7SAndroid Build Coastguard Worker #if (_MSC_VER >= 1400) && (!(defined(NO_MSCVER_FILE64_FUNC))) 61*86ee64e7SAndroid Build Coastguard Worker #define ftello64 _ftelli64 62*86ee64e7SAndroid Build Coastguard Worker #define fseeko64 _fseeki64 63*86ee64e7SAndroid Build Coastguard Worker #else // old MSC 64*86ee64e7SAndroid Build Coastguard Worker #define ftello64 ftell 65*86ee64e7SAndroid Build Coastguard Worker #define fseeko64 fseek 66*86ee64e7SAndroid Build Coastguard Worker #endif 67*86ee64e7SAndroid Build Coastguard Worker #endif 68*86ee64e7SAndroid Build Coastguard Worker #endif 69*86ee64e7SAndroid Build Coastguard Worker 70*86ee64e7SAndroid Build Coastguard Worker /* 71*86ee64e7SAndroid Build Coastguard Worker #ifndef ZPOS64_T 72*86ee64e7SAndroid Build Coastguard Worker #ifdef _WIN32 73*86ee64e7SAndroid Build Coastguard Worker #define ZPOS64_T fpos_t 74*86ee64e7SAndroid Build Coastguard Worker #else 75*86ee64e7SAndroid Build Coastguard Worker #include <stdint.h> 76*86ee64e7SAndroid Build Coastguard Worker #define ZPOS64_T uint64_t 77*86ee64e7SAndroid Build Coastguard Worker #endif 78*86ee64e7SAndroid Build Coastguard Worker #endif 79*86ee64e7SAndroid Build Coastguard Worker */ 80*86ee64e7SAndroid Build Coastguard Worker 81*86ee64e7SAndroid Build Coastguard Worker #ifdef HAVE_MINIZIP64_CONF_H 82*86ee64e7SAndroid Build Coastguard Worker #include "mz64conf.h" 83*86ee64e7SAndroid Build Coastguard Worker #endif 84*86ee64e7SAndroid Build Coastguard Worker 85*86ee64e7SAndroid Build Coastguard Worker /* a type chosen by DEFINE */ 86*86ee64e7SAndroid Build Coastguard Worker #ifdef HAVE_64BIT_INT_CUSTOM 87*86ee64e7SAndroid Build Coastguard Worker typedef 64BIT_INT_CUSTOM_TYPE ZPOS64_T; 88*86ee64e7SAndroid Build Coastguard Worker #else 89*86ee64e7SAndroid Build Coastguard Worker #ifdef HAS_STDINT_H 90*86ee64e7SAndroid Build Coastguard Worker #include "stdint.h" 91*86ee64e7SAndroid Build Coastguard Worker typedef uint64_t ZPOS64_T; 92*86ee64e7SAndroid Build Coastguard Worker #else 93*86ee64e7SAndroid Build Coastguard Worker 94*86ee64e7SAndroid Build Coastguard Worker 95*86ee64e7SAndroid Build Coastguard Worker 96*86ee64e7SAndroid Build Coastguard Worker #if defined(_MSC_VER) || defined(__BORLANDC__) 97*86ee64e7SAndroid Build Coastguard Worker typedef unsigned __int64 ZPOS64_T; 98*86ee64e7SAndroid Build Coastguard Worker #else 99*86ee64e7SAndroid Build Coastguard Worker typedef unsigned long long int ZPOS64_T; 100*86ee64e7SAndroid Build Coastguard Worker #endif 101*86ee64e7SAndroid Build Coastguard Worker #endif 102*86ee64e7SAndroid Build Coastguard Worker #endif 103*86ee64e7SAndroid Build Coastguard Worker 104*86ee64e7SAndroid Build Coastguard Worker /* Maximum unsigned 32-bit value used as placeholder for zip64 */ 105*86ee64e7SAndroid Build Coastguard Worker #ifndef MAXU32 106*86ee64e7SAndroid Build Coastguard Worker #define MAXU32 (0xffffffff) 107*86ee64e7SAndroid Build Coastguard Worker #endif 108*86ee64e7SAndroid Build Coastguard Worker 109*86ee64e7SAndroid Build Coastguard Worker #ifdef __cplusplus 110*86ee64e7SAndroid Build Coastguard Worker extern "C" { 111*86ee64e7SAndroid Build Coastguard Worker #endif 112*86ee64e7SAndroid Build Coastguard Worker 113*86ee64e7SAndroid Build Coastguard Worker 114*86ee64e7SAndroid Build Coastguard Worker #define ZLIB_FILEFUNC_SEEK_CUR (1) 115*86ee64e7SAndroid Build Coastguard Worker #define ZLIB_FILEFUNC_SEEK_END (2) 116*86ee64e7SAndroid Build Coastguard Worker #define ZLIB_FILEFUNC_SEEK_SET (0) 117*86ee64e7SAndroid Build Coastguard Worker 118*86ee64e7SAndroid Build Coastguard Worker #define ZLIB_FILEFUNC_MODE_READ (1) 119*86ee64e7SAndroid Build Coastguard Worker #define ZLIB_FILEFUNC_MODE_WRITE (2) 120*86ee64e7SAndroid Build Coastguard Worker #define ZLIB_FILEFUNC_MODE_READWRITEFILTER (3) 121*86ee64e7SAndroid Build Coastguard Worker 122*86ee64e7SAndroid Build Coastguard Worker #define ZLIB_FILEFUNC_MODE_EXISTING (4) 123*86ee64e7SAndroid Build Coastguard Worker #define ZLIB_FILEFUNC_MODE_CREATE (8) 124*86ee64e7SAndroid Build Coastguard Worker 125*86ee64e7SAndroid Build Coastguard Worker 126*86ee64e7SAndroid Build Coastguard Worker #ifndef ZCALLBACK 127*86ee64e7SAndroid Build Coastguard Worker #if (defined(WIN32) || defined(_WIN32) || defined (WINDOWS) || defined (_WINDOWS)) && defined(CALLBACK) && defined (USEWINDOWS_CALLBACK) 128*86ee64e7SAndroid Build Coastguard Worker #define ZCALLBACK CALLBACK 129*86ee64e7SAndroid Build Coastguard Worker #else 130*86ee64e7SAndroid Build Coastguard Worker #define ZCALLBACK 131*86ee64e7SAndroid Build Coastguard Worker #endif 132*86ee64e7SAndroid Build Coastguard Worker #endif 133*86ee64e7SAndroid Build Coastguard Worker 134*86ee64e7SAndroid Build Coastguard Worker 135*86ee64e7SAndroid Build Coastguard Worker 136*86ee64e7SAndroid Build Coastguard Worker 137*86ee64e7SAndroid Build Coastguard Worker typedef voidpf (ZCALLBACK *open_file_func) (voidpf opaque, const char* filename, int mode); 138*86ee64e7SAndroid Build Coastguard Worker typedef uLong (ZCALLBACK *read_file_func) (voidpf opaque, voidpf stream, void* buf, uLong size); 139*86ee64e7SAndroid Build Coastguard Worker typedef uLong (ZCALLBACK *write_file_func) (voidpf opaque, voidpf stream, const void* buf, uLong size); 140*86ee64e7SAndroid Build Coastguard Worker typedef int (ZCALLBACK *close_file_func) (voidpf opaque, voidpf stream); 141*86ee64e7SAndroid Build Coastguard Worker typedef int (ZCALLBACK *testerror_file_func) (voidpf opaque, voidpf stream); 142*86ee64e7SAndroid Build Coastguard Worker 143*86ee64e7SAndroid Build Coastguard Worker typedef long (ZCALLBACK *tell_file_func) (voidpf opaque, voidpf stream); 144*86ee64e7SAndroid Build Coastguard Worker typedef long (ZCALLBACK *seek_file_func) (voidpf opaque, voidpf stream, uLong offset, int origin); 145*86ee64e7SAndroid Build Coastguard Worker 146*86ee64e7SAndroid Build Coastguard Worker 147*86ee64e7SAndroid Build Coastguard Worker /* here is the "old" 32 bits structure */ 148*86ee64e7SAndroid Build Coastguard Worker typedef struct zlib_filefunc_def_s 149*86ee64e7SAndroid Build Coastguard Worker { 150*86ee64e7SAndroid Build Coastguard Worker open_file_func zopen_file; 151*86ee64e7SAndroid Build Coastguard Worker read_file_func zread_file; 152*86ee64e7SAndroid Build Coastguard Worker write_file_func zwrite_file; 153*86ee64e7SAndroid Build Coastguard Worker tell_file_func ztell_file; 154*86ee64e7SAndroid Build Coastguard Worker seek_file_func zseek_file; 155*86ee64e7SAndroid Build Coastguard Worker close_file_func zclose_file; 156*86ee64e7SAndroid Build Coastguard Worker testerror_file_func zerror_file; 157*86ee64e7SAndroid Build Coastguard Worker voidpf opaque; 158*86ee64e7SAndroid Build Coastguard Worker } zlib_filefunc_def; 159*86ee64e7SAndroid Build Coastguard Worker 160*86ee64e7SAndroid Build Coastguard Worker typedef ZPOS64_T (ZCALLBACK *tell64_file_func) (voidpf opaque, voidpf stream); 161*86ee64e7SAndroid Build Coastguard Worker typedef long (ZCALLBACK *seek64_file_func) (voidpf opaque, voidpf stream, ZPOS64_T offset, int origin); 162*86ee64e7SAndroid Build Coastguard Worker typedef voidpf (ZCALLBACK *open64_file_func) (voidpf opaque, const void* filename, int mode); 163*86ee64e7SAndroid Build Coastguard Worker 164*86ee64e7SAndroid Build Coastguard Worker typedef struct zlib_filefunc64_def_s 165*86ee64e7SAndroid Build Coastguard Worker { 166*86ee64e7SAndroid Build Coastguard Worker open64_file_func zopen64_file; 167*86ee64e7SAndroid Build Coastguard Worker read_file_func zread_file; 168*86ee64e7SAndroid Build Coastguard Worker write_file_func zwrite_file; 169*86ee64e7SAndroid Build Coastguard Worker tell64_file_func ztell64_file; 170*86ee64e7SAndroid Build Coastguard Worker seek64_file_func zseek64_file; 171*86ee64e7SAndroid Build Coastguard Worker close_file_func zclose_file; 172*86ee64e7SAndroid Build Coastguard Worker testerror_file_func zerror_file; 173*86ee64e7SAndroid Build Coastguard Worker voidpf opaque; 174*86ee64e7SAndroid Build Coastguard Worker } zlib_filefunc64_def; 175*86ee64e7SAndroid Build Coastguard Worker 176*86ee64e7SAndroid Build Coastguard Worker void fill_fopen64_filefunc(zlib_filefunc64_def* pzlib_filefunc_def); 177*86ee64e7SAndroid Build Coastguard Worker void fill_fopen_filefunc(zlib_filefunc_def* pzlib_filefunc_def); 178*86ee64e7SAndroid Build Coastguard Worker 179*86ee64e7SAndroid Build Coastguard Worker /* now internal definition, only for zip.c and unzip.h */ 180*86ee64e7SAndroid Build Coastguard Worker typedef struct zlib_filefunc64_32_def_s 181*86ee64e7SAndroid Build Coastguard Worker { 182*86ee64e7SAndroid Build Coastguard Worker zlib_filefunc64_def zfile_func64; 183*86ee64e7SAndroid Build Coastguard Worker open_file_func zopen32_file; 184*86ee64e7SAndroid Build Coastguard Worker tell_file_func ztell32_file; 185*86ee64e7SAndroid Build Coastguard Worker seek_file_func zseek32_file; 186*86ee64e7SAndroid Build Coastguard Worker } zlib_filefunc64_32_def; 187*86ee64e7SAndroid Build Coastguard Worker 188*86ee64e7SAndroid Build Coastguard Worker 189*86ee64e7SAndroid Build Coastguard Worker #define ZREAD64(filefunc,filestream,buf,size) ((*((filefunc).zfile_func64.zread_file)) ((filefunc).zfile_func64.opaque,filestream,buf,size)) 190*86ee64e7SAndroid Build Coastguard Worker #define ZWRITE64(filefunc,filestream,buf,size) ((*((filefunc).zfile_func64.zwrite_file)) ((filefunc).zfile_func64.opaque,filestream,buf,size)) 191*86ee64e7SAndroid Build Coastguard Worker //#define ZTELL64(filefunc,filestream) ((*((filefunc).ztell64_file)) ((filefunc).opaque,filestream)) 192*86ee64e7SAndroid Build Coastguard Worker //#define ZSEEK64(filefunc,filestream,pos,mode) ((*((filefunc).zseek64_file)) ((filefunc).opaque,filestream,pos,mode)) 193*86ee64e7SAndroid Build Coastguard Worker #define ZCLOSE64(filefunc,filestream) ((*((filefunc).zfile_func64.zclose_file)) ((filefunc).zfile_func64.opaque,filestream)) 194*86ee64e7SAndroid Build Coastguard Worker #define ZERROR64(filefunc,filestream) ((*((filefunc).zfile_func64.zerror_file)) ((filefunc).zfile_func64.opaque,filestream)) 195*86ee64e7SAndroid Build Coastguard Worker 196*86ee64e7SAndroid Build Coastguard Worker voidpf call_zopen64(const zlib_filefunc64_32_def* pfilefunc,const void*filename,int mode); 197*86ee64e7SAndroid Build Coastguard Worker long call_zseek64(const zlib_filefunc64_32_def* pfilefunc,voidpf filestream, ZPOS64_T offset, int origin); 198*86ee64e7SAndroid Build Coastguard Worker ZPOS64_T call_ztell64(const zlib_filefunc64_32_def* pfilefunc,voidpf filestream); 199*86ee64e7SAndroid Build Coastguard Worker 200*86ee64e7SAndroid Build Coastguard Worker void fill_zlib_filefunc64_32_def_from_filefunc32(zlib_filefunc64_32_def* p_filefunc64_32,const zlib_filefunc_def* p_filefunc32); 201*86ee64e7SAndroid Build Coastguard Worker 202*86ee64e7SAndroid Build Coastguard Worker #define ZOPEN64(filefunc,filename,mode) (call_zopen64((&(filefunc)),(filename),(mode))) 203*86ee64e7SAndroid Build Coastguard Worker #define ZTELL64(filefunc,filestream) (call_ztell64((&(filefunc)),(filestream))) 204*86ee64e7SAndroid Build Coastguard Worker #define ZSEEK64(filefunc,filestream,pos,mode) (call_zseek64((&(filefunc)),(filestream),(pos),(mode))) 205*86ee64e7SAndroid Build Coastguard Worker 206*86ee64e7SAndroid Build Coastguard Worker #ifdef __cplusplus 207*86ee64e7SAndroid Build Coastguard Worker } 208*86ee64e7SAndroid Build Coastguard Worker #endif 209*86ee64e7SAndroid Build Coastguard Worker 210*86ee64e7SAndroid Build Coastguard Worker #endif 211