bool PackageManager::fileExists(const Common::String &fileName) { // FIXME: The current Zip implementation doesn't support getting a folder entry, which is needed for detecting // the English voick pack if (fileName == "/speech/en") { // To get around this, change to detecting one of the files in the folder return getArchiveMember(normalizePath(fileName + "/APO0001.ogg", _currentDirectory)); } Common::ArchiveMemberPtr fileNode = getArchiveMember(normalizePath(fileName, _currentDirectory)); return fileNode; }
bool PackageManager::fileExists(const Common::String &fileName) { // FIXME: The current Zip implementation doesn't support getting a folder entry, which is needed for detecting // the English voice pack Common::String fileName2 = ensureSpeechLang(fileName); if (fileName2 == "/speech/en") { // To get around this, change to detecting one of the files in the folder bool exists = getArchiveMember(normalizePath(fileName2 + "/APO0001.ogg", _currentDirectory)); if (!exists && _useEnglishSpeech) { _useEnglishSpeech = false; warning("English speech not found"); } return exists; } Common::ArchiveMemberPtr fileNode = getArchiveMember(normalizePath(fileName2, _currentDirectory)); return fileNode; }
Common::SeekableReadStream *PackageManager::getStream(const Common::String &fileName) { Common::SeekableReadStream *in; Common::ArchiveMemberPtr fileNode = getArchiveMember(normalizePath(fileName, _currentDirectory)); if (!fileNode) return 0; if (!(in = fileNode->createReadStream())) return 0; return in; }
byte *PackageManager::getFile(const Common::String &fileName, uint *fileSizePtr) { const Common::String B25S_EXTENSION(".b25s"); Common::SeekableReadStream *in; if (fileName.hasSuffix(B25S_EXTENSION)) { // Savegame loading logic Common::SaveFileManager *sfm = g_system->getSavefileManager(); Common::InSaveFile *file = sfm->openForLoading( FileSystemUtil::getPathFilename(fileName)); if (!file) { BS_LOG_ERRORLN("Could not load savegame \"%s\".", fileName.c_str()); return 0; } if (fileSizePtr) *fileSizePtr = file->size(); byte *buffer = new byte[file->size()]; file->read(buffer, file->size()); delete file; return buffer; } Common::ArchiveMemberPtr fileNode = getArchiveMember(normalizePath(fileName, _currentDirectory)); if (!fileNode) return 0; if (!(in = fileNode->createReadStream())) return 0; // If the filesize is desired, then output the size if (fileSizePtr) *fileSizePtr = in->size(); // Read the file byte *buffer = new byte[in->size()]; int bytesRead = in->read(buffer, in->size()); delete in; if (!bytesRead) { delete[] buffer; return NULL; } return buffer; }