X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Funzip.h;h=6f53b0730067f4b4e3b9d5ce1f85aa8cb2a60a24;hb=09b508a759ca512da810722a0d4786dd1695d47c;hp=16654ca6cb340d8e5557369d119ee49908ee51af;hpb=2ae315f25e623cc8279d3c9012a3a166d86684c2;p=virtualjaguar diff --git a/src/unzip.h b/src/unzip.h index 16654ca..6f53b07 100644 --- a/src/unzip.h +++ b/src/unzip.h @@ -1,135 +1,26 @@ #ifndef __UNZIP_H__ #define __UNZIP_H__ -#include "types.h" #include +#include -#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__