changed fio.c to use SetFilePointerEx for _WIN64
This commit is contained in:
parent
4ccc843e6b
commit
b41a766219
@ -992,23 +992,23 @@ qse_fio_off_t qse_fio_seek (
|
|||||||
FILE_END
|
FILE_END
|
||||||
};
|
};
|
||||||
LARGE_INTEGER x;
|
LARGE_INTEGER x;
|
||||||
#if 0
|
#if defined(_WIN64)
|
||||||
LARGE_INTEGER y;
|
LARGE_INTEGER y;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
QSE_ASSERT (QSE_SIZEOF(offset) <= QSE_SIZEOF(x.QuadPart));
|
QSE_ASSERT (QSE_SIZEOF(offset) <= QSE_SIZEOF(x.QuadPart));
|
||||||
|
|
||||||
/* SetFilePointerEx is not available on Windows NT 4.
|
#if defined(_WIN64)
|
||||||
* So let's use SetFilePointer */
|
|
||||||
#if 0
|
|
||||||
x.QuadPart = offset;
|
x.QuadPart = offset;
|
||||||
if (SetFilePointerEx (fio->handle, x, &y, seek_map[origin]) == FALSE)
|
if (SetFilePointerEx (fio->handle, x, &y, seek_map[origin]) == FALSE)
|
||||||
{
|
{
|
||||||
return (qse_fio_off_t)-1;
|
return (qse_fio_off_t)-1;
|
||||||
}
|
}
|
||||||
return (qse_fio_off_t)y.QuadPart;
|
return (qse_fio_off_t)y.QuadPart;
|
||||||
#endif
|
#else
|
||||||
|
|
||||||
|
/* SetFilePointerEx is not available on Windows NT 4.
|
||||||
|
* So let's use SetFilePointer */
|
||||||
x.QuadPart = offset;
|
x.QuadPart = offset;
|
||||||
x.LowPart = SetFilePointer (
|
x.LowPart = SetFilePointer (
|
||||||
fio->handle, x.LowPart, &x.HighPart, seek_map[origin]);
|
fio->handle, x.LowPart, &x.HighPart, seek_map[origin]);
|
||||||
@ -1018,6 +1018,7 @@ qse_fio_off_t qse_fio_seek (
|
|||||||
return (qse_fio_off_t)-1;
|
return (qse_fio_off_t)-1;
|
||||||
}
|
}
|
||||||
return (qse_fio_off_t)x.QuadPart;
|
return (qse_fio_off_t)x.QuadPart;
|
||||||
|
#endif
|
||||||
|
|
||||||
#elif defined(__OS2__)
|
#elif defined(__OS2__)
|
||||||
static int seek_map[] =
|
static int seek_map[] =
|
||||||
@ -1106,20 +1107,12 @@ qse_fio_off_t qse_fio_seek (
|
|||||||
int qse_fio_truncate (qse_fio_t* fio, qse_fio_off_t size)
|
int qse_fio_truncate (qse_fio_t* fio, qse_fio_off_t size)
|
||||||
{
|
{
|
||||||
#if defined(_WIN32)
|
#if defined(_WIN32)
|
||||||
#if 0
|
|
||||||
LARGE_INTEGER x;
|
|
||||||
x.QuadPart = size;
|
|
||||||
|
|
||||||
if (SetFilePointerEx(fio->handle,x,NULL,FILE_BEGIN) == FALSE ||
|
|
||||||
SetEndOfFile(fio->handle) == FALSE) return -1;
|
|
||||||
#endif
|
|
||||||
if (qse_fio_seek (fio, size, QSE_FIO_BEGIN) == (qse_fio_off_t)-1) return -1;
|
if (qse_fio_seek (fio, size, QSE_FIO_BEGIN) == (qse_fio_off_t)-1) return -1;
|
||||||
if (SetEndOfFile(fio->handle) == FALSE)
|
if (SetEndOfFile(fio->handle) == FALSE)
|
||||||
{
|
{
|
||||||
fio->errnum = syserr_to_errnum (GetLastError());
|
fio->errnum = syserr_to_errnum (GetLastError());
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
#elif defined(__OS2__)
|
#elif defined(__OS2__)
|
||||||
|
|
||||||
@ -1249,7 +1242,13 @@ qse_ssize_t qse_fio_write (qse_fio_t* fio, const void* data, qse_size_t size)
|
|||||||
{
|
{
|
||||||
/* TODO: only when FILE_APPEND_DATA failed??? how do i know this??? */
|
/* TODO: only when FILE_APPEND_DATA failed??? how do i know this??? */
|
||||||
/* i do this on a best-effort basis */
|
/* i do this on a best-effort basis */
|
||||||
|
#if defined(_WIN64)
|
||||||
|
LARGE_INTEGER x;
|
||||||
|
x.QuadPart = 0;
|
||||||
|
SetFilePointerEx (fio->handle, x, QSE_NULL, FILE_END);
|
||||||
|
#else
|
||||||
SetFilePointer (fio->handle, 0, QSE_NULL, FILE_END);
|
SetFilePointer (fio->handle, 0, QSE_NULL, FILE_END);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
if (size > (QSE_TYPE_MAX(qse_ssize_t) & QSE_TYPE_MAX(DWORD)))
|
if (size > (QSE_TYPE_MAX(qse_ssize_t) & QSE_TYPE_MAX(DWORD)))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user