in text/text.cpp [54:117]
std::vector<char> readFile(const std::string& filename) {
std::vector<char> buffer;
#ifdef _WIN32
HANDLE hFile = CreateFile(filename.c_str(), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile == INVALID_HANDLE_VALUE) {
std::cerr << "Could not open file" << std::endl;
return buffer;
}
DWORD fileSize = GetFileSize(hFile, NULL);
if (fileSize == INVALID_FILE_SIZE) {
std::cerr << "Could not get file size" << std::endl;
CloseHandle(hFile);
return buffer;
}
HANDLE hMapFile = CreateFileMapping(hFile, NULL, PAGE_READONLY, 0, 0, NULL);
if (hMapFile == NULL) {
std::cerr << "Could not create file mapping object" << std::endl;
CloseHandle(hFile);
return buffer;
}
char* data = (char*)MapViewOfFile(hMapFile, FILE_MAP_READ, 0, 0, 0);
if (data == NULL) {
std::cerr << "Could not map view of file" << std::endl;
CloseHandle(hMapFile);
CloseHandle(hFile);
return buffer;
}
buffer.assign(data, data + fileSize);
UnmapViewOfFile(data);
CloseHandle(hMapFile);
CloseHandle(hFile);
#else
int fd = open(filename.c_str(), O_RDONLY);
if (fd == -1) {
std::cerr << "Could not open file" << std::endl;
return buffer;
}
struct stat sb;
if (fstat(fd, &sb) == -1) {
std::cerr << "Could not get file size" << std::endl;
close(fd);
return buffer;
}
char* data = static_cast<char*>(mmap(NULL, sb.st_size, PROT_READ, MAP_PRIVATE, fd, 0));
if (data == MAP_FAILED) {
std::cerr << "Could not map file" << std::endl;
close(fd);
return buffer;
}
buffer.assign(data, data + sb.st_size);
munmap(data, sb.st_size);
close(fd);
#endif
return buffer;
}