#ifndef __UNZIP_H__
#define __UNZIP_H__
-#include "types.h"
#include <stdio.h>
+#include <stdint.h>
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/***************************************************************************
- * Support for retrieving files from zipfiles
- ***************************************************************************/
-
-struct zipent
+struct ZipFileEntry
{
- UINT32 cent_file_header_sig;
- UINT8 version_made_by;
- UINT8 host_os;
- UINT8 version_needed_to_extract;
- UINT8 os_needed_to_extract;
- UINT16 general_purpose_bit_flag;
- UINT16 compression_method;
- UINT16 last_mod_file_time;
- UINT16 last_mod_file_date;
- UINT32 crc32;
- UINT32 compressed_size;
- UINT32 uncompressed_size;
- UINT16 filename_length;
- UINT16 extra_field_length;
- UINT16 file_comment_length;
- UINT16 disk_number_start;
- UINT16 internal_file_attrib;
- UINT32 external_file_attrib;
- UINT32 offset_lcl_hdr_frm_frst_disk;
- char * name; /* 0 terminated */
+ uint32_t signature;
+ uint16_t version;
+ uint16_t flags;
+ uint16_t method;
+ uint16_t modifiedTime;
+ uint16_t modifiedDate;
+ uint32_t crc32;
+ uint32_t compressedSize;
+ uint32_t uncompressedSize;
+ uint16_t filenameLength;
+ uint16_t extraLength;
+ uint8_t filename[512];
};
-typedef struct _ZIP
-{
- char * zip; /* zip name */
- FILE * fp; /* zip handler */
- int pathtype, pathindex; /* additional path info */
- long length; /* length of zip file */
- char * ecd; /* end_of_cent_dir data */
- unsigned ecd_length; /* end_of_cent_dir length */
- char * cd; /* cent_dir data */
- unsigned cd_pos; /* position in cent_dir */
- struct zipent ent; /* buffer for readzip */
- /* end_of_cent_dir */
- UINT32 end_of_cent_dir_sig;
- UINT16 number_of_this_disk;
- UINT16 number_of_disk_start_cent_dir;
- UINT16 total_entries_cent_dir_this_disk;
- UINT16 total_entries_cent_dir;
- UINT32 size_of_cent_dir;
- UINT32 offset_to_start_of_cent_dir;
- UINT16 zipfile_comment_length;
- char * zipfile_comment; /* pointer in ecd */
-} ZIP;
-
-/* Opens a zip stream for reading
- return:
- !=0 success, zip stream
- ==0 error
-*/
-ZIP * openzip(int pathtype, int pathindex, const char * path);
-
-/* Closes a zip stream */
-void closezip(ZIP * zip);
-
-/* Reads the current entry from a zip stream
- in:
- zip opened zip
- return:
- !=0 success
- ==0 error
-*/
-struct zipent * readzip(ZIP * zip);
-
-/* Suspend access to a zip file (release file handler)
- in:
- zip opened zip
- note:
- A suspended zip is automatically reopened at first call of
- readuncompressd() or readcompressed() functions
-*/
-void suspendzip(ZIP * zip);
-
-/* Resets a zip stream to the first entry
- in:
- zip opened zip
- note:
- ZIP file must be opened and not suspended
-*/
-void rewindzip(ZIP * zip);
-
-/* Read compressed data from a zip entry
- in:
- zip opened zip
- ent entry to read
- out:
- data buffer for data, ent.compressed_size UINT8s allocated by the caller
- return:
- ==0 success
- <0 error
-*/
-int readcompresszip(ZIP * zip, struct zipent * ent, char * data);
-
-/* Read decompressed data from a zip entry
- in:
- zip zip stream open
- ent entry to read
- out:
- data buffer for data, ent.uncompressed_size UINT8s allocated by the caller
- return:
- ==0 success
- <0 error
-*/
-int readuncompresszip(ZIP * zip, struct zipent * ent, char * data);
-
-/* public functions */
-int /* error */ load_zipped_file(int pathtype, int pathindex, const char * zipfile, const char * filename,
- unsigned char ** buf, uint32 * length);
-
-void unzip_cache_clear(void);
-
-/* public globals */
-extern int gUnzipQuiet; /* flag controls error messages */
-
-#ifdef __cplusplus
-}
-#endif
+bool GetZIPHeader(FILE *, ZipFileEntry &);
+int UncompressFileFromZIP(FILE *, ZipFileEntry, uint8_t *);
#endif // __UNZIP_H__