diff options
| author | Admiral H. Curtiss <pikachu025@gmail.com> | 2025-05-26 19:41:07 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-05-26 19:41:07 +0200 |
| commit | 4e8a863d8b3726df6bf9027d9d9a4a6370c57da2 (patch) | |
| tree | 5bf4e7dac9a37e5b6c494a671a615279d622179b /Source | |
| parent | 18a78a9bab79d32298041bea7d442a0f9acdf61a (diff) | |
| parent | 66f181a621cd096b29060b3a85cb0dcb0ae0140d (diff) | |
Merge pull request #13709 from JosJuice/hide-header-bin
Hide DirectoryBlob header.bin files from game list
Diffstat (limited to 'Source')
| -rw-r--r-- | Source/Core/DiscIO/DirectoryBlob.cpp | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/Source/Core/DiscIO/DirectoryBlob.cpp b/Source/Core/DiscIO/DirectoryBlob.cpp index dfed684760..d0ee8bf803 100644 --- a/Source/Core/DiscIO/DirectoryBlob.cpp +++ b/Source/Core/DiscIO/DirectoryBlob.cpp @@ -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"); +} + +static bool IsHeaderBin(const std::string& path) +{ + static constexpr std::string_view header_bin = "/disc/header.bin"; + if (!PathEndsWith(path, header_bin)) + return false; - return File::Exists(partition_root + "sys/main.dol"); + 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) |
