From 69f47646d71c8f6fcfa3ae00e558579b31f05183 Mon Sep 17 00:00:00 2001 From: Toni Wilen Date: Mon, 1 Sep 2014 17:34:05 +0300 Subject: [PATCH] More nicer looking 64-bit SetFilePointer() usage. --- od-win32/hardfile_win32.cpp | 46 ++++++++++++++++++++----------------- 1 file changed, 25 insertions(+), 21 deletions(-) diff --git a/od-win32/hardfile_win32.cpp b/od-win32/hardfile_win32.cpp index 7fa9f89b..b440c992 100644 --- a/od-win32/hardfile_win32.cpp +++ b/od-win32/hardfile_win32.cpp @@ -132,9 +132,9 @@ static void rdbdump (HANDLE h, uae_u64 offset, uae_u8 *buf, int blocksize) } for (i = 0; i <= blocks; i++) { DWORD outlen; - LONG high; - high = (DWORD)(offset >> 32); - if (SetFilePointer (h, (DWORD)offset, &high, FILE_BEGIN) == INVALID_FILE_SIZE) + LARGE_INTEGER fppos; + fppos.QuadPart = offset; + if (SetFilePointer (h, fppos.LowPart, &fppos.HighPart, FILE_BEGIN) == INVALID_SET_FILE_POINTER && GetLastError() != NO_ERROR) break; ReadFile (h, buf, blocksize, &outlen, NULL); fwrite (buf, 1, blocksize, f); @@ -259,11 +259,11 @@ static int safetycheck (HANDLE h, const TCHAR *name, uae_u64 offset, uae_u8 *buf uae_u64 origoffset = offset; int i, j, blocks = 63, empty = 1; DWORD outlen; - LONG high; for (j = 0; j < blocks; j++) { - high = (LONG)(offset >> 32); - if (SetFilePointer (h, (DWORD)offset, &high, FILE_BEGIN) == INVALID_FILE_SIZE) { + LARGE_INTEGER fppos; + fppos.QuadPart = offset; + if (SetFilePointer (h, fppos.LowPart, &fppos.HighPart, FILE_BEGIN) == INVALID_SET_FILE_POINTER && GetLastError() != NO_ERROR) { write_log (_T("hd ignored, SetFilePointer failed, error %d\n"), GetLastError ()); return 1; } @@ -736,10 +736,10 @@ emptyreal: LONG high = 0; DWORD high2; ret = SetFilePointer (h, 0, &high, FILE_END); - if (ret == INVALID_FILE_SIZE && GetLastError () != NO_ERROR) + if (ret == INVALID_SET_FILE_POINTER && GetLastError () != NO_ERROR) goto end; low = GetFileSize (h, &high2); - if (low == INVALID_FILE_SIZE && GetLastError () != NO_ERROR) + if (low == INVALID_SET_FILE_POINTER && GetLastError () != NO_ERROR) goto end; low &= ~(hfd->ci.blocksize - 1); hfd->physsize = hfd->virtsize = ((uae_u64)high2 << 32) | low; @@ -856,9 +856,10 @@ static int hdf_seek (struct hardfiledata *hfd, uae_u64 offset) abort (); } if (hfd->handle_valid == HDF_HANDLE_WIN32) { - LONG high = (LONG)(offset >> 32); - ret = SetFilePointer (hfd->handle->h, (DWORD)offset, &high, FILE_BEGIN); - if (ret == INVALID_FILE_SIZE && GetLastError() != NO_ERROR) + LARGE_INTEGER fppos; + fppos.QuadPart = offset; + ret = SetFilePointer (hfd->handle->h, fppos.LowPart, &fppos.HighPart, FILE_BEGIN); + if (ret == INVALID_SET_FILE_POINTER && GetLastError() != NO_ERROR) return -1; } else if (hfd->handle_valid == HDF_HANDLE_ZFILE) { zfile_fseek (hfd->handle->zf, (long)offset, SEEK_SET); @@ -868,18 +869,21 @@ static int hdf_seek (struct hardfiledata *hfd, uae_u64 offset) static void poscheck (struct hardfiledata *hfd, int len) { - DWORD ret, err; - uae_u64 pos; + DWORD err; + uae_s64 pos; if (hfd->handle_valid == HDF_HANDLE_WIN32) { - LONG high = 0; - ret = SetFilePointer (hfd->handle->h, 0, &high, FILE_CURRENT); - err = GetLastError (); - if (ret == INVALID_FILE_SIZE && err != NO_ERROR) { - gui_message (_T("hd: poscheck failed. seek failure, error %d"), err); - abort (); + LARGE_INTEGER fppos; + fppos.QuadPart = 0; + fppos.LowPart = SetFilePointer (hfd->handle->h, 0, &fppos.HighPart, FILE_CURRENT); + if (fppos.LowPart == INVALID_SET_FILE_POINTER) { + err = GetLastError (); + if (err != NO_ERROR) { + gui_message (_T("hd: poscheck failed. seek failure, error %d"), err); + abort (); + } } - pos = ((uae_u64)high) << 32 | ret; + pos = fppos.QuadPart; } else if (hfd->handle_valid == HDF_HANDLE_ZFILE) { pos = zfile_ftell (hfd->handle->zf); } @@ -2016,7 +2020,7 @@ int harddrive_to_hdf (HWND hDlg, struct uae_prefs *p, int idx) goto err; li.QuadPart = size; ret = SetFilePointer (hdst, li.LowPart, &li.HighPart, FILE_BEGIN); - if (ret == INVALID_FILE_SIZE && GetLastError () != NO_ERROR) + if (ret == INVALID_SET_FILE_POINTER && GetLastError () != NO_ERROR) goto err; if (!SetEndOfFile (hdst)) goto err; -- 2.47.3