mirror of
https://github.com/DarkStore-3DS/Project_CTR.git
synced 2026-07-02 16:59:03 +00:00
127 lines
2.3 KiB
C
127 lines
2.3 KiB
C
#pragma once
|
|
|
|
typedef enum
|
|
{
|
|
INVALID_ROMFS_FILE = -10,
|
|
} romfs_errors;
|
|
|
|
|
|
// IVFC Structs
|
|
typedef struct
|
|
{
|
|
u64 size;
|
|
u64 offset;
|
|
u64 logicalOffset;
|
|
u8 *pos;
|
|
u8 reserved[8];
|
|
} ivfc_level;
|
|
|
|
typedef struct
|
|
{
|
|
u8 logicalOffset[8];
|
|
u8 hashDataSize[8];
|
|
u8 blockSize[4];
|
|
u8 reserved[4];
|
|
} ivfc_levelheader;
|
|
|
|
typedef struct
|
|
{
|
|
u8 magic[4];
|
|
u8 id[4];
|
|
u8 masterHashSize[4];
|
|
ivfc_levelheader level[3];
|
|
u8 optionalSize[4];
|
|
u8 reserved[4];
|
|
} ivfc_hdr;
|
|
|
|
typedef struct
|
|
{
|
|
u8 offset[4];
|
|
u8 size[4];
|
|
} romfs_sectionheader;
|
|
|
|
typedef struct
|
|
{
|
|
u8 headersize[4];
|
|
romfs_sectionheader section[4]; // 8*4 = 0x20
|
|
u8 dataoffset[4];
|
|
} romfs_infoheader; //sizeof(romfs_infoheader) = 0x28
|
|
|
|
|
|
typedef struct
|
|
{
|
|
u8 parentoffset[4];
|
|
u8 siblingoffset[4];
|
|
u8 childoffset[4];
|
|
u8 fileoffset[4];
|
|
u8 weirdoffset[4]; // this one is weird. it always points to a dir entry, but seems unrelated to the romfs structure.
|
|
u8 namesize[4];
|
|
//u8 name[ROMFS_MAXNAMESIZE];
|
|
} romfs_direntry; //sizeof(romfs_direntry) = 0x18
|
|
|
|
typedef struct
|
|
{
|
|
u8 parentdiroffset[4];
|
|
u8 siblingoffset[4];
|
|
u8 dataoffset[8];
|
|
u8 datasize[8];
|
|
u8 weirdoffset[4]; // this one is also weird. it always points to a file entry, but seems unrelated to the romfs structure.
|
|
u8 namesize[4];
|
|
//u8 name[ROMFS_MAXNAMESIZE];
|
|
} romfs_fileentry; //sizeof(romfs_fileentry) = 0x20
|
|
|
|
typedef struct
|
|
{
|
|
u8 *output;
|
|
u64 romfsSize;
|
|
u64 romfsHeaderSize;
|
|
|
|
/* For Importing ROMFS Binaries */
|
|
bool ImportRomfsBinary;
|
|
FILE *romfsBinary;
|
|
|
|
/* For Creating ROMFS Binaries */
|
|
ivfc_hdr *ivfcHdr;
|
|
romfs_infoheader *romfsHdr;
|
|
|
|
fs_dir *fs;
|
|
|
|
u32 *dirUTable;
|
|
u32 m_dirUTableEntry;
|
|
u32 u_dirUTableEntry;
|
|
|
|
u8 *dirTable;
|
|
u32 dirNum;
|
|
u32 m_dirTableLen;
|
|
u32 u_dirTableLen;
|
|
|
|
u32 *fileUTable;
|
|
u32 m_fileUTableEntry;
|
|
u32 u_fileUTableEntry;
|
|
|
|
u8 *fileTable;
|
|
u32 fileNum;
|
|
u32 m_fileTableLen;
|
|
u32 u_fileTableLen;
|
|
|
|
u8 *data;
|
|
u64 m_dataLen;
|
|
u64 u_dataLen;
|
|
|
|
// Levels
|
|
ivfc_level level[4];
|
|
} romfs_buildctx;
|
|
|
|
/*
|
|
typedef struct
|
|
{
|
|
u8 *output;
|
|
u64 romfsSize;
|
|
u64 romfsHeaderSize;
|
|
|
|
bool ImportRomfsBinary;
|
|
FILE *romfsBinary;
|
|
} romfs_buildctx;
|
|
*/
|
|
int SetupRomFs(ncch_settings *ncchset, romfs_buildctx *ctx);
|
|
int BuildRomFs(romfs_buildctx *ctx); |