Fix WIN32 file read.

This commit is contained in:
Kyle Isom 2023-10-10 12:15:14 -07:00
parent a6d7b948d4
commit 30c586d37d
2 changed files with 21 additions and 14 deletions

View File

@ -187,9 +187,8 @@ Arena::Open(const char *path)
size_t fSize;
size_t fRemaining;
auto *cursor = this->store;
OVERLAPPED overlap;
OVERLAPPED overlap = {0};
std::cout << "CreateFileA\n";
fHandle = CreateFileA(
(LPSTR)path,
GENERIC_READ,
@ -203,27 +202,37 @@ Arena::Open(const char *path)
return -1;
}
std::cout << "GetFileSizeEx\n";
if (!GetFileSizeEx(fHandle, reinterpret_cast<PLARGE_INTEGER>(&fSize))) {
if (SetFilePointer(fHandle, 0, 0, FILE_BEGIN) != 0) {
displayWinErr("SetFilePointer");
CloseHandle(fHandle);
return -1;
}
if (GetFileSizeEx(fHandle, reinterpret_cast<PLARGE_INTEGER>(&fSize)) != TRUE) {
displayWinErr("GetFileSizeEx");
CloseHandle(fHandle);
return -1;
}
this->SetAlloc(fSize);
cursor = this->NewCursor();
this->store[0] = 1;
fRemaining = fSize;
while (fRemaining != 0) {
std::cout << "ReadFile\n";
overlap.Offset = (fSize - fRemaining);
if (ReadFile(fHandle, cursor, fSize,
if (ReadFile(fHandle, cursor, fSize-1,
&fRead,
&overlap) != TRUE) {
auto errorCode = GetLastError();
if (errorCode != ERROR_HANDLE_EOF) {
displayWinErr("ReadFile");
CloseHandle(fHandle);
this->Destroy();
return -1;
}
break;
}
cursor += fRead;
fRemaining -= fRead;
@ -239,7 +248,6 @@ Arena::Create(const char *path, size_t fileSize, DWORD mode)
{
HANDLE fHandle;
std::cout << "Create::CreateFileA\n";
fHandle = CreateFileA(
(LPSTR)path,
GENERIC_READ|GENERIC_WRITE,
@ -253,7 +261,6 @@ Arena::Create(const char *path, size_t fileSize, DWORD mode)
return -1;
}
std::cout << "SetFileValidData\n";
if (SetFileValidData(fHandle, fileSize) != fileSize) {
displayWinErr("SetFileValidData");
CloseHandle(fHandle);
@ -379,7 +386,7 @@ operator<<(std::ostream &os, Arena &arena)
int
Arena::Write(const char *path)
{
FILE *arenaFile = NULL;
FILE *arenaFile = nullptr;
int retc = -1;
#if defined(__posix__) || defined(__linux__)

View File

@ -116,7 +116,7 @@ public:
#else
int MemoryMap(int memFileDes, size_t memSize)
{ throw NotImplemented("WIN32"); }
{ (void)memFileDes; (void)memSize; throw NotImplemented("WIN32"); }
#endif
/// Create creates a new file, truncating it if it already exists. On