Hide DirectoryBlob header.bin files from game list

This is a continuation of 552b6da. That commit hid sys/boot.bin, but not
disc/header.bin, which is only present for Wii games.

Fixes https://bugs.dolphin-emu.org/issues/13810.
This commit is contained in:
JosJuice
2025-05-25 15:03:26 +02:00
parent da8610e76f
commit 66f181a621

View File

@ -240,13 +240,13 @@ static bool PathCharactersEqual(char a, char b)
return a == b || (IsDirectorySeparator(a) && IsDirectorySeparator(b));
}
static bool PathEndsWith(const std::string& path, const std::string& suffix)
static bool PathEndsWith(const std::string& path, const std::string_view suffix)
{
if (suffix.size() > path.size())
return false;
std::string::const_iterator path_iterator = path.cend() - suffix.size();
std::string::const_iterator suffix_iterator = suffix.cbegin();
std::string_view::const_iterator suffix_iterator = suffix.cbegin();
while (path_iterator != path.cend())
{
if (!PathCharactersEqual(*path_iterator, *suffix_iterator))
@ -341,19 +341,28 @@ static bool IsMainDolForNonGamePartition(const std::string& path)
static bool IsBootBin(const std::string& path)
{
if (!PathEndsWith(path, "/sys/boot.bin"))
static constexpr std::string_view boot_bin = "/sys/boot.bin";
if (!PathEndsWith(path, 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);
const std::string partition_root = path.substr(0, path.size() - boot_bin.size());
return File::Exists(partition_root + "/sys/main.dol");
}
return File::Exists(partition_root + "sys/main.dol");
static bool IsHeaderBin(const std::string& path)
{
static constexpr std::string_view header_bin = "/disc/header.bin";
if (!PathEndsWith(path, header_bin))
return false;
const std::string partition_root = path.substr(0, path.size() - header_bin.size());
return File::Exists(partition_root + "/sys/main.dol");
}
bool ShouldHideFromGameList(const std::string& volume_path)
{
return IsInFilesDirectory(volume_path) || IsMainDolForNonGamePartition(volume_path) ||
IsBootBin(volume_path);
IsBootBin(volume_path) || IsHeaderBin(volume_path);
}
std::unique_ptr<DirectoryBlobReader> DirectoryBlobReader::Create(const std::string& dol_path)