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