mirror of
https://github.com/jakcron/nstool
synced 2024-11-22 21:49:30 +00:00
Merge pull request #87 from jakcron/v1.6-development
Bug fixes for v1.6
This commit is contained in:
commit
21f8c884f6
3 changed files with 36 additions and 11 deletions
2
deps/libpietendo
vendored
2
deps/libpietendo
vendored
|
@ -1 +1 @@
|
||||||
Subproject commit 3c68ffeeb903d286647823ea1676d1cb7ede939b
|
Subproject commit 994e70282691fb8cdb9276906500fd873ac51270
|
|
@ -120,7 +120,7 @@ void nstool::GameCardProcess::importHeader()
|
||||||
memcpy(mHdrSignature.data(), hdr_ptr->signature.data(), mHdrSignature.size());
|
memcpy(mHdrSignature.data(), hdr_ptr->signature.data(), mHdrSignature.size());
|
||||||
|
|
||||||
// decrypt extended header
|
// decrypt extended header
|
||||||
byte_t xci_header_key_index = hdr_ptr->header.key_flag & 7;
|
byte_t xci_header_key_index = hdr_ptr->header.key_flag & 0xf;
|
||||||
if (mKeyCfg.xci_header_key.find(xci_header_key_index) != mKeyCfg.xci_header_key.end())
|
if (mKeyCfg.xci_header_key.find(xci_header_key_index) != mKeyCfg.xci_header_key.end())
|
||||||
{
|
{
|
||||||
pie::hac::GameCardUtil::decryptXciHeader(&hdr_ptr->header, mKeyCfg.xci_header_key[xci_header_key_index].data());
|
pie::hac::GameCardUtil::decryptXciHeader(&hdr_ptr->header, mKeyCfg.xci_header_key[xci_header_key_index].data());
|
||||||
|
|
|
@ -20,6 +20,7 @@ nstool::RomfsProcess::RomfsProcess() :
|
||||||
|
|
||||||
void nstool::RomfsProcess::process()
|
void nstool::RomfsProcess::process()
|
||||||
{
|
{
|
||||||
|
// state checks
|
||||||
if (mFile == nullptr)
|
if (mFile == nullptr)
|
||||||
{
|
{
|
||||||
throw tc::Exception(mModuleName, "No file reader set.");
|
throw tc::Exception(mModuleName, "No file reader set.");
|
||||||
|
@ -29,8 +30,6 @@ void nstool::RomfsProcess::process()
|
||||||
throw tc::NotSupportedException(mModuleName, "Input stream requires read/seek permissions.");
|
throw tc::NotSupportedException(mModuleName, "Input stream requires read/seek permissions.");
|
||||||
}
|
}
|
||||||
|
|
||||||
tc::ByteData scratch;
|
|
||||||
|
|
||||||
// read base header to determine complete header size
|
// read base header to determine complete header size
|
||||||
if (mFile->length() < tc::io::IOUtil::castSizeToInt64(sizeof(pie::hac::sRomfsHeader)))
|
if (mFile->length() < tc::io::IOUtil::castSizeToInt64(sizeof(pie::hac::sRomfsHeader)))
|
||||||
{
|
{
|
||||||
|
@ -46,15 +45,41 @@ void nstool::RomfsProcess::process()
|
||||||
throw tc::ArgumentOutOfRangeException(mModuleName, "Corrupt RomFs: RomFsHeader is corrupted.");
|
throw tc::ArgumentOutOfRangeException(mModuleName, "Corrupt RomFs: RomFsHeader is corrupted.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
fmt::print("RomFsHeader:\n");
|
||||||
|
fmt::print(" > header_size = 0x{:04x}\n", mRomfsHeader.header_size.unwrap());
|
||||||
|
fmt::print(" > dir_hash_bucket\n");
|
||||||
|
fmt::print(" > offset = 0x{:04x}\n", mRomfsHeader.dir_hash_bucket.offset.unwrap());
|
||||||
|
fmt::print(" > size = 0x{:04x}\n", mRomfsHeader.dir_hash_bucket.size.unwrap());
|
||||||
|
fmt::print(" > dir_entry\n");
|
||||||
|
fmt::print(" > offset = 0x{:04x}\n", mRomfsHeader.dir_entry.offset.unwrap());
|
||||||
|
fmt::print(" > size = 0x{:04x}\n", mRomfsHeader.dir_entry.size.unwrap());
|
||||||
|
fmt::print(" > file_hash_bucket\n");
|
||||||
|
fmt::print(" > offset = 0x{:04x}\n", mRomfsHeader.file_hash_bucket.offset.unwrap())
|
||||||
|
fmt::print(" > size = 0x{:04x}\n", mRomfsHeader.file_hash_bucket.size.unwrap());
|
||||||
|
fmt::print(" > file_entry\n");
|
||||||
|
fmt::print(" > offset = 0x{:04x}\n", mRomfsHeader.file_entry.offset.unwrap());
|
||||||
|
fmt::print(" > size = 0x{:04x}\n", mRomfsHeader.file_entry.size.unwrap());
|
||||||
|
fmt::print(" > data_offset = 0x{:04x}\n", mRomfsHeader.data_offset.unwrap());
|
||||||
|
*/
|
||||||
|
|
||||||
// get dir entry ptr
|
// get dir entry ptr
|
||||||
tc::ByteData dir_entry_table = tc::ByteData(tc::io::IOUtil::castInt64ToSize(mRomfsHeader.dir_entry.size.unwrap()));
|
tc::ByteData dir_entry_table = tc::ByteData();
|
||||||
|
if (mRomfsHeader.dir_entry.size.unwrap() > 0)
|
||||||
|
{
|
||||||
|
dir_entry_table = tc::ByteData(tc::io::IOUtil::castInt64ToSize(mRomfsHeader.dir_entry.size.unwrap()));
|
||||||
mFile->seek(mRomfsHeader.dir_entry.offset.unwrap(), tc::io::SeekOrigin::Begin);
|
mFile->seek(mRomfsHeader.dir_entry.offset.unwrap(), tc::io::SeekOrigin::Begin);
|
||||||
mFile->read(dir_entry_table.data(), dir_entry_table.size());
|
mFile->read(dir_entry_table.data(), dir_entry_table.size());
|
||||||
|
}
|
||||||
|
|
||||||
// get file entry ptr
|
// get file entry ptr
|
||||||
tc::ByteData file_entry_table = tc::ByteData(tc::io::IOUtil::castInt64ToSize(mRomfsHeader.file_entry.size.unwrap()));
|
tc::ByteData file_entry_table = tc::ByteData();
|
||||||
|
if (mRomfsHeader.file_entry.size.unwrap() > 0)
|
||||||
|
{
|
||||||
|
file_entry_table = tc::ByteData(tc::io::IOUtil::castInt64ToSize(mRomfsHeader.file_entry.size.unwrap()));
|
||||||
mFile->seek(mRomfsHeader.file_entry.offset.unwrap(), tc::io::SeekOrigin::Begin);
|
mFile->seek(mRomfsHeader.file_entry.offset.unwrap(), tc::io::SeekOrigin::Begin);
|
||||||
mFile->read(file_entry_table.data(), file_entry_table.size());
|
mFile->read(file_entry_table.data(), file_entry_table.size());
|
||||||
|
}
|
||||||
|
|
||||||
// count dir num
|
// count dir num
|
||||||
mDirNum = 0;
|
mDirNum = 0;
|
||||||
|
|
Loading…
Reference in a new issue