Rename pak_read_t to asset_pack_t and update load_asset_pack

This commit is contained in:
Abdelrahman Said 2023-10-24 00:14:29 +01:00
parent 9fa96f9712
commit 7fd7bc4dfa
3 changed files with 40 additions and 36 deletions

View File

@ -37,11 +37,11 @@ typedef struct {
toc_t toc; toc_t toc;
} pak_t; } pak_t;
typedef struct pak_read pak_read_t; typedef struct asset_pack asset_pack_t;
bool create_asset_pack(const char *dirpath, const char *output); bool create_asset_pack(const char *dirpath, const char *output);
pak_read_t *load_asset_pack(const char *filepath); asset_pack_t *load_asset_pack(const char *filepath);
// buf_t read_file_from_pack(pak_read_t *pack, const char *filename); // buf_t read_file_from_pack(pak_read_t *pack, const char *filename);
void close_asset_pack(pak_read_t **pack); void close_asset_pack(asset_pack_t **pack);
#endif // !PAK_H #endif // !PAK_H

View File

@ -13,12 +13,13 @@
#define PAK_PATCH 0 #define PAK_PATCH 0
#define PAK_EXT ".pak" #define PAK_EXT ".pak"
struct pak_read { struct asset_pack {
pak_t header; pak_t header;
u8 *buf; FILE *fp;
u8 *toc; u8 *toc;
toc_entry_t **toc_entries;
u64 assets_length; u64 assets_length;
u8 *assets; u64 assets_offset;
}; };
toc_entry_t *create_toc_entry(const char *name, u64 offset); toc_entry_t *create_toc_entry(const char *name, u64 offset);
@ -119,61 +120,64 @@ RETURN_CREATE_ASSET_PAK:
return created; return created;
} }
pak_read_t *load_asset_pack(const char *filepath) { asset_pack_t *load_asset_pack(const char *filepath) {
char full_path[PATH_MAX] = {0}; char full_path[PATH_MAX] = {0};
realpath(filepath, full_path); realpath(filepath, full_path);
pak_read_t *pack = NULL; asset_pack_t *pack = (asset_pack_t *)malloc(sizeof(asset_pack_t));
FILE *fp = fopen(full_path, "rb");
if (!fp) {
goto RETURN_LOAD_ASSET_PACK;
}
pack = (pak_read_t *)malloc(sizeof(pak_read_t));
if (!pack) { if (!pack) {
goto CLOSE_FILE_LOAD_ASSET_PACK; return NULL;
} }
u64 file_size = get_file_length(fp); pack->fp = fopen(full_path, "rb");
if (!(pack->fp)) {
fread((void *)(&(pack->header)), sizeof(pak_t), 1, fp);
u64 data_size = file_size - sizeof(pak_t);
pack->buf = (u8 *)malloc(data_size);
if (!(pack->buf)) {
free(pack); free(pack);
pack = NULL; return NULL;
goto CLOSE_FILE_LOAD_ASSET_PACK;
} }
fread((void *)(pack->buf), data_size, 1, fp); u64 file_size = get_file_length(pack->fp);
pack->toc = pack->buf; fread((void *)(&(pack->header)), sizeof(pak_t), 1, pack->fp);
pack->assets_length = data_size - pack->header.toc.size; u64 toc_size = pack->header.toc.size;
pack->assets = pack->buf + pack->header.toc.size; pack->toc = (u8 *)malloc(toc_size);
if (!(pack->toc)) {
fclose(pack->fp);
CLOSE_FILE_LOAD_ASSET_PACK: free(pack);
fclose(fp);
return NULL;
}
fread((void *)(pack->toc), toc_size, 1, pack->fp);
// TODO (Abdelrahman): Populate the entries array
pack->assets_offset = ftell(pack->fp);
pack->assets_length = file_size - pack->assets_offset;
RETURN_LOAD_ASSET_PACK:
return pack; return pack;
} }
// buf_t read_file_from_pack(pak_read_t *pack, const char *filename) {} // buf_t read_file_from_pack(pak_read_t *pack, const char *filename) {}
void close_asset_pack(pak_read_t **pack) { void close_asset_pack(asset_pack_t **pack) {
if (!(*pack)) { if (!(*pack)) {
return; return;
} }
if ((*pack)->toc) {
free((*pack)->toc);
}
fclose((*pack)->fp);
free(*pack); free(*pack);
*pack = NULL; *pack = NULL;
} }

View File

@ -3,7 +3,7 @@
#include <stdlib.h> #include <stdlib.h>
int main(int argc, char *argv[]) { int main(int argc, char *argv[]) {
pak_read_t *pack = load_asset_pack("assets.pak"); asset_pack_t *pack = load_asset_pack("assets.pak");
if (!pack) { if (!pack) {
printf("Failed to load asset pack"); printf("Failed to load asset pack");