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