20#ifndef INVALID_HANDLE_VALUE
21#define INVALID_HANDLE_VALUE (0xFFFFFFFF)
24#ifndef INVALID_SET_FILE_POINTER
25#define INVALID_SET_FILE_POINTER ((DWORD)-1)
30#if defined(WINAPI_FAMILY_PARTITION) && (!(defined(IOWIN32_USING_WINRT_API)))
32#if !defined(WINAPI_FAMILY_ONE_PARTITION)
33#define WINAPI_FAMILY_ONE_PARTITION(PartitionSet, Partition) ((WINAPI_FAMILY & PartitionSet) == Partition)
36#if WINAPI_FAMILY_ONE_PARTITION(WINAPI_FAMILY, WINAPI_PARTITION_APP)
37#define IOWIN32_USING_WINRT_API 1
56static void win32_translate_open_mode(
int mode,
57 DWORD* lpdwDesiredAccess,
58 DWORD* lpdwCreationDisposition,
60 DWORD* lpdwFlagsAndAttributes)
62 *lpdwDesiredAccess = *lpdwShareMode = *lpdwFlagsAndAttributes = *lpdwCreationDisposition = 0;
66 *lpdwDesiredAccess = GENERIC_READ;
67 *lpdwCreationDisposition = OPEN_EXISTING;
68 *lpdwShareMode = FILE_SHARE_READ;
72 *lpdwDesiredAccess = GENERIC_WRITE | GENERIC_READ;
73 *lpdwCreationDisposition = OPEN_EXISTING;
77 *lpdwDesiredAccess = GENERIC_WRITE | GENERIC_READ;
78 *lpdwCreationDisposition = CREATE_ALWAYS;
82static voidpf win32_build_iowin(HANDLE hFile)
103 const char* mode_fopen =
NULL;
104 DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ;
107 win32_translate_open_mode(
mode,&dwDesiredAccess,&dwCreationDisposition,&dwShareMode,&dwFlagsAndAttributes);
109#ifdef IOWIN32_USING_WINRT_API
112 hFile = CreateFile2((LPCTSTR)
filename, dwDesiredAccess, dwShareMode, dwCreationDisposition,
NULL);
116 WCHAR filenameW[FILENAME_MAX + 0x200 + 1];
117 MultiByteToWideChar(CP_ACP,0,(
const char*)
filename,-1,filenameW,FILENAME_MAX + 0x200);
118 hFile = CreateFile2(filenameW, dwDesiredAccess, dwShareMode, dwCreationDisposition,
NULL);
123 hFile = CreateFile((LPCTSTR)
filename, dwDesiredAccess, dwShareMode,
NULL, dwCreationDisposition, dwFlagsAndAttributes,
NULL);
126 return win32_build_iowin(hFile);
132 const char* mode_fopen =
NULL;
133 DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ;
136 win32_translate_open_mode(
mode,&dwDesiredAccess,&dwCreationDisposition,&dwShareMode,&dwFlagsAndAttributes);
138#ifdef IOWIN32_USING_WINRT_API
141 WCHAR filenameW[FILENAME_MAX + 0x200 + 1];
142 MultiByteToWideChar(CP_ACP,0,(
const char*)
filename,-1,filenameW,FILENAME_MAX + 0x200);
143 hFile = CreateFile2(filenameW, dwDesiredAccess, dwShareMode, dwCreationDisposition,
NULL);
147 hFile = CreateFileA((LPCSTR)
filename, dwDesiredAccess, dwShareMode,
NULL, dwCreationDisposition, dwFlagsAndAttributes,
NULL);
150 return win32_build_iowin(hFile);
156 const char* mode_fopen =
NULL;
157 DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ;
160 win32_translate_open_mode(
mode,&dwDesiredAccess,&dwCreationDisposition,&dwShareMode,&dwFlagsAndAttributes);
162#ifdef IOWIN32_USING_WINRT_API
164 hFile = CreateFile2((LPCWSTR)
filename, dwDesiredAccess, dwShareMode, dwCreationDisposition,
NULL);
167 hFile = CreateFileW((LPCWSTR)
filename, dwDesiredAccess, dwShareMode,
NULL, dwCreationDisposition, dwFlagsAndAttributes,
NULL);
170 return win32_build_iowin(hFile);
176 const char* mode_fopen =
NULL;
177 DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ;
180 win32_translate_open_mode(
mode,&dwDesiredAccess,&dwCreationDisposition,&dwShareMode,&dwFlagsAndAttributes);
182#ifdef IOWIN32_USING_WINRT_API
185 hFile = CreateFile2((LPCTSTR)
filename, dwDesiredAccess, dwShareMode, dwCreationDisposition,
NULL);
189 WCHAR filenameW[FILENAME_MAX + 0x200 + 1];
190 MultiByteToWideChar(CP_ACP,0,(
const char*)
filename,-1,filenameW,FILENAME_MAX + 0x200);
191 hFile = CreateFile2(filenameW, dwDesiredAccess, dwShareMode, dwCreationDisposition,
NULL);
196 hFile = CreateFile((LPCTSTR)
filename, dwDesiredAccess, dwShareMode,
NULL, dwCreationDisposition, dwFlagsAndAttributes,
NULL);
199 return win32_build_iowin(hFile);
214 DWORD dwErr = GetLastError();
215 if (dwErr == ERROR_HANDLE_EOF)
236 DWORD dwErr = GetLastError();
237 if (dwErr == ERROR_HANDLE_EOF)
246static BOOL MySetFilePointerEx(HANDLE hFile, LARGE_INTEGER pos, LARGE_INTEGER *newPos,
DWORD dwMoveMethod)
248#ifdef IOWIN32_USING_WINRT_API
249 return SetFilePointerEx(hFile, pos, newPos, dwMoveMethod);
251 LONG lHigh = pos.HighPart;
252 DWORD dwNewPos = SetFilePointer(hFile, pos.LowPart, &lHigh, dwMoveMethod);
254 if (dwNewPos == 0xFFFFFFFF)
255 if (GetLastError() != NO_ERROR)
257 if ((newPos !=
NULL) && (fOk))
259 newPos->LowPart = dwNewPos;
260 newPos->HighPart = lHigh;
277 if (!MySetFilePointerEx(hFile, pos, &pos, FILE_CURRENT))
279 DWORD dwErr = GetLastError();
284 ret=(
long)pos.LowPart;
301 if (!MySetFilePointerEx(hFile, pos, &pos, FILE_CURRENT))
303 DWORD dwErr = GetLastError();
316 DWORD dwMoveMethod=0xFFFFFFFF;
325 dwMoveMethod = FILE_CURRENT;
328 dwMoveMethod = FILE_END;
331 dwMoveMethod = FILE_BEGIN;
340 if (!MySetFilePointerEx(hFile, pos,
NULL, dwMoveMethod))
342 DWORD dwErr = GetLastError();
354 DWORD dwMoveMethod=0xFFFFFFFF;
364 dwMoveMethod = FILE_CURRENT;
367 dwMoveMethod = FILE_END;
370 dwMoveMethod = FILE_BEGIN;
379 if (!MySetFilePointerEx(hFile, pos,
NULL, dwMoveMethod))
381 DWORD dwErr = GetLastError();
#define ZLIB_FILEFUNC_MODE_READWRITEFILTER
typedef long(ZCALLBACK *tell_file_func) OF((voidpf opaque
unsigned __int64 ZPOS64_T
#define ZLIB_FILEFUNC_MODE_EXISTING
#define ZLIB_FILEFUNC_SEEK_CUR
typedef int(ZCALLBACK *close_file_func) OF((voidpf opaque
#define ZLIB_FILEFUNC_SEEK_SET
#define ZLIB_FILEFUNC_MODE_CREATE
#define ZLIB_FILEFUNC_SEEK_END
#define ZLIB_FILEFUNC_MODE_READ
void fill_win32_filefunc64(zlib_filefunc64_def *pzlib_filefunc_def)
long ZCALLBACK win32_seek_file_func(voidpf opaque, voidpf stream, uLong offset, int origin)
voidpf ZCALLBACK win32_open64_file_funcA(voidpf opaque, const void *filename, int mode)
void fill_win32_filefunc64W(zlib_filefunc64_def *pzlib_filefunc_def)
int ZCALLBACK win32_close_file_func(voidpf opaque, voidpf stream)
#define INVALID_HANDLE_VALUE
uLong ZCALLBACK win32_write_file_func(voidpf opaque, voidpf stream, const void *buf, uLong size)
void fill_win32_filefunc(zlib_filefunc_def *pzlib_filefunc_def)
ZPOS64_T ZCALLBACK win32_tell64_file_func(voidpf opaque, voidpf stream)
long ZCALLBACK win32_seek64_file_func(voidpf opaque, voidpf stream, ZPOS64_T offset, int origin)
long ZCALLBACK win32_tell_file_func(voidpf opaque, voidpf stream)
int ZCALLBACK win32_error_file_func(voidpf opaque, voidpf stream)
voidpf ZCALLBACK win32_open64_file_func(voidpf opaque, const void *filename, int mode)
voidpf ZCALLBACK win32_open_file_func(voidpf opaque, const char *filename, int mode)
void fill_win32_filefunc64A(zlib_filefunc64_def *pzlib_filefunc_def)
uLong ZCALLBACK win32_read_file_func(voidpf opaque, voidpf stream, void *buf, uLong size)
voidpf ZCALLBACK win32_open64_file_funcW(voidpf opaque, const void *filename, int mode)
write_file_func zwrite_file
open64_file_func zopen64_file
read_file_func zread_file
tell64_file_func ztell64_file
close_file_func zclose_file
seek64_file_func zseek64_file
testerror_file_func zerror_file
seek_file_func zseek_file
open_file_func zopen_file
testerror_file_func zerror_file
write_file_func zwrite_file
read_file_func zread_file
close_file_func zclose_file
tell_file_func ztell_file
void error(const char *msg)