diff --git a/libmineziper/include/libmineziper_zip.h b/libmineziper/include/libmineziper_zip.h index 3e0a4a5..4b41d1f 100644 --- a/libmineziper/include/libmineziper_zip.h +++ b/libmineziper/include/libmineziper_zip.h @@ -1,9 +1,12 @@ #ifndef LIBMINEZIPER_ZIP_H #define LIBMINEZIPER_ZIP_H -#define START_CDH_SEARCH 22 -#define CDH_MB "PK\05\06" -#define LFH_MB "PK\03\04" +#pragma pack(1) + +#define START_EOCD_SEARCH 22 +#define EOCD_SIG "PK\05\06" +#define LFH_SIG "PK\03\04" +#define CDH_SIG "PK\01\02" typedef struct raw { @@ -13,26 +16,56 @@ typedef struct raw typedef struct LFH { - char mb[4]; // CDH_MB "PK\03\04" - void* crc32; // TODO TYPE? - int size_compressed_data; - int size_uncompressed_data; - void* filename; // TODO TYPE? - void* data; + int sig; // LFH_SIG "PK\03\04" + short version; + short f; + short compression_method; + short last_mod_time; + short last_mod_date; + int crc32; + int compressed_size; + int uncompressed_size; + short filename_length; + short extra_field_length; + char* filename; } LFH; typedef struct CDH { - char mb[4]; // CDH_MB "PK\05\06" - void* crc32; // TODO TYPE? - LFH* lfh; - void* filename; // TODO TYPE? + int sig; // CDH_SIG "PK\01\02" + short v1; + short v2; + short f; + short compression_method; + short last_mod_time; + short last_mod_date; + int crc32; + int compressed_size; + int uncompressed_size; + short filename_length; + short extra_field_length; + short file_comment_length; + short disk_number_start; + short internal_file_attributes; + int external_file_attributes; + int off_lfh; } CDH; +typedef struct EOCD +{ + int sig; // CDH_SIG "PK\05\06" + char d[6]; + short number_of_entries; + int size_cdh; + int off_cdh; +} EOCD; + typedef struct zip { // compression type - CDH* cd; + char* cd; + CDH** cdh; + EOCD* eocd; } zip; void find_cdh(raw* raw, zip* out);