summaryrefslogtreecommitdiff
path: root/src/com/dabomstew/pkrandom/ctr
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/dabomstew/pkrandom/ctr')
-rw-r--r--src/com/dabomstew/pkrandom/ctr/AMX.java20
-rw-r--r--src/com/dabomstew/pkrandom/ctr/BFLIM.java22
-rw-r--r--src/com/dabomstew/pkrandom/ctr/Mini.java6
-rw-r--r--src/com/dabomstew/pkrandom/ctr/NCCH.java142
-rw-r--r--src/com/dabomstew/pkrandom/ctr/SMDH.java2
5 files changed, 96 insertions, 96 deletions
diff --git a/src/com/dabomstew/pkrandom/ctr/AMX.java b/src/com/dabomstew/pkrandom/ctr/AMX.java
index 456a7ce..1e09798 100644
--- a/src/com/dabomstew/pkrandom/ctr/AMX.java
+++ b/src/com/dabomstew/pkrandom/ctr/AMX.java
@@ -60,10 +60,10 @@ public class AMX {
public AMX(byte[] data, int scriptNum) throws IOException {
int found = 0;
for (int i = 0; i < data.length - 3; i++) {
- int val = FileFunctions.readFullIntLittleEndian(data,i);
+ int val = FileFunctions.readFullInt(data,i);
if (val == amxMagic) {
if (found == scriptNum) {
- int length = FileFunctions.readFullIntLittleEndian(data,i-4);
+ int length = FileFunctions.readFullInt(data,i-4);
readHeaderAndDecompress(Arrays.copyOfRange(data,i-4,i-4+length));
scriptOffset = i-4;
break;
@@ -80,19 +80,19 @@ public class AMX {
// Credit to the creators of pk3DS (Kaphotics et al)
private void readHeaderAndDecompress(byte[] encData) throws IOException {
- length = FileFunctions.readFullIntLittleEndian(encData,0);
- int magic = FileFunctions.readFullIntLittleEndian(encData,4);
+ length = FileFunctions.readFullInt(encData,0);
+ int magic = FileFunctions.readFullInt(encData,4);
if (magic != amxMagic) {
throw new IOException();
}
- ptrOffset = FileFunctions.read2ByteIntLittleEndian(encData,8);
- ptrCount = FileFunctions.read2ByteIntLittleEndian(encData,0xA);
+ ptrOffset = FileFunctions.read2ByteInt(encData,8);
+ ptrCount = FileFunctions.read2ByteInt(encData,0xA);
- scriptInstrStart = FileFunctions.readFullIntLittleEndian(encData,0xC);
- scriptMovementStart = FileFunctions.readFullIntLittleEndian(encData,0x10);
- finalOffset = FileFunctions.readFullIntLittleEndian(encData,0x14);
- allocatedMemory = FileFunctions.readFullIntLittleEndian(encData,0x18);
+ scriptInstrStart = FileFunctions.readFullInt(encData,0xC);
+ scriptMovementStart = FileFunctions.readFullInt(encData,0x10);
+ finalOffset = FileFunctions.readFullInt(encData,0x14);
+ allocatedMemory = FileFunctions.readFullInt(encData,0x18);
compLength = length - scriptInstrStart;
byte[] compressedBytes = Arrays.copyOfRange(encData,scriptInstrStart,length);
diff --git a/src/com/dabomstew/pkrandom/ctr/BFLIM.java b/src/com/dabomstew/pkrandom/ctr/BFLIM.java
index f644add..49e540b 100644
--- a/src/com/dabomstew/pkrandom/ctr/BFLIM.java
+++ b/src/com/dabomstew/pkrandom/ctr/BFLIM.java
@@ -85,7 +85,7 @@ public class BFLIM {
int x = SwizzleLUT[px] & 7;
int y = (SwizzleLUT[px] - x) >> 3;
int outputOffset = (tx + x + ((height - 1 - (ty + y)) * width)) * 4;
- int value = FileFunctions.read2ByteIntLittleEndian(data, inputOffset);
+ int value = FileFunctions.read2ByteInt(data, inputOffset);
if (image.format == 7) {
decodeRGBA5551(output, outputOffset, value);
} else if (image.format == 8) {
@@ -160,19 +160,19 @@ public class BFLIM {
public Header(byte[] bflimBytes) {
int headerOffset = bflimBytes.length - 0x28;
- int signature = FileFunctions.readFullInt(bflimBytes, headerOffset);
+ int signature = FileFunctions.readFullIntBigEndian(bflimBytes, headerOffset);
if (signature != 0x464C494D) {
throw new IllegalArgumentException("Invalid BFLIM: cannot find FLIM header");
}
- boolean bigEndian = FileFunctions.read2ByteIntLittleEndian(bflimBytes, headerOffset + 4) == 0xFFFE;
+ boolean bigEndian = FileFunctions.read2ByteInt(bflimBytes, headerOffset + 4) == 0xFFFE;
if (bigEndian) {
throw new IllegalArgumentException("Unsupported BFLIM: this is a big endian BFLIM");
}
- int headerSize = FileFunctions.read2ByteIntLittleEndian(bflimBytes, headerOffset + 6);
+ int headerSize = FileFunctions.read2ByteInt(bflimBytes, headerOffset + 6);
if (headerSize != 0x14) {
throw new IllegalArgumentException("Invalid BFLIM: header length does not equal 0x14");
}
- version = FileFunctions.readFullIntLittleEndian(bflimBytes, headerOffset + 8);
+ version = FileFunctions.readFullInt(bflimBytes, headerOffset + 8);
}
}
@@ -187,17 +187,17 @@ public class BFLIM {
public Image(byte[] bflimBytes) {
int imageHeaderOffset = bflimBytes.length - 0x14;
- int signature = FileFunctions.readFullInt(bflimBytes, imageHeaderOffset);
+ int signature = FileFunctions.readFullIntBigEndian(bflimBytes, imageHeaderOffset);
if (signature != 0x696D6167) {
throw new IllegalArgumentException("Invalid BFLIM: cannot find imag header");
}
- size = FileFunctions.readFullIntLittleEndian(bflimBytes, imageHeaderOffset + 4);
- width = (short) FileFunctions.read2ByteIntLittleEndian(bflimBytes, imageHeaderOffset + 8);
- height = (short) FileFunctions.read2ByteIntLittleEndian(bflimBytes, imageHeaderOffset + 10);
- alignment = (short) FileFunctions.read2ByteIntLittleEndian(bflimBytes, imageHeaderOffset + 12);
+ size = FileFunctions.readFullInt(bflimBytes, imageHeaderOffset + 4);
+ width = (short) FileFunctions.read2ByteInt(bflimBytes, imageHeaderOffset + 8);
+ height = (short) FileFunctions.read2ByteInt(bflimBytes, imageHeaderOffset + 10);
+ alignment = (short) FileFunctions.read2ByteInt(bflimBytes, imageHeaderOffset + 12);
format = bflimBytes[imageHeaderOffset + 14];
flags = bflimBytes[imageHeaderOffset + 15];
- imageSize = FileFunctions.readFullIntLittleEndian(bflimBytes, imageHeaderOffset + 16);
+ imageSize = FileFunctions.readFullInt(bflimBytes, imageHeaderOffset + 16);
}
}
}
diff --git a/src/com/dabomstew/pkrandom/ctr/Mini.java b/src/com/dabomstew/pkrandom/ctr/Mini.java
index 490d10f..b0a66c6 100644
--- a/src/com/dabomstew/pkrandom/ctr/Mini.java
+++ b/src/com/dabomstew/pkrandom/ctr/Mini.java
@@ -83,13 +83,13 @@ public class Mini {
return null;
}
- int count = FileFunctions.read2ByteIntLittleEndian(fileData, 2);
+ int count = FileFunctions.read2ByteInt(fileData, 2);
int ctr = 4;
- int start = FileFunctions.readFullIntLittleEndian(fileData, ctr);
+ int start = FileFunctions.readFullInt(fileData, ctr);
ctr += 4;
byte[][] returnData = new byte[count][];
for (int i = 0; i < count; i++) {
- int end = FileFunctions.readFullIntLittleEndian(fileData, ctr);
+ int end = FileFunctions.readFullInt(fileData, ctr);
ctr += 4;
int len = end - start;
byte[] data = new byte[len];
diff --git a/src/com/dabomstew/pkrandom/ctr/NCCH.java b/src/com/dabomstew/pkrandom/ctr/NCCH.java
index 34bbc5a..02f918c 100644
--- a/src/com/dabomstew/pkrandom/ctr/NCCH.java
+++ b/src/com/dabomstew/pkrandom/ctr/NCCH.java
@@ -127,8 +127,8 @@ public class NCCH {
}
private void readFileSystem() throws IOException {
- exefsOffset = ncchStartingOffset + FileFunctions.readLittleEndianIntFromFile(baseRom, ncchStartingOffset + 0x1A0) * media_unit_size;
- romfsOffset = ncchStartingOffset + FileFunctions.readLittleEndianIntFromFile(baseRom, ncchStartingOffset + 0x1B0) * media_unit_size;
+ exefsOffset = ncchStartingOffset + FileFunctions.readIntFromFile(baseRom, ncchStartingOffset + 0x1A0) * media_unit_size;
+ romfsOffset = ncchStartingOffset + FileFunctions.readIntFromFile(baseRom, ncchStartingOffset + 0x1B0) * media_unit_size;
baseRom.seek(ncchStartingOffset + 0x20D);
byte systemControlInfoFlags = baseRom.readByte();
codeCompressed = (systemControlInfoFlags & 0x01) != 0;
@@ -168,29 +168,29 @@ public class NCCH {
baseRom.seek(romfsOffset);
baseRom.readFully(romfsHeaderData);
originalRomfsHeaderCRC = FileFunctions.getCRC32(romfsHeaderData);
- int magic1 = FileFunctions.readFullInt(romfsHeaderData, 0x00);
- int magic2 = FileFunctions.readFullInt(romfsHeaderData, 0x04);
+ int magic1 = FileFunctions.readFullIntBigEndian(romfsHeaderData, 0x00);
+ int magic2 = FileFunctions.readFullIntBigEndian(romfsHeaderData, 0x04);
if (magic1 != romfs_magic_1 || magic2 != romfs_magic_2) {
// Not a valid romfs
return;
}
- int masterHashSize = FileFunctions.readFullIntLittleEndian(romfsHeaderData, 0x08);
- int level3HashBlockSize = 1 << FileFunctions.readFullIntLittleEndian(romfsHeaderData, 0x4C);
+ int masterHashSize = FileFunctions.readFullInt(romfsHeaderData, 0x08);
+ int level3HashBlockSize = 1 << FileFunctions.readFullInt(romfsHeaderData, 0x4C);
long level3Offset = romfsOffset + alignLong(0x60 + masterHashSize, level3HashBlockSize);
byte[] level3HeaderData = new byte[level3_header_size];
baseRom.seek(level3Offset);
baseRom.readFully(level3HeaderData);
- int headerLength = FileFunctions.readFullIntLittleEndian(level3HeaderData, 0x00);
+ int headerLength = FileFunctions.readFullInt(level3HeaderData, 0x00);
if (headerLength != level3_header_size) {
// Not a valid romfs
return;
}
- int directoryMetadataOffset = FileFunctions.readFullIntLittleEndian(level3HeaderData, 0x0C);
- int directoryMetadataLength = FileFunctions.readFullIntLittleEndian(level3HeaderData, 0x10);
- int fileMetadataOffset = FileFunctions.readFullIntLittleEndian(level3HeaderData, 0x1c);
- int fileMetadataLength = FileFunctions.readFullIntLittleEndian(level3HeaderData, 0x20);
- int fileDataOffsetFromHeaderStart = FileFunctions.readFullIntLittleEndian(level3HeaderData, 0x24);
+ int directoryMetadataOffset = FileFunctions.readFullInt(level3HeaderData, 0x0C);
+ int directoryMetadataLength = FileFunctions.readFullInt(level3HeaderData, 0x10);
+ int fileMetadataOffset = FileFunctions.readFullInt(level3HeaderData, 0x1c);
+ int fileMetadataLength = FileFunctions.readFullInt(level3HeaderData, 0x20);
+ int fileDataOffsetFromHeaderStart = FileFunctions.readFullInt(level3HeaderData, 0x24);
fileDataOffset = level3Offset + fileDataOffsetFromHeaderStart;
byte[] directoryMetadataBlock = new byte[directoryMetadataLength];
@@ -261,8 +261,8 @@ public class NCCH {
// The logo is small enough (8KB) to just read the whole thing into memory. Write it to the new ROM directly
// after the header, then update the new ROM's logo offset
- long logoOffset = ncchStartingOffset + FileFunctions.readLittleEndianIntFromFile(baseRom, ncchStartingOffset + 0x198) * media_unit_size;
- long logoLength = FileFunctions.readLittleEndianIntFromFile(baseRom, ncchStartingOffset + 0x19C) * media_unit_size;
+ long logoOffset = ncchStartingOffset + FileFunctions.readIntFromFile(baseRom, ncchStartingOffset + 0x198) * media_unit_size;
+ long logoLength = FileFunctions.readIntFromFile(baseRom, ncchStartingOffset + 0x19C) * media_unit_size;
if (logoLength > 0) {
byte[] logo = new byte[(int) logoLength];
baseRom.seek(logoOffset);
@@ -275,8 +275,8 @@ public class NCCH {
}
// The plain region is even smaller (1KB) so repeat the same process
- long plainOffset = ncchStartingOffset + FileFunctions.readLittleEndianIntFromFile(baseRom, ncchStartingOffset + 0x190) * media_unit_size;
- long plainLength = FileFunctions.readLittleEndianIntFromFile(baseRom, ncchStartingOffset + 0x194) * media_unit_size;
+ long plainOffset = ncchStartingOffset + FileFunctions.readIntFromFile(baseRom, ncchStartingOffset + 0x190) * media_unit_size;
+ long plainLength = FileFunctions.readIntFromFile(baseRom, ncchStartingOffset + 0x194) * media_unit_size;
if (plainLength > 0) {
byte[] plain = new byte[(int) plainLength];
baseRom.seek(plainOffset);
@@ -311,14 +311,14 @@ public class NCCH {
// Lastly, reconstruct the superblock hashes
MessageDigest digest = MessageDigest.getInstance("SHA-256");
- int exefsHashRegionSize = FileFunctions.readLittleEndianIntFromFile(baseRom, ncchStartingOffset + 0x1A8) * media_unit_size;
+ int exefsHashRegionSize = FileFunctions.readIntFromFile(baseRom, ncchStartingOffset + 0x1A8) * media_unit_size;
byte[] exefsDataToHash = new byte[exefsHashRegionSize];
fNew.seek(newExefsOffset);
fNew.readFully(exefsDataToHash);
byte[] exefsSuperblockHash = digest.digest(exefsDataToHash);
fNew.seek(0x1C0);
fNew.write(exefsSuperblockHash);
- int romfsHashRegionSize = FileFunctions.readLittleEndianIntFromFile(baseRom, ncchStartingOffset + 0x1B8) * media_unit_size;
+ int romfsHashRegionSize = FileFunctions.readIntFromFile(baseRom, ncchStartingOffset + 0x1B8) * media_unit_size;
byte[] romfsDataToHash = new byte[romfsHashRegionSize];
fNew.seek(newRomfsOffset);
fNew.readFully(romfsDataToHash);
@@ -407,8 +407,8 @@ public class NCCH {
// updated file data. We're assuming here that the master hash size is smaller than the level 3
// hash block size, which it almost certainly will because we're not adding large amounts of data
// to the romfs
- int masterHashSize = FileFunctions.readFullIntLittleEndian(romfsHeaderData, 0x08);
- int level3HashBlockSize = 1 << FileFunctions.readFullIntLittleEndian(romfsHeaderData, 0x4C);
+ int masterHashSize = FileFunctions.readFullInt(romfsHeaderData, 0x08);
+ int level3HashBlockSize = 1 << FileFunctions.readFullInt(romfsHeaderData, 0x4C);
long level3Offset = romfsOffset + alignLong(0x60 + masterHashSize, level3HashBlockSize);
long newLevel3Offset = newRomfsOffset + alignLong(0x60 + masterHashSize, level3HashBlockSize);
@@ -422,12 +422,12 @@ public class NCCH {
// Write out both hash tables and the directory metadata table. Since we're not adding or removing
// any files/directories, we can just use what's in the base ROM for this.
- int directoryHashTableOffset = FileFunctions.readFullIntLittleEndian(level3HeaderData, 0x04);
- int directoryHashTableLength = FileFunctions.readFullIntLittleEndian(level3HeaderData, 0x08);
- int directoryMetadataTableOffset = FileFunctions.readFullIntLittleEndian(level3HeaderData, 0x0C);
- int directoryMetadataTableLength = FileFunctions.readFullIntLittleEndian(level3HeaderData, 0x10);
- int fileHashTableOffset = FileFunctions.readFullIntLittleEndian(level3HeaderData, 0x14);
- int fileHashTableLength = FileFunctions.readFullIntLittleEndian(level3HeaderData, 0x18);
+ int directoryHashTableOffset = FileFunctions.readFullInt(level3HeaderData, 0x04);
+ int directoryHashTableLength = FileFunctions.readFullInt(level3HeaderData, 0x08);
+ int directoryMetadataTableOffset = FileFunctions.readFullInt(level3HeaderData, 0x0C);
+ int directoryMetadataTableLength = FileFunctions.readFullInt(level3HeaderData, 0x10);
+ int fileHashTableOffset = FileFunctions.readFullInt(level3HeaderData, 0x14);
+ int fileHashTableLength = FileFunctions.readFullInt(level3HeaderData, 0x18);
byte[] directoryHashTable = new byte[directoryHashTableLength];
baseRom.seek(level3Offset + directoryHashTableOffset);
baseRom.readFully(directoryHashTable);
@@ -445,14 +445,14 @@ public class NCCH {
fNew.write(fileHashTable);
// Now reconstruct the file metadata table. It may need to be changed if any file grew or shrunk
- int fileMetadataTableOffset = FileFunctions.readFullIntLittleEndian(level3HeaderData, 0x1C);
- int fileMetadataTableLength = FileFunctions.readFullIntLittleEndian(level3HeaderData, 0x20);
+ int fileMetadataTableOffset = FileFunctions.readFullInt(level3HeaderData, 0x1C);
+ int fileMetadataTableLength = FileFunctions.readFullInt(level3HeaderData, 0x20);
byte[] newFileMetadataTable = updateFileMetadataTable(fileMetadataTableLength);
fNew.seek(newLevel3Offset + fileMetadataTableOffset);
fNew.write(newFileMetadataTable);
// Using the new file metadata table, output the file data
- int fileDataOffset = FileFunctions.readFullIntLittleEndian(level3HeaderData, 0x24);
+ int fileDataOffset = FileFunctions.readFullInt(level3HeaderData, 0x24);
long endOfFileDataOffset = 0;
for (FileMetadata metadata : fileMetadataList) {
// Users have sent us bug reports with really bizarre errors here that seem to indicate
@@ -483,10 +483,10 @@ public class NCCH {
long newLevel3EndingOffset = endOfFileDataOffset;
long newLevel3HashdataSize = newLevel3EndingOffset - newLevel3Offset;
long numberOfLevel3HashBlocks = alignLong(newLevel3HashdataSize, level3HashBlockSize) / level3HashBlockSize;
- int level2HashBlockSize = 1 << FileFunctions.readFullIntLittleEndian(romfsHeaderData, 0x34);
+ int level2HashBlockSize = 1 << FileFunctions.readFullInt(romfsHeaderData, 0x34);
long newLevel2HashdataSize = numberOfLevel3HashBlocks * 0x20;
long numberOfLevel2HashBlocks = alignLong(newLevel2HashdataSize, level2HashBlockSize) / level2HashBlockSize;
- int level1HashBlockSize = 1 << FileFunctions.readFullIntLittleEndian(romfsHeaderData, 0x1C);
+ int level1HashBlockSize = 1 << FileFunctions.readFullInt(romfsHeaderData, 0x1C);
long newLevel1HashdataSize = numberOfLevel2HashBlocks * 0x20;
long newLevel1Offset = newLevel3Offset + alignLong(newLevel3HashdataSize, level3HashBlockSize);
long newLevel2Offset = newLevel1Offset + alignLong(newLevel1HashdataSize, level1HashBlockSize);
@@ -528,13 +528,13 @@ public class NCCH {
long level1LogicalOffset = 0;
long level2LogicalOffset = alignLong(newLevel1HashdataSize, level1HashBlockSize);
long level3LogicalOffset = alignLong(level2LogicalOffset + newLevel2HashdataSize, level2HashBlockSize);
- FileFunctions.writeFullIntLittleEndian(romfsHeaderData, 0x08, (int) numberOfLevel1HashBlocks * 0x20);
- FileFunctions.writeFullLongLittleEndian(romfsHeaderData, 0x0C, level1LogicalOffset);
- FileFunctions.writeFullLongLittleEndian(romfsHeaderData, 0x14, newLevel1HashdataSize);
- FileFunctions.writeFullLongLittleEndian(romfsHeaderData, 0x24, level2LogicalOffset);
- FileFunctions.writeFullLongLittleEndian(romfsHeaderData, 0x2C, newLevel2HashdataSize);
- FileFunctions.writeFullLongLittleEndian(romfsHeaderData, 0x3C, level3LogicalOffset);
- FileFunctions.writeFullLongLittleEndian(romfsHeaderData, 0x44, newLevel3HashdataSize);
+ FileFunctions.writeFullInt(romfsHeaderData, 0x08, (int) numberOfLevel1HashBlocks * 0x20);
+ FileFunctions.writeFullLong(romfsHeaderData, 0x0C, level1LogicalOffset);
+ FileFunctions.writeFullLong(romfsHeaderData, 0x14, newLevel1HashdataSize);
+ FileFunctions.writeFullLong(romfsHeaderData, 0x24, level2LogicalOffset);
+ FileFunctions.writeFullLong(romfsHeaderData, 0x2C, newLevel2HashdataSize);
+ FileFunctions.writeFullLong(romfsHeaderData, 0x3C, level3LogicalOffset);
+ FileFunctions.writeFullLong(romfsHeaderData, 0x44, newLevel3HashdataSize);
fNew.seek(newRomfsOffset);
fNew.write(romfsHeaderData);
long currentLength = newFileEndingOffset - newRomfsOffset;
@@ -802,21 +802,21 @@ public class NCCH {
try {
// Only CIAs can define a version in their TMD. If this is a different ROM type,
// just exit out early.
- int magic = FileFunctions.readIntFromFile(this.baseRom, ncch_and_ncsd_magic_offset);
+ int magic = FileFunctions.readBigEndianIntFromFile(this.baseRom, ncch_and_ncsd_magic_offset);
if (magic == ncch_magic || magic == ncsd_magic) {
return 0;
}
// For CIAs, we need to read the title metadata (TMD) in order to retrieve the version.
// The TMD is after the certificate chain and ticket.
- int certChainSize = FileFunctions.readLittleEndianIntFromFile(this.baseRom, 0x08);
- int ticketSize = FileFunctions.readLittleEndianIntFromFile(this.baseRom, 0x0C);
+ int certChainSize = FileFunctions.readIntFromFile(this.baseRom, 0x08);
+ int ticketSize = FileFunctions.readIntFromFile(this.baseRom, 0x0C);
long certChainOffset = NCCH.alignLong(cia_header_size, 64);
long ticketOffset = NCCH.alignLong(certChainOffset + certChainSize, 64);
long tmdOffset = NCCH.alignLong(ticketOffset + ticketSize, 64);
// At the start of the TMD is a signature whose length varies based on what type of signature it is.
- int signatureType = FileFunctions.readIntFromFile(this.baseRom, tmdOffset);
+ int signatureType = FileFunctions.readBigEndianIntFromFile(this.baseRom, tmdOffset);
int signatureSize, paddingSize;
switch (signatureType) {
case 0x010003:
@@ -845,7 +845,7 @@ public class NCCH {
// After the signature is the TMD header, which actually contains the version information.
long tmdHeaderOffset = tmdOffset + 4 + signatureSize + paddingSize;
- return FileFunctions.read2ByteIntFromFile(this.baseRom, tmdHeaderOffset + 0x9C);
+ return FileFunctions.read2ByteBigEndianIntFromFile(this.baseRom, tmdHeaderOffset + 0x9C);
} catch (IOException e) {
throw new RandomizerIOException(e);
}
@@ -859,13 +859,13 @@ public class NCCH {
public static long getCXIOffsetInFile(String filename) {
try {
RandomAccessFile rom = new RandomAccessFile(filename, "r");
- int ciaHeaderSize = FileFunctions.readLittleEndianIntFromFile(rom, 0x00);
+ int ciaHeaderSize = FileFunctions.readIntFromFile(rom, 0x00);
if (ciaHeaderSize == cia_header_size) {
// This *might* be a CIA; let's do our best effort to try to get
// a CXI out of this.
- int certChainSize = FileFunctions.readLittleEndianIntFromFile(rom, 0x08);
- int ticketSize = FileFunctions.readLittleEndianIntFromFile(rom, 0x0C);
- int tmdFileSize = FileFunctions.readLittleEndianIntFromFile(rom, 0x10);
+ int certChainSize = FileFunctions.readIntFromFile(rom, 0x08);
+ int ticketSize = FileFunctions.readIntFromFile(rom, 0x0C);
+ int tmdFileSize = FileFunctions.readIntFromFile(rom, 0x10);
// If this is *really* a CIA, we'll find our CXI at the beginning of the
// content section, which is after the certificate chain, ticket, and TMD
@@ -873,7 +873,7 @@ public class NCCH {
long ticketOffset = NCCH.alignLong(certChainOffset + certChainSize, 64);
long tmdOffset = NCCH.alignLong(ticketOffset + ticketSize, 64);
long contentOffset = NCCH.alignLong(tmdOffset + tmdFileSize, 64);
- int magic = FileFunctions.readIntFromFile(rom, contentOffset + ncch_and_ncsd_magic_offset);
+ int magic = FileFunctions.readBigEndianIntFromFile(rom, contentOffset + ncch_and_ncsd_magic_offset);
if (magic == ncch_magic) {
// This CIA's content contains a valid CXI!
return contentOffset;
@@ -883,7 +883,7 @@ public class NCCH {
// We don't put the following code in an else-block because there *might*
// exist a totally-valid CXI or CCI whose first four bytes just so
// *happen* to be the same as the first four bytes of a CIA file.
- int magic = FileFunctions.readIntFromFile(rom, ncch_and_ncsd_magic_offset);
+ int magic = FileFunctions.readBigEndianIntFromFile(rom, ncch_and_ncsd_magic_offset);
rom.close();
if (magic == ncch_magic) {
// Magic is NCCH, so this just a straight-up NCCH/CXI; there is no container
@@ -913,8 +913,8 @@ public class NCCH {
byte[] filenameBytes = new byte[0x8];
System.arraycopy(exefsHeaderData, fileHeaderOffset, filenameBytes, 0, 0x8);
this.filename = new String(filenameBytes, StandardCharsets.UTF_8).trim();
- this.offset = FileFunctions.readFullIntLittleEndian(exefsHeaderData, fileHeaderOffset + 0x08);
- this.size = FileFunctions.readFullIntLittleEndian(exefsHeaderData, fileHeaderOffset + 0x0C);
+ this.offset = FileFunctions.readFullInt(exefsHeaderData, fileHeaderOffset + 0x08);
+ this.size = FileFunctions.readFullInt(exefsHeaderData, fileHeaderOffset + 0x0C);
}
public boolean isValid() {
@@ -925,8 +925,8 @@ public class NCCH {
byte[] output = new byte[0x10];
byte[] filenameBytes = this.filename.getBytes(StandardCharsets.UTF_8);
System.arraycopy(filenameBytes, 0, output, 0, filenameBytes.length);
- FileFunctions.writeFullIntLittleEndian(output, 0x08, this.offset);
- FileFunctions.writeFullIntLittleEndian(output, 0x0C, this.size);
+ FileFunctions.writeFullInt(output, 0x08, this.offset);
+ FileFunctions.writeFullInt(output, 0x0C, this.size);
return output;
}
}
@@ -941,12 +941,12 @@ public class NCCH {
public String name;
public DirectoryMetadata(byte[] directoryMetadataBlock, int offset) {
- parentDirectoryOffset = FileFunctions.readFullIntLittleEndian(directoryMetadataBlock, offset);
- siblingDirectoryOffset = FileFunctions.readFullIntLittleEndian(directoryMetadataBlock, offset + 0x04);
- firstChildDirectoryOffset = FileFunctions.readFullIntLittleEndian(directoryMetadataBlock, offset + 0x08);
- firstFileOffset = FileFunctions.readFullIntLittleEndian(directoryMetadataBlock, offset + 0x0C);
- nextDirectoryInHashBucketOffset = FileFunctions.readFullIntLittleEndian(directoryMetadataBlock, offset + 0x10);
- nameLength = FileFunctions.readFullIntLittleEndian(directoryMetadataBlock, offset + 0x14);
+ parentDirectoryOffset = FileFunctions.readFullInt(directoryMetadataBlock, offset);
+ siblingDirectoryOffset = FileFunctions.readFullInt(directoryMetadataBlock, offset + 0x04);
+ firstChildDirectoryOffset = FileFunctions.readFullInt(directoryMetadataBlock, offset + 0x08);
+ firstFileOffset = FileFunctions.readFullInt(directoryMetadataBlock, offset + 0x0C);
+ nextDirectoryInHashBucketOffset = FileFunctions.readFullInt(directoryMetadataBlock, offset + 0x10);
+ nameLength = FileFunctions.readFullInt(directoryMetadataBlock, offset + 0x14);
name = "";
if (nameLength != metadata_unused) {
byte[] nameBytes = new byte[nameLength];
@@ -969,12 +969,12 @@ public class NCCH {
public FileMetadata(byte[] fileMetadataBlock, int offset) {
this.offset = offset;
- parentDirectoryOffset = FileFunctions.readFullIntLittleEndian(fileMetadataBlock, offset);
- siblingFileOffset = FileFunctions.readFullIntLittleEndian(fileMetadataBlock, offset + 0x04);
- fileDataOffset = FileFunctions.readFullLongLittleEndian(fileMetadataBlock, offset + 0x08);
- fileDataLength = FileFunctions.readFullLongLittleEndian(fileMetadataBlock, offset + 0x10);
- nextFileInHashBucketOffset = FileFunctions.readFullIntLittleEndian(fileMetadataBlock, offset + 0x18);
- nameLength = FileFunctions.readFullIntLittleEndian(fileMetadataBlock, offset + 0x1C);
+ parentDirectoryOffset = FileFunctions.readFullInt(fileMetadataBlock, offset);
+ siblingFileOffset = FileFunctions.readFullInt(fileMetadataBlock, offset + 0x04);
+ fileDataOffset = FileFunctions.readFullLong(fileMetadataBlock, offset + 0x08);
+ fileDataLength = FileFunctions.readFullLong(fileMetadataBlock, offset + 0x10);
+ nextFileInHashBucketOffset = FileFunctions.readFullInt(fileMetadataBlock, offset + 0x18);
+ nameLength = FileFunctions.readFullInt(fileMetadataBlock, offset + 0x1C);
name = "";
if (nameLength != metadata_unused) {
byte[] nameBytes = new byte[nameLength];
@@ -989,12 +989,12 @@ public class NCCH {
metadataLength += alignInt(nameLength, 4);
}
byte[] output = new byte[metadataLength];
- FileFunctions.writeFullIntLittleEndian(output, 0x00, this.parentDirectoryOffset);
- FileFunctions.writeFullIntLittleEndian(output, 0x04, this.siblingFileOffset);
- FileFunctions.writeFullLongLittleEndian(output, 0x08, this.fileDataOffset);
- FileFunctions.writeFullLongLittleEndian(output, 0x10, this.fileDataLength);
- FileFunctions.writeFullIntLittleEndian(output, 0x18, this.nextFileInHashBucketOffset);
- FileFunctions.writeFullIntLittleEndian(output, 0x1C, this.nameLength);
+ FileFunctions.writeFullInt(output, 0x00, this.parentDirectoryOffset);
+ FileFunctions.writeFullInt(output, 0x04, this.siblingFileOffset);
+ FileFunctions.writeFullLong(output, 0x08, this.fileDataOffset);
+ FileFunctions.writeFullLong(output, 0x10, this.fileDataLength);
+ FileFunctions.writeFullInt(output, 0x18, this.nextFileInHashBucketOffset);
+ FileFunctions.writeFullInt(output, 0x1C, this.nameLength);
if (!name.equals("")) {
byte[] nameBytes = name.getBytes(StandardCharsets.UTF_16LE);
System.arraycopy(nameBytes, 0, output, 0x20, nameBytes.length);
diff --git a/src/com/dabomstew/pkrandom/ctr/SMDH.java b/src/com/dabomstew/pkrandom/ctr/SMDH.java
index cae41c2..7155d02 100644
--- a/src/com/dabomstew/pkrandom/ctr/SMDH.java
+++ b/src/com/dabomstew/pkrandom/ctr/SMDH.java
@@ -71,7 +71,7 @@ public class SMDH {
}
private boolean isValid() {
- int magic = FileFunctions.readFullIntLittleEndian(data, 0x0);
+ int magic = FileFunctions.readFullInt(data, 0x0);
return magic == smdh_magic;
}