From 1e839224e8202dc5a094594bd697fb27f253285f Mon Sep 17 00:00:00 2001 From: Stenzek Date: Tue, 10 Dec 2024 02:28:02 +1000 Subject: [PATCH] CDROM: Fix physical disc reading without SubQ on Linux --- src/core/cdrom_subq_replacement.cpp | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/src/core/cdrom_subq_replacement.cpp b/src/core/cdrom_subq_replacement.cpp index 0def0659e6..fc3589846f 100644 --- a/src/core/cdrom_subq_replacement.cpp +++ b/src/core/cdrom_subq_replacement.cpp @@ -123,8 +123,8 @@ std::unique_ptr CDROMSubQReplacement::LoadLSD(const std::s return ret; } -bool CDROMSubQReplacement::LoadForImage(std::unique_ptr* ret, CDImage* image, std::string_view serial, - std::string_view title, Error* error) +bool CDROMSubQReplacement::LoadForImage(std::unique_ptr* ret, CDImage* image, + std::string_view serial, std::string_view title, Error* error) { struct FileLoader { @@ -140,13 +140,19 @@ bool CDROMSubQReplacement::LoadForImage(std::unique_ptr* r std::string path; // Try sbi/lsd in the directory first. - for (const FileLoader& loader : loaders) + if (!CDImage::IsDeviceName(image_path.c_str())) { - path = Path::ReplaceExtension(image_path, loader.extension); - if (FileSystem::FileExists(path.c_str())) + for (const FileLoader& loader : loaders) { - *ret = loader.func(path, error); - return static_cast(*ret); + path = Path::ReplaceExtension(image_path, loader.extension); + if (FileSystem::FileExists(path.c_str())) + { + *ret = loader.func(path, error); + if (!static_cast(*ret)) + Error::AddPrefixFmt(error, "Failed to load subchannel data from {}: ", Path::GetFileName(path)); + + return static_cast(*ret); + } } } @@ -161,6 +167,9 @@ bool CDROMSubQReplacement::LoadForImage(std::unique_ptr* r if (FileSystem::FileExists(path.c_str())) { *ret = loader.func(path, error); + if (!static_cast(*ret)) + Error::AddPrefixFmt(error, "Failed to load subchannel data from {}: ", Path::GetFileName(path)); + return static_cast(*ret); } } @@ -175,6 +184,9 @@ bool CDROMSubQReplacement::LoadForImage(std::unique_ptr* r if (FileSystem::FileExists(path.c_str())) { *ret = loader.func(path, error); + if (!static_cast(*ret)) + Error::AddPrefixFmt(error, "Failed to load subchannel data from {}: ", Path::GetFileName(path)); + return static_cast(*ret); } } @@ -188,6 +200,9 @@ bool CDROMSubQReplacement::LoadForImage(std::unique_ptr* r if (FileSystem::FileExists(path.c_str())) { *ret = loader.func(path, error); + if (!static_cast(*ret)) + Error::AddPrefixFmt(error, "Failed to load subchannel data from {}: ", Path::GetFileName(path)); + return static_cast(*ret); } }