summaryrefslogtreecommitdiff
path: root/core/fxcrt/fxcrt_windows.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'core/fxcrt/fxcrt_windows.cpp')
-rw-r--r--core/fxcrt/fxcrt_windows.cpp101
1 files changed, 59 insertions, 42 deletions
diff --git a/core/fxcrt/fxcrt_windows.cpp b/core/fxcrt/fxcrt_windows.cpp
index ec16373f02..87bbe96a5c 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