Skip to content

Commit

Permalink
Handle file type detection of extracted ISO directories better. Repor…
Browse files Browse the repository at this point in the history
…ted by Nemoumbra.
  • Loading branch information
hrydgard committed Jan 12, 2024
1 parent 83999b8 commit 00f53ad
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 8 deletions.
4 changes: 2 additions & 2 deletions Core/FileLoaders/HTTPFileLoader.cpp
Expand Up @@ -117,7 +117,7 @@ void HTTPFileLoader::Prepare() {

int HTTPFileLoader::SendHEAD(const Url &url, std::vector<std::string> &responseHeaders) {
if (!url.Valid()) {
ERROR_LOG(LOADER, "HTTP request failed, invalid URL");
ERROR_LOG(LOADER, "HTTP request failed, invalid URL: '%s'", url.ToString().c_str());
latestError_ = "Invalid URL";
return -400;
}
Expand All @@ -131,7 +131,7 @@ int HTTPFileLoader::SendHEAD(const Url &url, std::vector<std::string> &responseH
client_.SetDataTimeout(20.0);
Connect();
if (!connected_) {
ERROR_LOG(LOADER, "HTTP request failed, failed to connect: %s port %d", url.Host().c_str(), url.Port());
ERROR_LOG(LOADER, "HTTP request failed, failed to connect: %s port %d (resource: '%s')", url.Host().c_str(), url.Port(), url.Resource().c_str());
latestError_ = "Could not connect (refused to connect)";
return -400;
}
Expand Down
10 changes: 8 additions & 2 deletions Core/FileSystems/BlockDevices.cpp
Expand Up @@ -40,8 +40,14 @@ extern "C"
std::mutex NPDRMDemoBlockDevice::mutex_;

BlockDevice *constructBlockDevice(FileLoader *fileLoader) {
if (!fileLoader->Exists())
if (!fileLoader->Exists()) {
return nullptr;
}
if (fileLoader->IsDirectory()) {
ERROR_LOG(LOADER, "Can't open directory directly as block device: %s", fileLoader->GetPath().c_str());
return nullptr;
}

char buffer[8]{};
size_t size = fileLoader->ReadAt(0, 1, 8, buffer);
if (size != 8) {
Expand All @@ -61,7 +67,7 @@ BlockDevice *constructBlockDevice(FileLoader *fileLoader) {
return new CHDFileBlockDevice(fileLoader);
}

// Should be just a regular ISO. Let's open it as a plain block device and let the other systems take over.
// Should be just a regular ISO file. Let's open it as a plain block device and let the other systems take over.
return new FileBlockDevice(fileLoader);
}

Expand Down
8 changes: 4 additions & 4 deletions UI/GameInfoCache.cpp
Expand Up @@ -127,7 +127,8 @@ u64 GameInfo::GetGameSizeOnDiskInBytes() {
case IdentifiedFileType::PSP_PBP_DIRECTORY:
case IdentifiedFileType::PSP_SAVEDATA_DIRECTORY:
return File::ComputeRecursiveDirectorySize(ResolvePBPDirectory(filePath_));

case IdentifiedFileType::PSP_DISC_DIRECTORY:
return File::ComputeRecursiveDirectorySize(GetFileLoader()->GetPath());
default:
return GetFileLoader()->FileSize();
}
Expand All @@ -138,7 +139,8 @@ u64 GameInfo::GetGameSizeUncompressedInBytes() {
case IdentifiedFileType::PSP_PBP_DIRECTORY:
case IdentifiedFileType::PSP_SAVEDATA_DIRECTORY:
return File::ComputeRecursiveDirectorySize(ResolvePBPDirectory(filePath_));

case IdentifiedFileType::PSP_DISC_DIRECTORY:
return File::ComputeRecursiveDirectorySize(GetFileLoader()->GetPath());
default:
{
BlockDevice *blockDevice = constructBlockDevice(GetFileLoader().get());
Expand Down Expand Up @@ -576,7 +578,6 @@ class GameInfoWorkItem : public Task {

case IdentifiedFileType::PSP_DISC_DIRECTORY:
{
info_->fileType = IdentifiedFileType::PSP_ISO;
SequentialHandleAllocator handles;
VirtualDiscFileSystem umd(&handles, gamePath_);

Expand Down Expand Up @@ -606,7 +607,6 @@ class GameInfoWorkItem : public Task {
case IdentifiedFileType::PSP_ISO:
case IdentifiedFileType::PSP_ISO_NP:
{
info_->fileType = IdentifiedFileType::PSP_ISO;
SequentialHandleAllocator handles;
// Let's assume it's an ISO.
// TODO: This will currently read in the whole directory tree. Not really necessary for just a
Expand Down

0 comments on commit 00f53ad

Please sign in to comment.