src/file_zip.c: move structure to the top

This commit is contained in:
Christophe Grenier 2021-03-18 17:19:26 +01:00
parent 8bb6395b34
commit a3bbfdfdcb

View file

@ -133,6 +133,54 @@ struct zip64_extra_entry
uint32_t disk_start_number; /* Number of the disk on which this file starts */ uint32_t disk_start_number; /* Number of the disk on which this file starts */
} __attribute__ ((gcc_struct, __packed__)); } __attribute__ ((gcc_struct, __packed__));
struct zip_desc
{
uint32_t crc32; /** Checksum (CRC32) */
uint32_t compressed_size; /** Compressed size (bytes) */
uint32_t uncompressed_size; /** Uncompressed size (bytes) */
} __attribute__ ((gcc_struct, __packed__));
struct zip64_loc
{
uint32_t disk_number; /** Number of the disk with the start of the zip64 end of central directory */
uint64_t relative_offset; /** Relative offset of the zip64 end of central directory record */
uint32_t disk_total_number; /** Total number of disks */
} __attribute__ ((gcc_struct, __packed__));
struct zip_end_central_dir
{
uint16_t number_disk; /** Number of this disk */
uint16_t number_disk2; /** Number in the central dir */
uint16_t total_number_disk; /** Total number of entries in this disk */
uint16_t total_number_disk2; /** Total number of entries in the central dir */
uint32_t size; /** Size of the central directory */
uint32_t offset; /** Offset of start of central directory */
uint16_t comment_length; /** Comment length */
} __attribute__ ((gcc_struct, __packed__));
struct zip_central_dir
{
/* Fields common with zip_file_entry removed */
uint16_t comment_length; /** Comment length */
uint16_t disk_number_start; /** Disk number start */
uint16_t internal_attr; /** Internal file attributes */
uint32_t external_attr; /** External file attributes */
uint32_t offset_header; /** Relative offset of local header */
} __attribute__ ((gcc_struct, __packed__));
struct zip64_end_central_dir
{
uint64_t end_size; /** Size of zip64 end of central directory record */
uint16_t version_made; /** Version made by */
uint16_t version_needed; /** Version needed to extract */
uint32_t number_disk; /** Number of this disk */
uint32_t number_disk2; /** Number of the disk with the start of the central directory */
uint64_t number_entries; /** Total number of entries in the central directory on this disk */
uint64_t number_entries2; /** Total number of entries in the central directory */
uint64_t size; /** Size of the central directory */
uint64_t offset; /** Offset of start of central directory */
} __attribute__ ((gcc_struct, __packed__));
typedef struct zip_file_entry zip_file_entry_t; typedef struct zip_file_entry zip_file_entry_t;
typedef struct zip64_extra_entry zip64_extra_entry_t; typedef struct zip64_extra_entry zip64_extra_entry_t;
@ -658,14 +706,7 @@ static int zip_parse_central_dir(file_recovery_t *fr)
{ {
zip_file_entry_t file; zip_file_entry_t file;
uint32_t len; uint32_t len;
struct { struct zip_central_dir dir;
/* Fields common with zip_file_entry removed */
uint16_t comment_length; /** Comment length */
uint16_t disk_number_start; /** Disk number start */
uint16_t internal_attr; /** Internal file attributes */
uint32_t external_attr; /** External file attributes */
uint32_t offset_header; /** Relative offset of local header */
} __attribute__ ((gcc_struct, __packed__)) dir;
if (my_fseek(fr->handle, 2, SEEK_CUR) == -1) if (my_fseek(fr->handle, 2, SEEK_CUR) == -1)
{ {
#ifdef DEBUG_ZIP #ifdef DEBUG_ZIP
@ -727,17 +768,7 @@ static int zip_parse_central_dir(file_recovery_t *fr)
@*/ @*/
static int zip64_parse_end_central_dir(file_recovery_t *fr) static int zip64_parse_end_central_dir(file_recovery_t *fr)
{ {
struct { struct zip64_end_central_dir dir;
uint64_t end_size; /** Size of zip64 end of central directory record */
uint16_t version_made; /** Version made by */
uint16_t version_needed; /** Version needed to extract */
uint32_t number_disk; /** Number of this disk */
uint32_t number_disk2; /** Number of the disk with the start of the central directory */
uint64_t number_entries; /** Total number of entries in the central directory on this disk */
uint64_t number_entries2; /** Total number of entries in the central directory */
uint64_t size; /** Size of the central directory */
uint64_t offset; /** Offset of start of central directory */
} __attribute__ ((gcc_struct, __packed__)) dir;
if (fread(&dir, sizeof(dir), 1, fr->handle) != 1) if (fread(&dir, sizeof(dir), 1, fr->handle) != 1)
{ {
@ -783,15 +814,7 @@ static int zip64_parse_end_central_dir(file_recovery_t *fr)
@*/ @*/
static int zip_parse_end_central_dir(file_recovery_t *fr) static int zip_parse_end_central_dir(file_recovery_t *fr)
{ {
struct { struct zip_end_central_dir dir;
uint16_t number_disk; /** Number of this disk */
uint16_t number_disk2; /** Number in the central dir */
uint16_t total_number_disk; /** Total number of entries in this disk */
uint16_t total_number_disk2; /** Total number of entries in the central dir */
uint32_t size; /** Size of the central directory */
uint32_t offset; /** Offset of start of central directory */
uint16_t comment_length; /** Comment length */
} __attribute__ ((gcc_struct, __packed__)) dir;
if (fread(&dir, sizeof(dir), 1, fr->handle) != 1) if (fread(&dir, sizeof(dir), 1, fr->handle) != 1)
{ {
@ -831,11 +854,7 @@ static int zip_parse_end_central_dir(file_recovery_t *fr)
@*/ @*/
static int zip_parse_data_desc(file_recovery_t *fr) static int zip_parse_data_desc(file_recovery_t *fr)
{ {
struct { struct zip_desc desc;
uint32_t crc32; /** Checksum (CRC32) */
uint32_t compressed_size; /** Compressed size (bytes) */
uint32_t uncompressed_size; /** Uncompressed size (bytes) */
} __attribute__ ((gcc_struct, __packed__)) desc;
if (fread(&desc, sizeof(desc), 1, fr->handle) != 1) if (fread(&desc, sizeof(desc), 1, fr->handle) != 1)
{ {
@ -906,11 +925,7 @@ static int zip_parse_signature(file_recovery_t *fr)
@*/ @*/
static int zip64_parse_end_central_dir_locator(file_recovery_t *fr) static int zip64_parse_end_central_dir_locator(file_recovery_t *fr)
{ {
struct { struct zip64_loc loc;
uint32_t disk_number; /** Number of the disk with the start of the zip64 end of central directory */
uint64_t relative_offset; /** Relative offset of the zip64 end of central directory record */
uint32_t disk_total_number; /** Total number of disks */
} __attribute__ ((gcc_struct, __packed__)) loc;
if (fread(&loc, sizeof(loc), 1, fr->handle) != 1) if (fread(&loc, sizeof(loc), 1, fr->handle) != 1)
{ {