bool ChunkedFile::loadFile(HANDLE mpq, char* filename, bool log) { free(); HANDLE file; if (!SFileOpenFileEx(mpq, filename, SFILE_OPEN_PATCHED_FILE, &file)) { if (log) printf("No such file %s\n", filename); return false; } data_size = SFileGetFileSize(file, NULL); data = new uint8[data_size]; SFileReadFile(file, data, data_size, NULL/*bytesRead*/, NULL); parseChunks(); if (prepareLoadedData()) { SFileCloseFile(file); return true; } printf("Error loading %s\n", filename); SFileCloseFile(file); free(); return false; }
bool ChunkedFile::loadFile(HANDLE mpq, std::string const& fileName, bool log) { free(); HANDLE file; if (!CascOpenFile(mpq, fileName.c_str(), CASC_LOCALE_ALL, 0, &file)) { if (log) printf("No such file %s\n", fileName.c_str()); return false; } data_size = CascGetFileSize(file, nullptr); data = new uint8[data_size]; CascReadFile(file, data, data_size, nullptr/*bytesRead*/); parseChunks(); if (prepareLoadedData()) { CascCloseFile(file); return true; } printf("Error loading %s\n", fileName.c_str()); CascCloseFile(file); free(); return false; }
bool ChunkedFile::loadFile(CASC::StorageHandle const& mpq, std::string const& fileName, bool log) { free(); CASC::FileHandle file = CASC::OpenFile(mpq, fileName.c_str(), CASC_LOCALE_ALL, log); if (!file) return false; DWORD fileSize = CASC::GetFileSize(file, nullptr); if (fileSize == CASC_INVALID_SIZE) return false; data_size = fileSize; data = new uint8[data_size]; DWORD bytesRead = 0; if (!CASC::ReadFile(file, data, data_size, &bytesRead) || bytesRead != data_size) return false; parseChunks(); if (prepareLoadedData()) return true; printf("Error loading %s\n", fileName.c_str()); free(); return false; }