From 28d71ff792de66b89862ff60c707a4b5368c6021 Mon Sep 17 00:00:00 2001 From: David Heidelberg Date: Tue, 26 Nov 2024 23:58:07 -0500 Subject: [PATCH] core: make findFilePath more robust Do not crash, when asset is missing, just warn about it. Game can work well without missing wav and mp3 files. Also, the crash itself looks a bit mysterious, so now the game prints name of the missing asset. Signed-off-by: David Heidelberg --- rwcore/platform/FileIndex.cpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/rwcore/platform/FileIndex.cpp b/rwcore/platform/FileIndex.cpp index cd4b58c67..6da056873 100644 --- a/rwcore/platform/FileIndex.cpp +++ b/rwcore/platform/FileIndex.cpp @@ -39,12 +39,20 @@ void FileIndex::indexTree(const std::filesystem::path &path) { } const FileIndex::IndexedData *FileIndex::getIndexedDataAt(const std::string &filePath) const { - auto normPath = normalizeFilePath(filePath); - return &indexedData_.at(normPath); + std::string normPath = normalizeFilePath(filePath); + try { + return &indexedData_.at(normPath); + } catch (...) { + RW_ERROR("Missing file: " << normPath); + return nullptr; + } } std::filesystem::path FileIndex::findFilePath(const std::string &filePath) const { - return getIndexedDataAt(filePath)->path; + auto idxData = getIndexedDataAt(filePath); + if (!idxData) return filePath; + + return idxData->path; } FileContentsInfo FileIndex::openFileRaw(const std::string &filePath) const {