mirror of
https://github.com/Dark98/threeSD.git
synced 2026-07-06 16:49:09 +00:00
ncch_container: Fix progress report in DecryptToFile
The total size should now be correct
This commit is contained in:
@@ -447,17 +447,14 @@ ResultStatus NCCHContainer::DecryptToFile(std::shared_ptr<FileUtil::IOFile> dest
|
|||||||
return ret ? ResultStatus::Success : ResultStatus::Error;
|
return ret ? ResultStatus::Success : ResultStatus::Error;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto total_size = file->GetSize() - sizeof(NCCH_Header);
|
const auto total_size = file->GetSize();
|
||||||
// These are written directly instead of using the decryptor
|
decryptor.Reset(total_size); // This is inaccurate but doesn't really matter as we don't use it
|
||||||
if (has_exheader) {
|
|
||||||
total_size -= sizeof(ExHeader_Header);
|
|
||||||
}
|
|
||||||
if (has_exefs) {
|
|
||||||
total_size -= sizeof(ExeFs_Header);
|
|
||||||
}
|
|
||||||
decryptor.Reset(total_size);
|
|
||||||
|
|
||||||
std::size_t written{};
|
std::size_t written{};
|
||||||
|
const auto decryptor_callback = [total_size, &written, &callback](std::size_t current,
|
||||||
|
std::size_t /*total*/) {
|
||||||
|
callback(written + current, total_size);
|
||||||
|
};
|
||||||
|
|
||||||
// Write NCCH header
|
// Write NCCH header
|
||||||
NCCH_Header modified_header = ncch_header;
|
NCCH_Header modified_header = ncch_header;
|
||||||
@@ -509,8 +506,10 @@ ResultStatus NCCHContainer::DecryptToFile(std::shared_ptr<FileUtil::IOFile> dest
|
|||||||
if (aborted.exchange(false)) {
|
if (aborted.exchange(false)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!decryptor.DecryptAndWriteFile(file, size, dest_file, callback, decrypt, key, ctr,
|
|
||||||
aes_seek_pos)) {
|
written = offset;
|
||||||
|
if (!decryptor.DecryptAndWriteFile(file, size, dest_file, decryptor_callback, decrypt, key,
|
||||||
|
ctr, aes_seek_pos)) {
|
||||||
LOG_ERROR(Core, "Could not write {}", name);
|
LOG_ERROR(Core, "Could not write {}", name);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -561,7 +560,7 @@ ResultStatus NCCHContainer::DecryptToFile(std::shared_ptr<FileUtil::IOFile> dest
|
|||||||
ncch_header.romfs_size * 0x200, true, secondary_key, romfs_ctr)) {
|
ncch_header.romfs_size * 0x200, true, secondary_key, romfs_ctr)) {
|
||||||
return ResultStatus::Error;
|
return ResultStatus::Error;
|
||||||
}
|
}
|
||||||
if (written < file->GetSize()) {
|
if (written < total_size) {
|
||||||
LOG_WARNING(Core, "Data after {} ignored", written);
|
LOG_WARNING(Core, "Data after {} ignored", written);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user