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