1
0
Fork 0
forked from suyu/suyu

Merge pull request #94 from lioncash/misc

Minor cleanup in ncch.
This commit is contained in:
bunnei 2014-09-06 14:06:14 -04:00
commit 272a201d12
2 changed files with 9 additions and 11 deletions

View file

@ -40,19 +40,17 @@ u32 LZSS_GetDecompressedSize(u8* buffer, u32 size) {
bool LZSS_Decompress(u8* compressed, u32 compressed_size, u8* decompressed, u32 decompressed_size) { bool LZSS_Decompress(u8* compressed, u32 compressed_size, u8* decompressed, u32 decompressed_size) {
u8* footer = compressed + compressed_size - 8; u8* footer = compressed + compressed_size - 8;
u32 buffer_top_and_bottom = *(u32*)footer; u32 buffer_top_and_bottom = *(u32*)footer;
u32 i, j;
u32 out = decompressed_size; u32 out = decompressed_size;
u32 index = compressed_size - ((buffer_top_and_bottom >> 24) & 0xFF); u32 index = compressed_size - ((buffer_top_and_bottom >> 24) & 0xFF);
u8 control;
u32 stop_index = compressed_size - (buffer_top_and_bottom & 0xFFFFFF); u32 stop_index = compressed_size - (buffer_top_and_bottom & 0xFFFFFF);
memset(decompressed, 0, decompressed_size); memset(decompressed, 0, decompressed_size);
memcpy(decompressed, compressed, compressed_size); memcpy(decompressed, compressed, compressed_size);
while(index > stop_index) { while(index > stop_index) {
control = compressed[--index]; u8 control = compressed[--index];
for(i = 0; i < 8; i++) { for(u32 i = 0; i < 8; i++) {
if(index <= stop_index) if(index <= stop_index)
break; break;
if(index <= 0) if(index <= 0)
@ -76,13 +74,13 @@ bool LZSS_Decompress(u8* compressed, u32 compressed_size, u8* decompressed, u32
if(out < segment_size) { if(out < segment_size) {
return false; return false;
} }
for(j = 0; j < segment_size; j++) { for(u32 j = 0; j < segment_size; j++) {
u8 data;
// Check if compression is out of bounds // Check if compression is out of bounds
if(out + segment_offset >= decompressed_size) { if(out + segment_offset >= decompressed_size) {
return false; return false;
} }
data = decompressed[out + segment_offset];
u8 data = decompressed[out + segment_offset];
decompressed[--out] = data; decompressed[--out] = data;
} }
} else { } else {

View file

@ -46,17 +46,17 @@ struct NCCH_Header {
//////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////
// ExeFS (executable file system) headers // ExeFS (executable file system) headers
typedef struct { struct ExeFs_SectionHeader {
char name[8]; char name[8];
u32 offset; u32 offset;
u32 size; u32 size;
} ExeFs_SectionHeader; };
typedef struct { struct ExeFs_Header {
ExeFs_SectionHeader section[8]; ExeFs_SectionHeader section[8];
u8 reserved[0x80]; u8 reserved[0x80];
u8 hashes[8][0x20]; u8 hashes[8][0x20];
} ExeFs_Header; };
//////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////
// ExHeader (executable file system header) headers // ExHeader (executable file system header) headers