diff options
author | Jason A. Donenfeld <Jason@zx2c4.com> | 2013-12-05 01:41:05 -0500 |
---|---|---|
committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2013-12-05 01:41:05 -0500 |
commit | dd9ab198c68ffdaf0bd473d730645bf9845149da (patch) | |
tree | 8b8ebc450ce3003822a3a5cdf619763d2c822c47 /image-parser.c | |
parent | Don't pack struct. (diff) | |
download | openrg-image-parser-dd9ab198c68ffdaf0bd473d730645bf9845149da.tar.xz openrg-image-parser-dd9ab198c68ffdaf0bd473d730645bf9845149da.zip |
Diffstat (limited to 'image-parser.c')
-rw-r--r-- | image-parser.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/image-parser.c b/image-parser.c index b135101..b7fee12 100644 --- a/image-parser.c +++ b/image-parser.c @@ -88,15 +88,18 @@ uint32_t checksum(uint8_t *data, uint32_t length) bool read_file(uint8_t *data, struct File *file) { + /* The first 5 fields are 32 bit unsigned big endian integers. */ uint32_t *packed_integers = (uint32_t *)data; file->magic = be32toh(packed_integers[0]); file->size = be32toh(packed_integers[1]); file->checksum = be32toh(packed_integers[2]); file->counter = be32toh(packed_integers[3]); file->start_offset = be32toh(packed_integers[4]); + /* The last field of the header is a string of length 0x80. */ memcpy(&file->name, &packed_integers[5], sizeof(file->name)); file->name[0x7f] = '\0'; - file->data = data + HEADER_SIZE; + + file->data = data + HEADER_SIZE + file->start_offset; file->decompressed_data = NULL; file->decompressed_size = 0; if (!strcmp(file->name, "rg_conf")) { @@ -115,6 +118,7 @@ void print_file(struct File *file, bool valid) { printf("==== %s (%s) ====\n", file->name, valid ? "Valid Checksum" : "INVALID CHECKSUM"); printf("Length: %u bytes\n", file->size); + printf("Offset: %u bytes\n", file->start_offset); if (file->decompressed_size) printf("Decompressed Length: %u bytes\n", file->decompressed_size); } |