changed fio.c to use SetFilePointerEx for _WIN64

This commit is contained in:
hyung-hwan 2012-12-07 15:23:56 +00:00
parent 4ccc843e6b
commit b41a766219

View File

@ -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)))