Merge pull request #13709 from JosJuice/hide-header-bin

Hide DirectoryBlob header.bin files from game list
This commit is contained in:
Admiral H. Curtiss
2025-05-26 19:41:07 +02:00
committed by GitHub

View File

@ -240,13 +240,13 @@ static bool PathCharactersEqual(char a, char b)
return a == b || (IsDirectorySeparator(a) && IsDirectorySeparator(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()) if (suffix.size() > path.size())
return false; return false;
std::string::const_iterator path_iterator = path.cend() - suffix.size(); 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()) while (path_iterator != path.cend())
{ {
if (!PathCharactersEqual(*path_iterator, *suffix_iterator)) if (!PathCharactersEqual(*path_iterator, *suffix_iterator))
@ -341,19 +341,28 @@ static bool IsMainDolForNonGamePartition(const std::string& path)
static bool IsBootBin(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; 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() - boot_bin.size());
const std::string partition_root = path.substr(0, path.size() - chars_to_remove); 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) bool ShouldHideFromGameList(const std::string& volume_path)
{ {
return IsInFilesDirectory(volume_path) || IsMainDolForNonGamePartition(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) std::unique_ptr<DirectoryBlobReader> DirectoryBlobReader::Create(const std::string& dol_path)