Merge pull request #4053 from Steveice10/master

am: Corrections to handling of non-existent content indices.
This commit is contained in:
James Rowe 2018-08-09 09:39:44 -06:00 committed by GitHub
commit cc6d3ce22f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -404,6 +404,7 @@ std::string GetTitleContentPath(Service::FS::MediaType media_type, u64 tid, u16
} else { } else {
LOG_ERROR(Service_AM, "Attempted to get path for non-existent content index {:04x}.", LOG_ERROR(Service_AM, "Attempted to get path for non-existent content index {:04x}.",
index); index);
return "";
} }
// TODO(shinyquagsire23): how does DLC actually get this folder on hardware? // TODO(shinyquagsire23): how does DLC actually get this folder on hardware?
@ -591,9 +592,10 @@ void Module::Interface::ListDLCContentInfos(Kernel::HLERequestContext& ctx) {
u32 copied = 0; u32 copied = 0;
FileSys::TitleMetadata tmd; FileSys::TitleMetadata tmd;
if (tmd.Load(tmd_path) == Loader::ResultStatus::Success) { if (tmd.Load(tmd_path) == Loader::ResultStatus::Success) {
copied = std::min(content_count, static_cast<u32>(tmd.GetContentCount())); u32 end_index =
std::min(start_index + content_count, static_cast<u32>(tmd.GetContentCount()));
std::size_t write_offset = 0; std::size_t write_offset = 0;
for (u32 i = start_index; i < start_index + copied; i++) { for (u32 i = start_index; i < end_index; i++) {
std::shared_ptr<FileUtil::IOFile> romfs_file; std::shared_ptr<FileUtil::IOFile> romfs_file;
u64 romfs_offset = 0; u64 romfs_offset = 0;
@ -611,6 +613,7 @@ void Module::Interface::ListDLCContentInfos(Kernel::HLERequestContext& ctx) {
content_info_out.Write(&content_info, write_offset, sizeof(ContentInfo)); content_info_out.Write(&content_info, write_offset, sizeof(ContentInfo));
write_offset += sizeof(ContentInfo); write_offset += sizeof(ContentInfo);
copied++;
} }
} }