From 1cfc2b22ef279749c0e192b26d307124593fddab Mon Sep 17 00:00:00 2001 From: bdm110 Date: Fri, 5 Jun 2026 12:09:45 +0800 Subject: [PATCH] file_sys: make external content scanning deterministic --- src/core/file_sys/registered_cache.cpp | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/src/core/file_sys/registered_cache.cpp b/src/core/file_sys/registered_cache.cpp index af41820a36..efab65b7c5 100644 --- a/src/core/file_sys/registered_cache.cpp +++ b/src/core/file_sys/registered_cache.cpp @@ -1345,7 +1345,19 @@ void ExternalContentProvider::ScanDirectory(const VirtualDir& dir) { return; } - for (const auto& file : dir->GetFiles()) { + auto files = dir->GetFiles(); + std::sort(files.begin(), files.end(), [](const VirtualFile& lhs, const VirtualFile& rhs) { + if (lhs == nullptr || rhs == nullptr) { + return lhs != nullptr; + } + return lhs->GetName() < rhs->GetName(); + }); + + for (const auto& file : files) { + if (file == nullptr) { + continue; + } + const auto filename = file->GetName(); const auto dot_pos = filename.find_last_of('.'); @@ -1362,7 +1374,15 @@ void ExternalContentProvider::ScanDirectory(const VirtualDir& dir) { } } - for (const auto& subdir : dir->GetSubdirectories()) { + auto subdirs = dir->GetSubdirectories(); + std::sort(subdirs.begin(), subdirs.end(), [](const VirtualDir& lhs, const VirtualDir& rhs) { + if (lhs == nullptr || rhs == nullptr) { + return lhs != nullptr; + } + return lhs->GetName() < rhs->GetName(); + }); + + for (const auto& subdir : subdirs) { ScanDirectory(subdir); } }