mirror of
https://github.com/SciresM/hactool
synced 2024-11-23 04:23:13 +00:00
54abbac0b3
Given this is an allocated buffer that the caller needs to deal with, the return type being const causes warnings when passing to free.
73 lines
No EOL
1.8 KiB
C
73 lines
No EOL
1.8 KiB
C
#ifndef HACTOOL_KIP_H
|
|
#define HACTOOL_KIP_H
|
|
#include "types.h"
|
|
#include "utils.h"
|
|
#include "settings.h"
|
|
|
|
#define MAGIC_INI1 0x31494E49
|
|
#define MAGIC_KIP1 0x3150494B
|
|
#define INI1_MAX_KIPS 0x50
|
|
|
|
typedef struct {
|
|
uint32_t magic;
|
|
uint32_t size;
|
|
uint32_t num_processes;
|
|
uint32_t _0xC;
|
|
char kip_data[];
|
|
} ini1_header_t;
|
|
|
|
typedef struct {
|
|
uint32_t out_offset;
|
|
uint32_t out_size;
|
|
uint32_t compressed_size;
|
|
uint32_t attribute;
|
|
} kip_section_header_t;
|
|
|
|
typedef struct {
|
|
uint32_t magic;
|
|
char name[0xC];
|
|
uint64_t title_id;
|
|
uint32_t process_category;
|
|
uint8_t main_thread_priority;
|
|
uint8_t default_core;
|
|
uint8_t _0x1E;
|
|
uint8_t flags;
|
|
kip_section_header_t section_headers[6];
|
|
uint32_t capabilities[0x20];
|
|
unsigned char data[];
|
|
} kip1_header_t;
|
|
|
|
typedef struct {
|
|
FILE *file;
|
|
hactool_ctx_t *tool_ctx;
|
|
kip1_header_t *header;
|
|
} kip1_ctx_t;
|
|
|
|
typedef struct {
|
|
FILE *file;
|
|
hactool_ctx_t *tool_ctx;
|
|
ini1_header_t *header;
|
|
kip1_ctx_t kips[INI1_MAX_KIPS];
|
|
} ini1_ctx_t;
|
|
|
|
void ini1_process(ini1_ctx_t *ctx);
|
|
void ini1_print(ini1_ctx_t *ctx);
|
|
void ini1_save(ini1_ctx_t *ctx);
|
|
|
|
char *kip1_get_json(kip1_ctx_t *ctx);
|
|
void kip1_process(kip1_ctx_t *ctx);
|
|
void kip1_print(kip1_ctx_t *ctx, int suppress);
|
|
void kip1_save(kip1_ctx_t *ctx);
|
|
|
|
static inline uint64_t kip1_get_size(kip1_ctx_t *ctx) {
|
|
/* Header + .text + .rodata + .rwdata */
|
|
return 0x100 + ctx->header->section_headers[0].compressed_size + ctx->header->section_headers[1].compressed_size + ctx->header->section_headers[2].compressed_size;
|
|
}
|
|
|
|
static inline uint64_t kip1_get_size_from_header(kip1_header_t *header) {
|
|
/* Header + .text + .rodata + .rwdata */
|
|
return 0x100 + header->section_headers[0].compressed_size + header->section_headers[1].compressed_size + header->section_headers[2].compressed_size;
|
|
}
|
|
|
|
|
|
#endif |