#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <stdint.h>
#include "view.h"
int File::open(const char *name) {
HANDLE *handles = (HANDLE*)&os_handle[0];
handles[0] = handles[1] = nullptr;
handles[0] = CreateFileA(
name,
GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
nullptr,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
nullptr
);
if (!handles[0])
return -1;
BY_HANDLE_FILE_INFORMATION info = {0};
GetFileInformationByHandle(handles[0], &info);
total_size = (int64_t)info.nFileSizeHigh << 32LL | (int64_t)info.nFileSizeLow;
handles[1] = CreateFileMapping(handles[0], NULL, PAGE_READONLY, 0, 0, NULL);
if (!handles[1])
return -2;
data = (char*)MapViewOfFile(handles[1], FILE_MAP_READ, 0, 0, 0);
if (!data)
return -3;
return 0;
}
void File::close() {
HANDLE *handles = (HANDLE*)&os_handle[0];
if (data)
UnmapViewOfFile(data);
if (handles[0])
CloseHandle(handles[0]);
if (handles[1])
CloseHandle(handles[1]);
data = nullptr;
handles[0] = handles[1] = nullptr;
}