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