From 552b6da9c436b807ab44c621de9d2635f786a453 Mon Sep 17 00:00:00 2001 From: JosJuice Date: Sat, 26 Apr 2025 14:58:35 +0200 Subject: [PATCH] Hide DirectoryBlob boot.bin files from game list Extracted games contain a boot.bin file that contains the disc header. These boot.bin files are considered valid volumes by Dolphin, since Dolphin only checks the disc header to determine if something is a valid GC/Wii disc. Running them doesn't make any sense, though. boot.bin files used to not be scanned by Dolphin due to their file extension, but .bin was added to the list of file extensions to scan for in 494e2c0. To stop them from showing up in the game list, let's update the ShouldHideFromGameList mechanism. --- Source/Core/DiscIO/DirectoryBlob.cpp | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/Source/Core/DiscIO/DirectoryBlob.cpp b/Source/Core/DiscIO/DirectoryBlob.cpp index 2623a2e420..c4fda25a1a 100644 --- a/Source/Core/DiscIO/DirectoryBlob.cpp +++ b/Source/Core/DiscIO/DirectoryBlob.cpp @@ -264,7 +264,7 @@ static bool IsValidDirectoryBlob(const std::string& dol_path, std::string* parti if (!PathEndsWith(dol_path, "/sys/main.dol")) return false; - const size_t chars_to_remove = std::string("sys/main.dol").size(); + static constexpr size_t chars_to_remove = std::string_view("sys/main.dol").size(); *partition_root = dol_path.substr(0, dol_path.size() - chars_to_remove); if (File::GetSize(*partition_root + "sys/boot.bin") < 0x20) @@ -339,9 +339,21 @@ static bool IsMainDolForNonGamePartition(const std::string& path) return false; // volume_path is the game partition's /sys/main.dol } +static bool IsBootBin(const std::string& path) +{ + if (!PathEndsWith(path, "/sys/boot.bin")) + return false; + + static constexpr size_t chars_to_remove = std::string_view("sys/boot.bin").size(); + const std::string partition_root = path.substr(0, path.size() - chars_to_remove); + + return File::Exists(partition_root + "sys/main.dol"); +} + bool ShouldHideFromGameList(const std::string& volume_path) { - return IsInFilesDirectory(volume_path) || IsMainDolForNonGamePartition(volume_path); + return IsInFilesDirectory(volume_path) || IsMainDolForNonGamePartition(volume_path) || + IsBootBin(volume_path); } std::unique_ptr DirectoryBlobReader::Create(const std::string& dol_path)