|
|
|
@ -107,18 +107,20 @@ static ContentRecordType GetCRTypeFromNCAType(NCAContentType type) { |
|
|
|
VirtualFile RegisteredCache::OpenFileOrDirectoryConcat(const VirtualDir& dir, |
|
|
|
std::string_view path) const { |
|
|
|
const auto file = dir->GetFileRelative(path); |
|
|
|
if (file != nullptr) |
|
|
|
if (file != nullptr) { |
|
|
|
return file; |
|
|
|
} |
|
|
|
|
|
|
|
const auto nca_dir = dir->GetDirectoryRelative(path); |
|
|
|
if (nca_dir != nullptr) { |
|
|
|
const auto nca_dir = dir->GetDirectoryRelative(path); |
|
|
|
VirtualFile file = nullptr; |
|
|
|
if (nca_dir == nullptr) { |
|
|
|
return nullptr; |
|
|
|
} |
|
|
|
|
|
|
|
const auto files = nca_dir->GetFiles(); |
|
|
|
if (files.size() == 1 && files[0]->GetName() == "00") { |
|
|
|
file = files[0]; |
|
|
|
} else { |
|
|
|
return files[0]; |
|
|
|
} |
|
|
|
|
|
|
|
std::vector<VirtualFile> concat; |
|
|
|
// Since the files are a two-digit hex number, max is FF.
|
|
|
|
for (std::size_t i = 0; i < 0x100; ++i) { |
|
|
|
@ -127,22 +129,19 @@ VirtualFile RegisteredCache::OpenFileOrDirectoryConcat(const VirtualDir& dir, |
|
|
|
concat.push_back(std::move(next)); |
|
|
|
} else { |
|
|
|
next = nca_dir->GetFile(fmt::format("{:02x}", i)); |
|
|
|
if (next != nullptr) |
|
|
|
if (next != nullptr) { |
|
|
|
concat.push_back(std::move(next)); |
|
|
|
else |
|
|
|
} else { |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (concat.empty()) |
|
|
|
if (concat.empty()) { |
|
|
|
return nullptr; |
|
|
|
|
|
|
|
file = ConcatenatedVfsFile::MakeConcatenatedFile(concat, concat.front()->GetName()); |
|
|
|
} |
|
|
|
|
|
|
|
return file; |
|
|
|
} |
|
|
|
return nullptr; |
|
|
|
return ConcatenatedVfsFile::MakeConcatenatedFile(concat, concat.front()->GetName()); |
|
|
|
} |
|
|
|
|
|
|
|
VirtualFile RegisteredCache::GetFileAtID(NcaID id) const { |
|
|
|
|