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