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