cannam@89
|
1 /* iowin32.c -- IO base function header for compress/uncompress .zip
|
cannam@89
|
2 Version 1.1, February 14h, 2010
|
cannam@89
|
3 part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )
|
cannam@89
|
4
|
cannam@89
|
5 Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )
|
cannam@89
|
6
|
cannam@89
|
7 Modifications for Zip64 support
|
cannam@89
|
8 Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )
|
cannam@89
|
9
|
cannam@89
|
10 For more info read MiniZip_info.txt
|
cannam@89
|
11
|
cannam@89
|
12 */
|
cannam@89
|
13
|
cannam@89
|
14 #include <stdlib.h>
|
cannam@89
|
15
|
cannam@89
|
16 #include "zlib.h"
|
cannam@89
|
17 #include "ioapi.h"
|
cannam@89
|
18 #include "iowin32.h"
|
cannam@89
|
19
|
cannam@89
|
20 #ifndef INVALID_HANDLE_VALUE
|
cannam@89
|
21 #define INVALID_HANDLE_VALUE (0xFFFFFFFF)
|
cannam@89
|
22 #endif
|
cannam@89
|
23
|
cannam@89
|
24 #ifndef INVALID_SET_FILE_POINTER
|
cannam@89
|
25 #define INVALID_SET_FILE_POINTER ((DWORD)-1)
|
cannam@89
|
26 #endif
|
cannam@89
|
27
|
cannam@89
|
28 voidpf ZCALLBACK win32_open_file_func OF((voidpf opaque, const char* filename, int mode));
|
cannam@89
|
29 uLong ZCALLBACK win32_read_file_func OF((voidpf opaque, voidpf stream, void* buf, uLong size));
|
cannam@89
|
30 uLong ZCALLBACK win32_write_file_func OF((voidpf opaque, voidpf stream, const void* buf, uLong size));
|
cannam@89
|
31 ZPOS64_T ZCALLBACK win32_tell64_file_func OF((voidpf opaque, voidpf stream));
|
cannam@89
|
32 long ZCALLBACK win32_seek64_file_func OF((voidpf opaque, voidpf stream, ZPOS64_T offset, int origin));
|
cannam@89
|
33 int ZCALLBACK win32_close_file_func OF((voidpf opaque, voidpf stream));
|
cannam@89
|
34 int ZCALLBACK win32_error_file_func OF((voidpf opaque, voidpf stream));
|
cannam@89
|
35
|
cannam@89
|
36 typedef struct
|
cannam@89
|
37 {
|
cannam@89
|
38 HANDLE hf;
|
cannam@89
|
39 int error;
|
cannam@89
|
40 } WIN32FILE_IOWIN;
|
cannam@89
|
41
|
cannam@89
|
42
|
cannam@89
|
43 static void win32_translate_open_mode(int mode,
|
cannam@89
|
44 DWORD* lpdwDesiredAccess,
|
cannam@89
|
45 DWORD* lpdwCreationDisposition,
|
cannam@89
|
46 DWORD* lpdwShareMode,
|
cannam@89
|
47 DWORD* lpdwFlagsAndAttributes)
|
cannam@89
|
48 {
|
cannam@89
|
49 *lpdwDesiredAccess = *lpdwShareMode = *lpdwFlagsAndAttributes = *lpdwCreationDisposition = 0;
|
cannam@89
|
50
|
cannam@89
|
51 if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ)
|
cannam@89
|
52 {
|
cannam@89
|
53 *lpdwDesiredAccess = GENERIC_READ;
|
cannam@89
|
54 *lpdwCreationDisposition = OPEN_EXISTING;
|
cannam@89
|
55 *lpdwShareMode = FILE_SHARE_READ;
|
cannam@89
|
56 }
|
cannam@89
|
57 else if (mode & ZLIB_FILEFUNC_MODE_EXISTING)
|
cannam@89
|
58 {
|
cannam@89
|
59 *lpdwDesiredAccess = GENERIC_WRITE | GENERIC_READ;
|
cannam@89
|
60 *lpdwCreationDisposition = OPEN_EXISTING;
|
cannam@89
|
61 }
|
cannam@89
|
62 else if (mode & ZLIB_FILEFUNC_MODE_CREATE)
|
cannam@89
|
63 {
|
cannam@89
|
64 *lpdwDesiredAccess = GENERIC_WRITE | GENERIC_READ;
|
cannam@89
|
65 *lpdwCreationDisposition = CREATE_ALWAYS;
|
cannam@89
|
66 }
|
cannam@89
|
67 }
|
cannam@89
|
68
|
cannam@89
|
69 static voidpf win32_build_iowin(HANDLE hFile)
|
cannam@89
|
70 {
|
cannam@89
|
71 voidpf ret=NULL;
|
cannam@89
|
72
|
cannam@89
|
73 if ((hFile != NULL) && (hFile != INVALID_HANDLE_VALUE))
|
cannam@89
|
74 {
|
cannam@89
|
75 WIN32FILE_IOWIN w32fiow;
|
cannam@89
|
76 w32fiow.hf = hFile;
|
cannam@89
|
77 w32fiow.error = 0;
|
cannam@89
|
78 ret = malloc(sizeof(WIN32FILE_IOWIN));
|
cannam@89
|
79
|
cannam@89
|
80 if (ret==NULL)
|
cannam@89
|
81 CloseHandle(hFile);
|
cannam@89
|
82 else
|
cannam@89
|
83 *((WIN32FILE_IOWIN*)ret) = w32fiow;
|
cannam@89
|
84 }
|
cannam@89
|
85 return ret;
|
cannam@89
|
86 }
|
cannam@89
|
87
|
cannam@89
|
88 voidpf ZCALLBACK win32_open64_file_func (voidpf opaque,const void* filename,int mode)
|
cannam@89
|
89 {
|
cannam@89
|
90 const char* mode_fopen = NULL;
|
cannam@89
|
91 DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ;
|
cannam@89
|
92 HANDLE hFile = NULL;
|
cannam@89
|
93
|
cannam@89
|
94 win32_translate_open_mode(mode,&dwDesiredAccess,&dwCreationDisposition,&dwShareMode,&dwFlagsAndAttributes);
|
cannam@89
|
95
|
cannam@89
|
96 if ((filename!=NULL) && (dwDesiredAccess != 0))
|
cannam@89
|
97 hFile = CreateFile((LPCTSTR)filename, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, dwFlagsAndAttributes, NULL);
|
cannam@89
|
98
|
cannam@89
|
99 return win32_build_iowin(hFile);
|
cannam@89
|
100 }
|
cannam@89
|
101
|
cannam@89
|
102
|
cannam@89
|
103 voidpf ZCALLBACK win32_open64_file_funcA (voidpf opaque,const void* filename,int mode)
|
cannam@89
|
104 {
|
cannam@89
|
105 const char* mode_fopen = NULL;
|
cannam@89
|
106 DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ;
|
cannam@89
|
107 HANDLE hFile = NULL;
|
cannam@89
|
108
|
cannam@89
|
109 win32_translate_open_mode(mode,&dwDesiredAccess,&dwCreationDisposition,&dwShareMode,&dwFlagsAndAttributes);
|
cannam@89
|
110
|
cannam@89
|
111 if ((filename!=NULL) && (dwDesiredAccess != 0))
|
cannam@89
|
112 hFile = CreateFileA((LPCSTR)filename, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, dwFlagsAndAttributes, NULL);
|
cannam@89
|
113
|
cannam@89
|
114 return win32_build_iowin(hFile);
|
cannam@89
|
115 }
|
cannam@89
|
116
|
cannam@89
|
117
|
cannam@89
|
118 voidpf ZCALLBACK win32_open64_file_funcW (voidpf opaque,const void* filename,int mode)
|
cannam@89
|
119 {
|
cannam@89
|
120 const char* mode_fopen = NULL;
|
cannam@89
|
121 DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ;
|
cannam@89
|
122 HANDLE hFile = NULL;
|
cannam@89
|
123
|
cannam@89
|
124 win32_translate_open_mode(mode,&dwDesiredAccess,&dwCreationDisposition,&dwShareMode,&dwFlagsAndAttributes);
|
cannam@89
|
125
|
cannam@89
|
126 if ((filename!=NULL) && (dwDesiredAccess != 0))
|
cannam@89
|
127 hFile = CreateFileW((LPCWSTR)filename, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, dwFlagsAndAttributes, NULL);
|
cannam@89
|
128
|
cannam@89
|
129 return win32_build_iowin(hFile);
|
cannam@89
|
130 }
|
cannam@89
|
131
|
cannam@89
|
132
|
cannam@89
|
133 voidpf ZCALLBACK win32_open_file_func (voidpf opaque,const char* filename,int mode)
|
cannam@89
|
134 {
|
cannam@89
|
135 const char* mode_fopen = NULL;
|
cannam@89
|
136 DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ;
|
cannam@89
|
137 HANDLE hFile = NULL;
|
cannam@89
|
138
|
cannam@89
|
139 win32_translate_open_mode(mode,&dwDesiredAccess,&dwCreationDisposition,&dwShareMode,&dwFlagsAndAttributes);
|
cannam@89
|
140
|
cannam@89
|
141 if ((filename!=NULL) && (dwDesiredAccess != 0))
|
cannam@89
|
142 hFile = CreateFile((LPCTSTR)filename, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, dwFlagsAndAttributes, NULL);
|
cannam@89
|
143
|
cannam@89
|
144 return win32_build_iowin(hFile);
|
cannam@89
|
145 }
|
cannam@89
|
146
|
cannam@89
|
147
|
cannam@89
|
148 uLong ZCALLBACK win32_read_file_func (voidpf opaque, voidpf stream, void* buf,uLong size)
|
cannam@89
|
149 {
|
cannam@89
|
150 uLong ret=0;
|
cannam@89
|
151 HANDLE hFile = NULL;
|
cannam@89
|
152 if (stream!=NULL)
|
cannam@89
|
153 hFile = ((WIN32FILE_IOWIN*)stream) -> hf;
|
cannam@89
|
154
|
cannam@89
|
155 if (hFile != NULL)
|
cannam@89
|
156 {
|
cannam@89
|
157 if (!ReadFile(hFile, buf, size, &ret, NULL))
|
cannam@89
|
158 {
|
cannam@89
|
159 DWORD dwErr = GetLastError();
|
cannam@89
|
160 if (dwErr == ERROR_HANDLE_EOF)
|
cannam@89
|
161 dwErr = 0;
|
cannam@89
|
162 ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr;
|
cannam@89
|
163 }
|
cannam@89
|
164 }
|
cannam@89
|
165
|
cannam@89
|
166 return ret;
|
cannam@89
|
167 }
|
cannam@89
|
168
|
cannam@89
|
169
|
cannam@89
|
170 uLong ZCALLBACK win32_write_file_func (voidpf opaque,voidpf stream,const void* buf,uLong size)
|
cannam@89
|
171 {
|
cannam@89
|
172 uLong ret=0;
|
cannam@89
|
173 HANDLE hFile = NULL;
|
cannam@89
|
174 if (stream!=NULL)
|
cannam@89
|
175 hFile = ((WIN32FILE_IOWIN*)stream) -> hf;
|
cannam@89
|
176
|
cannam@89
|
177 if (hFile != NULL)
|
cannam@89
|
178 {
|
cannam@89
|
179 if (!WriteFile(hFile, buf, size, &ret, NULL))
|
cannam@89
|
180 {
|
cannam@89
|
181 DWORD dwErr = GetLastError();
|
cannam@89
|
182 if (dwErr == ERROR_HANDLE_EOF)
|
cannam@89
|
183 dwErr = 0;
|
cannam@89
|
184 ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr;
|
cannam@89
|
185 }
|
cannam@89
|
186 }
|
cannam@89
|
187
|
cannam@89
|
188 return ret;
|
cannam@89
|
189 }
|
cannam@89
|
190
|
cannam@89
|
191 long ZCALLBACK win32_tell_file_func (voidpf opaque,voidpf stream)
|
cannam@89
|
192 {
|
cannam@89
|
193 long ret=-1;
|
cannam@89
|
194 HANDLE hFile = NULL;
|
cannam@89
|
195 if (stream!=NULL)
|
cannam@89
|
196 hFile = ((WIN32FILE_IOWIN*)stream) -> hf;
|
cannam@89
|
197 if (hFile != NULL)
|
cannam@89
|
198 {
|
cannam@89
|
199 DWORD dwSet = SetFilePointer(hFile, 0, NULL, FILE_CURRENT);
|
cannam@89
|
200 if (dwSet == INVALID_SET_FILE_POINTER)
|
cannam@89
|
201 {
|
cannam@89
|
202 DWORD dwErr = GetLastError();
|
cannam@89
|
203 ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr;
|
cannam@89
|
204 ret = -1;
|
cannam@89
|
205 }
|
cannam@89
|
206 else
|
cannam@89
|
207 ret=(long)dwSet;
|
cannam@89
|
208 }
|
cannam@89
|
209 return ret;
|
cannam@89
|
210 }
|
cannam@89
|
211
|
cannam@89
|
212 ZPOS64_T ZCALLBACK win32_tell64_file_func (voidpf opaque, voidpf stream)
|
cannam@89
|
213 {
|
cannam@89
|
214 ZPOS64_T ret= (ZPOS64_T)-1;
|
cannam@89
|
215 HANDLE hFile = NULL;
|
cannam@89
|
216 if (stream!=NULL)
|
cannam@89
|
217 hFile = ((WIN32FILE_IOWIN*)stream)->hf;
|
cannam@89
|
218
|
cannam@89
|
219 if (hFile)
|
cannam@89
|
220 {
|
cannam@89
|
221 LARGE_INTEGER li;
|
cannam@89
|
222 li.QuadPart = 0;
|
cannam@89
|
223 li.u.LowPart = SetFilePointer(hFile, li.u.LowPart, &li.u.HighPart, FILE_CURRENT);
|
cannam@89
|
224 if ( (li.LowPart == 0xFFFFFFFF) && (GetLastError() != NO_ERROR))
|
cannam@89
|
225 {
|
cannam@89
|
226 DWORD dwErr = GetLastError();
|
cannam@89
|
227 ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr;
|
cannam@89
|
228 ret = (ZPOS64_T)-1;
|
cannam@89
|
229 }
|
cannam@89
|
230 else
|
cannam@89
|
231 ret=li.QuadPart;
|
cannam@89
|
232 }
|
cannam@89
|
233 return ret;
|
cannam@89
|
234 }
|
cannam@89
|
235
|
cannam@89
|
236
|
cannam@89
|
237 long ZCALLBACK win32_seek_file_func (voidpf opaque,voidpf stream,uLong offset,int origin)
|
cannam@89
|
238 {
|
cannam@89
|
239 DWORD dwMoveMethod=0xFFFFFFFF;
|
cannam@89
|
240 HANDLE hFile = NULL;
|
cannam@89
|
241
|
cannam@89
|
242 long ret=-1;
|
cannam@89
|
243 if (stream!=NULL)
|
cannam@89
|
244 hFile = ((WIN32FILE_IOWIN*)stream) -> hf;
|
cannam@89
|
245 switch (origin)
|
cannam@89
|
246 {
|
cannam@89
|
247 case ZLIB_FILEFUNC_SEEK_CUR :
|
cannam@89
|
248 dwMoveMethod = FILE_CURRENT;
|
cannam@89
|
249 break;
|
cannam@89
|
250 case ZLIB_FILEFUNC_SEEK_END :
|
cannam@89
|
251 dwMoveMethod = FILE_END;
|
cannam@89
|
252 break;
|
cannam@89
|
253 case ZLIB_FILEFUNC_SEEK_SET :
|
cannam@89
|
254 dwMoveMethod = FILE_BEGIN;
|
cannam@89
|
255 break;
|
cannam@89
|
256 default: return -1;
|
cannam@89
|
257 }
|
cannam@89
|
258
|
cannam@89
|
259 if (hFile != NULL)
|
cannam@89
|
260 {
|
cannam@89
|
261 DWORD dwSet = SetFilePointer(hFile, offset, NULL, dwMoveMethod);
|
cannam@89
|
262 if (dwSet == INVALID_SET_FILE_POINTER)
|
cannam@89
|
263 {
|
cannam@89
|
264 DWORD dwErr = GetLastError();
|
cannam@89
|
265 ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr;
|
cannam@89
|
266 ret = -1;
|
cannam@89
|
267 }
|
cannam@89
|
268 else
|
cannam@89
|
269 ret=0;
|
cannam@89
|
270 }
|
cannam@89
|
271 return ret;
|
cannam@89
|
272 }
|
cannam@89
|
273
|
cannam@89
|
274 long ZCALLBACK win32_seek64_file_func (voidpf opaque, voidpf stream,ZPOS64_T offset,int origin)
|
cannam@89
|
275 {
|
cannam@89
|
276 DWORD dwMoveMethod=0xFFFFFFFF;
|
cannam@89
|
277 HANDLE hFile = NULL;
|
cannam@89
|
278 long ret=-1;
|
cannam@89
|
279
|
cannam@89
|
280 if (stream!=NULL)
|
cannam@89
|
281 hFile = ((WIN32FILE_IOWIN*)stream)->hf;
|
cannam@89
|
282
|
cannam@89
|
283 switch (origin)
|
cannam@89
|
284 {
|
cannam@89
|
285 case ZLIB_FILEFUNC_SEEK_CUR :
|
cannam@89
|
286 dwMoveMethod = FILE_CURRENT;
|
cannam@89
|
287 break;
|
cannam@89
|
288 case ZLIB_FILEFUNC_SEEK_END :
|
cannam@89
|
289 dwMoveMethod = FILE_END;
|
cannam@89
|
290 break;
|
cannam@89
|
291 case ZLIB_FILEFUNC_SEEK_SET :
|
cannam@89
|
292 dwMoveMethod = FILE_BEGIN;
|
cannam@89
|
293 break;
|
cannam@89
|
294 default: return -1;
|
cannam@89
|
295 }
|
cannam@89
|
296
|
cannam@89
|
297 if (hFile)
|
cannam@89
|
298 {
|
cannam@89
|
299 LARGE_INTEGER* li = (LARGE_INTEGER*)&offset;
|
cannam@89
|
300 DWORD dwSet = SetFilePointer(hFile, li->u.LowPart, &li->u.HighPart, dwMoveMethod);
|
cannam@89
|
301 if (dwSet == INVALID_SET_FILE_POINTER)
|
cannam@89
|
302 {
|
cannam@89
|
303 DWORD dwErr = GetLastError();
|
cannam@89
|
304 ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr;
|
cannam@89
|
305 ret = -1;
|
cannam@89
|
306 }
|
cannam@89
|
307 else
|
cannam@89
|
308 ret=0;
|
cannam@89
|
309 }
|
cannam@89
|
310 return ret;
|
cannam@89
|
311 }
|
cannam@89
|
312
|
cannam@89
|
313 int ZCALLBACK win32_close_file_func (voidpf opaque, voidpf stream)
|
cannam@89
|
314 {
|
cannam@89
|
315 int ret=-1;
|
cannam@89
|
316
|
cannam@89
|
317 if (stream!=NULL)
|
cannam@89
|
318 {
|
cannam@89
|
319 HANDLE hFile;
|
cannam@89
|
320 hFile = ((WIN32FILE_IOWIN*)stream) -> hf;
|
cannam@89
|
321 if (hFile != NULL)
|
cannam@89
|
322 {
|
cannam@89
|
323 CloseHandle(hFile);
|
cannam@89
|
324 ret=0;
|
cannam@89
|
325 }
|
cannam@89
|
326 free(stream);
|
cannam@89
|
327 }
|
cannam@89
|
328 return ret;
|
cannam@89
|
329 }
|
cannam@89
|
330
|
cannam@89
|
331 int ZCALLBACK win32_error_file_func (voidpf opaque,voidpf stream)
|
cannam@89
|
332 {
|
cannam@89
|
333 int ret=-1;
|
cannam@89
|
334 if (stream!=NULL)
|
cannam@89
|
335 {
|
cannam@89
|
336 ret = ((WIN32FILE_IOWIN*)stream) -> error;
|
cannam@89
|
337 }
|
cannam@89
|
338 return ret;
|
cannam@89
|
339 }
|
cannam@89
|
340
|
cannam@89
|
341 void fill_win32_filefunc (zlib_filefunc_def* pzlib_filefunc_def)
|
cannam@89
|
342 {
|
cannam@89
|
343 pzlib_filefunc_def->zopen_file = win32_open_file_func;
|
cannam@89
|
344 pzlib_filefunc_def->zread_file = win32_read_file_func;
|
cannam@89
|
345 pzlib_filefunc_def->zwrite_file = win32_write_file_func;
|
cannam@89
|
346 pzlib_filefunc_def->ztell_file = win32_tell_file_func;
|
cannam@89
|
347 pzlib_filefunc_def->zseek_file = win32_seek_file_func;
|
cannam@89
|
348 pzlib_filefunc_def->zclose_file = win32_close_file_func;
|
cannam@89
|
349 pzlib_filefunc_def->zerror_file = win32_error_file_func;
|
cannam@89
|
350 pzlib_filefunc_def->opaque = NULL;
|
cannam@89
|
351 }
|
cannam@89
|
352
|
cannam@89
|
353 void fill_win32_filefunc64(zlib_filefunc64_def* pzlib_filefunc_def)
|
cannam@89
|
354 {
|
cannam@89
|
355 pzlib_filefunc_def->zopen64_file = win32_open64_file_func;
|
cannam@89
|
356 pzlib_filefunc_def->zread_file = win32_read_file_func;
|
cannam@89
|
357 pzlib_filefunc_def->zwrite_file = win32_write_file_func;
|
cannam@89
|
358 pzlib_filefunc_def->ztell64_file = win32_tell64_file_func;
|
cannam@89
|
359 pzlib_filefunc_def->zseek64_file = win32_seek64_file_func;
|
cannam@89
|
360 pzlib_filefunc_def->zclose_file = win32_close_file_func;
|
cannam@89
|
361 pzlib_filefunc_def->zerror_file = win32_error_file_func;
|
cannam@89
|
362 pzlib_filefunc_def->opaque = NULL;
|
cannam@89
|
363 }
|
cannam@89
|
364
|
cannam@89
|
365
|
cannam@89
|
366 void fill_win32_filefunc64A(zlib_filefunc64_def* pzlib_filefunc_def)
|
cannam@89
|
367 {
|
cannam@89
|
368 pzlib_filefunc_def->zopen64_file = win32_open64_file_funcA;
|
cannam@89
|
369 pzlib_filefunc_def->zread_file = win32_read_file_func;
|
cannam@89
|
370 pzlib_filefunc_def->zwrite_file = win32_write_file_func;
|
cannam@89
|
371 pzlib_filefunc_def->ztell64_file = win32_tell64_file_func;
|
cannam@89
|
372 pzlib_filefunc_def->zseek64_file = win32_seek64_file_func;
|
cannam@89
|
373 pzlib_filefunc_def->zclose_file = win32_close_file_func;
|
cannam@89
|
374 pzlib_filefunc_def->zerror_file = win32_error_file_func;
|
cannam@89
|
375 pzlib_filefunc_def->opaque = NULL;
|
cannam@89
|
376 }
|
cannam@89
|
377
|
cannam@89
|
378
|
cannam@89
|
379 void fill_win32_filefunc64W(zlib_filefunc64_def* pzlib_filefunc_def)
|
cannam@89
|
380 {
|
cannam@89
|
381 pzlib_filefunc_def->zopen64_file = win32_open64_file_funcW;
|
cannam@89
|
382 pzlib_filefunc_def->zread_file = win32_read_file_func;
|
cannam@89
|
383 pzlib_filefunc_def->zwrite_file = win32_write_file_func;
|
cannam@89
|
384 pzlib_filefunc_def->ztell64_file = win32_tell64_file_func;
|
cannam@89
|
385 pzlib_filefunc_def->zseek64_file = win32_seek64_file_func;
|
cannam@89
|
386 pzlib_filefunc_def->zclose_file = win32_close_file_func;
|
cannam@89
|
387 pzlib_filefunc_def->zerror_file = win32_error_file_func;
|
cannam@89
|
388 pzlib_filefunc_def->opaque = NULL;
|
cannam@89
|
389 }
|