| Index: core/fxcrt/fxcrt_windows.cpp
|
| diff --git a/core/fxcrt/fxcrt_windows.cpp b/core/fxcrt/fxcrt_windows.cpp
|
| index ec16373f02dafa3b3d57c97dd13d94de010d2e8a..87bbe96a5c69c117b9a521b26b7e389bc0f8e174 100644
|
| --- a/core/fxcrt/fxcrt_windows.cpp
|
| +++ b/core/fxcrt/fxcrt_windows.cpp
|
| @@ -28,6 +28,7 @@ void FXCRT_Windows_GetFileMode(uint32_t dwMode,
|
| dwCreation = OPEN_EXISTING;
|
| }
|
| }
|
| +
|
| #ifdef __cplusplus
|
| extern "C" {
|
| #endif
|
| @@ -39,80 +40,91 @@ WINBASEAPI BOOL WINAPI SetFilePointerEx(HANDLE hFile,
|
| #ifdef __cplusplus
|
| }
|
| #endif
|
| +
|
| CFXCRT_FileAccess_Win64::CFXCRT_FileAccess_Win64() : m_hFile(nullptr) {}
|
| +
|
| CFXCRT_FileAccess_Win64::~CFXCRT_FileAccess_Win64() {
|
| Close();
|
| }
|
| -FX_BOOL CFXCRT_FileAccess_Win64::Open(const CFX_ByteStringC& fileName,
|
| - uint32_t dwMode) {
|
| - if (m_hFile) {
|
| +
|
| +bool CFXCRT_FileAccess_Win64::Open(const CFX_ByteStringC& fileName,
|
| + uint32_t dwMode) {
|
| + if (m_hFile)
|
| return FALSE;
|
| - }
|
| +
|
| uint32_t dwAccess, dwShare, dwCreation;
|
| FXCRT_Windows_GetFileMode(dwMode, dwAccess, dwShare, dwCreation);
|
| m_hFile = ::CreateFileA(fileName.c_str(), dwAccess, dwShare, nullptr,
|
| dwCreation, FILE_ATTRIBUTE_NORMAL, nullptr);
|
| if (m_hFile == INVALID_HANDLE_VALUE)
|
| m_hFile = nullptr;
|
| +
|
| return !!m_hFile;
|
| }
|
| -FX_BOOL CFXCRT_FileAccess_Win64::Open(const CFX_WideStringC& fileName,
|
| - uint32_t dwMode) {
|
| - if (m_hFile) {
|
| +
|
| +bool CFXCRT_FileAccess_Win64::Open(const CFX_WideStringC& fileName,
|
| + uint32_t dwMode) {
|
| + if (m_hFile)
|
| return FALSE;
|
| - }
|
| +
|
| uint32_t dwAccess, dwShare, dwCreation;
|
| FXCRT_Windows_GetFileMode(dwMode, dwAccess, dwShare, dwCreation);
|
| m_hFile = ::CreateFileW((LPCWSTR)fileName.c_str(), dwAccess, dwShare, nullptr,
|
| dwCreation, FILE_ATTRIBUTE_NORMAL, nullptr);
|
| if (m_hFile == INVALID_HANDLE_VALUE)
|
| m_hFile = nullptr;
|
| +
|
| return !!m_hFile;
|
| }
|
| +
|
| void CFXCRT_FileAccess_Win64::Close() {
|
| - if (!m_hFile) {
|
| + if (!m_hFile)
|
| return;
|
| - }
|
| +
|
| ::CloseHandle(m_hFile);
|
| m_hFile = nullptr;
|
| }
|
| +
|
| FX_FILESIZE CFXCRT_FileAccess_Win64::GetSize() const {
|
| - if (!m_hFile) {
|
| + if (!m_hFile)
|
| return 0;
|
| - }
|
| +
|
| LARGE_INTEGER size = {};
|
| - if (!::GetFileSizeEx(m_hFile, &size)) {
|
| + if (!::GetFileSizeEx(m_hFile, &size))
|
| return 0;
|
| - }
|
| +
|
| return (FX_FILESIZE)size.QuadPart;
|
| }
|
| +
|
| FX_FILESIZE CFXCRT_FileAccess_Win64::GetPosition() const {
|
| - if (!m_hFile) {
|
| + if (!m_hFile)
|
| return (FX_FILESIZE)-1;
|
| - }
|
| +
|
| LARGE_INTEGER dist = {};
|
| LARGE_INTEGER newPos = {};
|
| - if (!::SetFilePointerEx(m_hFile, dist, &newPos, FILE_CURRENT)) {
|
| + if (!::SetFilePointerEx(m_hFile, dist, &newPos, FILE_CURRENT))
|
| return (FX_FILESIZE)-1;
|
| - }
|
| +
|
| return (FX_FILESIZE)newPos.QuadPart;
|
| }
|
| +
|
| FX_FILESIZE CFXCRT_FileAccess_Win64::SetPosition(FX_FILESIZE pos) {
|
| - if (!m_hFile) {
|
| + if (!m_hFile)
|
| return (FX_FILESIZE)-1;
|
| - }
|
| +
|
| LARGE_INTEGER dist;
|
| dist.QuadPart = pos;
|
| LARGE_INTEGER newPos = {};
|
| - if (!::SetFilePointerEx(m_hFile, dist, &newPos, FILE_BEGIN)) {
|
| + if (!::SetFilePointerEx(m_hFile, dist, &newPos, FILE_BEGIN))
|
| return (FX_FILESIZE)-1;
|
| - }
|
| +
|
| return (FX_FILESIZE)newPos.QuadPart;
|
| }
|
| +
|
| size_t CFXCRT_FileAccess_Win64::Read(void* pBuffer, size_t szBuffer) {
|
| - if (!m_hFile) {
|
| + if (!m_hFile)
|
| return 0;
|
| - }
|
| +
|
| size_t szRead = 0;
|
| if (!::ReadFile(m_hFile, pBuffer, (DWORD)szBuffer, (LPDWORD)&szRead,
|
| nullptr)) {
|
| @@ -120,10 +132,11 @@ size_t CFXCRT_FileAccess_Win64::Read(void* pBuffer, size_t szBuffer) {
|
| }
|
| return szRead;
|
| }
|
| +
|
| size_t CFXCRT_FileAccess_Win64::Write(const void* pBuffer, size_t szBuffer) {
|
| - if (!m_hFile) {
|
| + if (!m_hFile)
|
| return 0;
|
| - }
|
| +
|
| size_t szWrite = 0;
|
| if (!::WriteFile(m_hFile, pBuffer, (DWORD)szBuffer, (LPDWORD)&szWrite,
|
| nullptr)) {
|
| @@ -131,20 +144,22 @@ size_t CFXCRT_FileAccess_Win64::Write(const void* pBuffer, size_t szBuffer) {
|
| }
|
| return szWrite;
|
| }
|
| +
|
| size_t CFXCRT_FileAccess_Win64::ReadPos(void* pBuffer,
|
| size_t szBuffer,
|
| FX_FILESIZE pos) {
|
| - if (!m_hFile) {
|
| + if (!m_hFile)
|
| return 0;
|
| - }
|
| - if (pos >= GetSize()) {
|
| +
|
| + if (pos >= GetSize())
|
| return 0;
|
| - }
|
| - if (SetPosition(pos) == (FX_FILESIZE)-1) {
|
| +
|
| + if (SetPosition(pos) == (FX_FILESIZE)-1)
|
| return 0;
|
| - }
|
| +
|
| return Read(pBuffer, szBuffer);
|
| }
|
| +
|
| size_t CFXCRT_FileAccess_Win64::WritePos(const void* pBuffer,
|
| size_t szBuffer,
|
| FX_FILESIZE pos) {
|
| @@ -156,16 +171,18 @@ size_t CFXCRT_FileAccess_Win64::WritePos(const void* pBuffer,
|
| }
|
| return Write(pBuffer, szBuffer);
|
| }
|
| -FX_BOOL CFXCRT_FileAccess_Win64::Flush() {
|
| - if (!m_hFile) {
|
| - return FALSE;
|
| - }
|
| - return ::FlushFileBuffers(m_hFile);
|
| +
|
| +bool CFXCRT_FileAccess_Win64::Flush() {
|
| + if (!m_hFile)
|
| + return false;
|
| +
|
| + return !!::FlushFileBuffers(m_hFile);
|
| }
|
| -FX_BOOL CFXCRT_FileAccess_Win64::Truncate(FX_FILESIZE szFile) {
|
| - if (SetPosition(szFile) == (FX_FILESIZE)-1) {
|
| - return FALSE;
|
| - }
|
| - return ::SetEndOfFile(m_hFile);
|
| +
|
| +bool CFXCRT_FileAccess_Win64::Truncate(FX_FILESIZE szFile) {
|
| + if (SetPosition(szFile) == (FX_FILESIZE)-1)
|
| + return false;
|
| +
|
| + return !!::SetEndOfFile(m_hFile);
|
| }
|
| #endif
|
|
|