# HG changeset patch # User Matti Hamalainen # Date 1425221940 -7200 # Node ID d674ddc0fc82cfcf8f389b8fec44aee4add57a4a # Parent 1a0a327d8fed2ed3f65abe96b9c326622b8c94df Change PACK file format to use 64 bit fileoffsets. Also switch some fields around for nicety. This breaks compatibility, so bump version. diff -r 1a0a327d8fed -r d674ddc0fc82 src/dmpack.c --- a/src/dmpack.c Sun Mar 01 16:57:50 2015 +0200 +++ b/src/dmpack.c Sun Mar 01 16:59:00 2015 +0200 @@ -96,7 +96,7 @@ if (!dm_fread_str(pack->file, (Uint8 *) &hdr.ident, sizeof(hdr.ident)) || !dm_fread_le16(pack->file, &hdr.version) || !dm_fread_le32(pack->file, &hdr.dirEntries) || - !dm_fread_le32(pack->file, &hdr.dirOffset)) + !dm_fread_le64(pack->file, &hdr.dirOffset)) { ret = DMERR_FREAD; goto out; @@ -135,9 +135,9 @@ } if (!dm_fread_str(pack->file, (Uint8 *) &entry->filename, DMRES_NAME_LEN) || + !dm_fread_le64(pack->file, &entry->offset) || + !dm_fread_le32(pack->file, &entry->length) || !dm_fread_le32(pack->file, &entry->size) || - !dm_fread_le32(pack->file, &entry->offset) || - !dm_fread_le32(pack->file, &entry->length) || !dm_fread_le32(pack->file, &entry->flags)) { ret = DMERR_FREAD; diff -r 1a0a327d8fed -r d674ddc0fc82 src/dmpack.h --- a/src/dmpack.h Sun Mar 01 16:57:50 2015 +0200 +++ b/src/dmpack.h Sun Mar 01 16:59:00 2015 +0200 @@ -10,17 +10,18 @@ #define DPACK_IDENT "TNSPDPCK" // Magic ident -#define DPACK_VERSION (0x0120) // Version +#define DPACK_VERSION (0x0200) // Version typedef struct _DMPackEntry { - Uint32 size; // Size (UNCOMPRESSED) - Uint32 offset; // Offset in pack file - Uint32 length; // (Compressed) data length char filename[DMRES_NAME_LEN + 1]; // +1 for NUL byte + Uint64 offset; // Offset in pack file + Uint32 length; // Compressed data length + Uint32 size; // Size of UNCOMPRESSED data + Uint32 flags; // Stored flags, see DMF_* in dmres.h - Uint32 flags, privFlags; + Uint32 privFlags; // PrivFlags are not stored struct _DMPackEntry *next, *prev; } DMPackEntry; @@ -38,7 +39,7 @@ char ident[8]; // Magic identifier Uint16 version; // Version Uint32 dirEntries; // Number of entries - Uint32 dirOffset; // Offset of the directory + Uint64 dirOffset; // Offset of the directory } DMPackFileHeader; diff -r 1a0a327d8fed -r d674ddc0fc82 tools/packed.c --- a/tools/packed.c Sun Mar 01 16:57:50 2015 +0200 +++ b/tools/packed.c Sun Mar 01 16:59:00 2015 +0200 @@ -217,7 +217,7 @@ if (!dm_fwrite_str(pack->file, (Uint8 *) & hdr.ident, sizeof(hdr.ident)) || !dm_fwrite_le16(pack->file, hdr.version) || !dm_fwrite_le32(pack->file, hdr.dirEntries) || - !dm_fwrite_le32(pack->file, hdr.dirOffset)) + !dm_fwrite_le64(pack->file, hdr.dirOffset)) return DMERR_FWRITE; // Write the directory @@ -229,9 +229,9 @@ { // Write one entry if (!dm_fwrite_str(pack->file, node->filename, DMRES_NAME_LEN) || + !dm_fwrite_le64(pack->file, node->offset) || + !dm_fwrite_le32(pack->file, node->length) || !dm_fwrite_le32(pack->file, node->size) || - !dm_fwrite_le32(pack->file, node->offset) || - !dm_fwrite_le32(pack->file, node->length) || !dm_fwrite_le32(pack->file, node->flags)) return DMERR_FWRITE;