| 1 | #ifndef __UNZIP_H\r |
| 2 | #define __UNZIP_H\r |
| 3 | \r |
| 4 | #include <stdio.h>\r |
| 5 | \r |
| 6 | #ifdef __cplusplus\r |
| 7 | extern "C" {\r |
| 8 | #endif\r |
| 9 | \r |
| 10 | // notaz: something's missing this\r |
| 11 | #ifndef UINT16\r |
| 12 | #define UINT32 unsigned int\r |
| 13 | #define UINT16 unsigned short\r |
| 14 | #define UINT8 unsigned char\r |
| 15 | #endif\r |
| 16 | \r |
| 17 | /***************************************************************************\r |
| 18 | * Support for retrieving files from zipfiles\r |
| 19 | ***************************************************************************/\r |
| 20 | \r |
| 21 | struct zipent {\r |
| 22 | UINT32 cent_file_header_sig;\r |
| 23 | UINT8 version_made_by;\r |
| 24 | UINT8 host_os;\r |
| 25 | UINT8 version_needed_to_extract;\r |
| 26 | UINT8 os_needed_to_extract;\r |
| 27 | UINT16 general_purpose_bit_flag;\r |
| 28 | UINT16 compression_method;\r |
| 29 | UINT16 last_mod_file_time;\r |
| 30 | UINT16 last_mod_file_date;\r |
| 31 | UINT32 crc32;\r |
| 32 | UINT32 compressed_size;\r |
| 33 | UINT32 uncompressed_size;\r |
| 34 | UINT16 filename_length;\r |
| 35 | UINT16 extra_field_length;\r |
| 36 | UINT16 file_comment_length;\r |
| 37 | UINT16 disk_number_start;\r |
| 38 | UINT16 internal_file_attrib;\r |
| 39 | UINT32 external_file_attrib;\r |
| 40 | UINT32 offset_lcl_hdr_frm_frst_disk;\r |
| 41 | char* name; /* 0 terminated */\r |
| 42 | };\r |
| 43 | \r |
| 44 | typedef struct _ZIP {\r |
| 45 | char* zip; /* zip name */\r |
| 46 | FILE* fp; /* zip handler */\r |
| 47 | long length; /* length of zip file */\r |
| 48 | \r |
| 49 | char* ecd; /* end_of_cent_dir data */\r |
| 50 | unsigned ecd_length; /* end_of_cent_dir length */\r |
| 51 | \r |
| 52 | char* cd; /* cent_dir data */\r |
| 53 | \r |
| 54 | unsigned cd_pos; /* position in cent_dir */\r |
| 55 | \r |
| 56 | struct zipent ent; /* buffer for readzip */\r |
| 57 | \r |
| 58 | /* end_of_cent_dir */\r |
| 59 | UINT32 end_of_cent_dir_sig;\r |
| 60 | UINT16 number_of_this_disk;\r |
| 61 | UINT16 number_of_disk_start_cent_dir;\r |
| 62 | UINT16 total_entries_cent_dir_this_disk;\r |
| 63 | UINT16 total_entries_cent_dir;\r |
| 64 | UINT32 size_of_cent_dir;\r |
| 65 | UINT32 offset_to_start_of_cent_dir;\r |
| 66 | UINT16 zipfile_comment_length;\r |
| 67 | char* zipfile_comment; /* pointer in ecd */\r |
| 68 | } ZIP;\r |
| 69 | \r |
| 70 | /* Opens a zip stream for reading\r |
| 71 | return:\r |
| 72 | !=0 success, zip stream\r |
| 73 | ==0 error\r |
| 74 | */\r |
| 75 | ZIP* openzip(const char* path);\r |
| 76 | \r |
| 77 | /* Closes a zip stream */\r |
| 78 | void closezip(ZIP* zip);\r |
| 79 | \r |
| 80 | /* Reads the current entry from a zip stream\r |
| 81 | in:\r |
| 82 | zip opened zip\r |
| 83 | return:\r |
| 84 | !=0 success\r |
| 85 | ==0 error\r |
| 86 | */\r |
| 87 | struct zipent* readzip(ZIP* zip);\r |
| 88 | \r |
| 89 | /* Suspend access to a zip file (release file handler)\r |
| 90 | in:\r |
| 91 | zip opened zip\r |
| 92 | note:\r |
| 93 | A suspended zip is automatically reopened at first call of\r |
| 94 | readuncompressd() or readcompressed() functions\r |
| 95 | */\r |
| 96 | void suspendzip(ZIP* zip);\r |
| 97 | \r |
| 98 | /* Resets a zip stream to the first entry\r |
| 99 | in:\r |
| 100 | zip opened zip\r |
| 101 | note:\r |
| 102 | ZIP file must be opened and not suspended\r |
| 103 | */\r |
| 104 | void rewindzip(ZIP* zip);\r |
| 105 | \r |
| 106 | /* Read compressed data from a zip entry\r |
| 107 | in:\r |
| 108 | zip opened zip\r |
| 109 | ent entry to read\r |
| 110 | out:\r |
| 111 | data buffer for data, ent.compressed_size UINT8s allocated by the caller\r |
| 112 | return:\r |
| 113 | ==0 success\r |
| 114 | <0 error\r |
| 115 | */\r |
| 116 | int readcompresszip(ZIP* zip, struct zipent* ent, char* data);\r |
| 117 | \r |
| 118 | /* Read decompressed data from a zip entry\r |
| 119 | in:\r |
| 120 | zip zip stream open\r |
| 121 | ent entry to read\r |
| 122 | out:\r |
| 123 | data buffer for data, ent.uncompressed_size UINT8s allocated by the caller\r |
| 124 | return:\r |
| 125 | ==0 success\r |
| 126 | <0 error\r |
| 127 | */\r |
| 128 | int readuncompresszip(ZIP* zip, struct zipent* ent, char* data);\r |
| 129 | \r |
| 130 | int seekcompresszip(ZIP* zip, struct zipent* ent);\r |
| 131 | \r |
| 132 | /* public functions */\r |
| 133 | int /* error */ load_zipped_file (const char *zipfile, const char *filename,\r |
| 134 | unsigned char **buf, unsigned int *length);\r |
| 135 | int /* error */ checksum_zipped_file (const char *zipfile, const char *filename, unsigned int *length, unsigned int *sum);\r |
| 136 | \r |
| 137 | void unzip_cache_clear(void);\r |
| 138 | \r |
| 139 | /* public globals */\r |
| 140 | extern int gUnzipQuiet; /* flag controls error messages */\r |
| 141 | \r |
| 142 | #ifdef __cplusplus\r |
| 143 | }\r |
| 144 | #endif\r |
| 145 | \r |
| 146 | #endif\r |