40#ifndef __ZipFileIterator_h
41#define __ZipFileIterator_h
48struct ZipFileHeaderData;
120 ZipComprMethod_Stored=0,
121 ZipComprMethod_Deflated=8,
122 ZipComprMethod_AES=99
128typedef struct ZipFileHeader
133 const char* getAESef();
139 U32 getUncompressedSizeLittleEndian();
140 U32 getCrc32LittleEndian();
141 U32 getCompressedSize();
142 U32 getUncompressedSize();
144 static const char* e2str(
ZipErr e);
145 U16 getVersionMade();
152 struct ZipFileHeaderData* data;
169#define ZipFileHeader_getFn(o) (o)->fn
170#define ZipFileHeader_getEf(o) (o)->ef
171#define ZipFileHeader_getAESef(o) (o)->AESef
172#define ZipFileHeader_isDirectory(o) ((o)->fn[(o)->fnLen-1] == '/')
173#define ZipFileHeader_getFnLen(o) (o)->fnLen
174#define ZipFileHeader_getEfLen(o) (o)->efLen
175#define ZipFileHeader_getFcLen(o) (o)->fcLen
176#define ZipFileHeader_getComprMethod(o) (o)->comprMethod
177#define ZipFileHeader_getReader(o) (CspReader*)(o)->reader
178BA_API
U32 ZipFileHeader_getUncompressedSizeLittleEndian(ZipFileHeader* o);
179BA_API
U32 ZipFileHeader_getCrc32LittleEndian(ZipFileHeader* o);
180BA_API
U32 ZipFileHeader_getCompressedSize(ZipFileHeader* o);
181BA_API
U32 ZipFileHeader_getUncompressedSize(ZipFileHeader* o);
182BA_API
U32 ZipFileHeader_getCrc32(ZipFileHeader* o);
183BA_API
const char* ZipFileHeader_e2str(
ZipErr e);
186BA_API
U16 ZipFileHeader_getVersionMade(ZipFileHeader* o);
196BA_API
U16 ZipFileHeader_getFlag(ZipFileHeader* o);
198BA_API
U32 ZipFileHeader_getDataOffset(ZipFileHeader* o);
199BA_API
U32 ZipFileHeader_getTime(ZipFileHeader* o);
203inline const char* ZipFileHeader::getFn() {
204 return ZipFileHeader_getFn(
this);
206inline const char* ZipFileHeader::getEf() {
207 return (
char*)ZipFileHeader_getEf(
this);
209inline const char* ZipFileHeader::getAESef() {
210 return (
char*)ZipFileHeader_getAESef(
this);
212inline bool ZipFileHeader::isDirectory() {
213 return ZipFileHeader_isDirectory(
this) ? true :
false;
215inline U16 ZipFileHeader::getFnLen() {
216 return ZipFileHeader_getFnLen(
this);
218inline U16 ZipFileHeader::getEfLen() {
219 return ZipFileHeader_getEfLen(
this);
221inline U16 ZipFileHeader::getFcLen() {
222 return ZipFileHeader_getFcLen(
this);
225 return ZipFileHeader_getComprMethod(
this);
227inline CspReader* ZipFileHeader::getReader() {
228 return ZipFileHeader_getReader(
this);
230inline U32 ZipFileHeader::getUncompressedSizeLittleEndian() {
231 return ZipFileHeader_getUncompressedSizeLittleEndian(
this);
233inline U32 ZipFileHeader::getCrc32LittleEndian() {
234 return ZipFileHeader_getCrc32LittleEndian(
this);
236inline U32 ZipFileHeader::getCompressedSize() {
237 return ZipFileHeader_getCompressedSize(
this);
239inline U32 ZipFileHeader::getUncompressedSize() {
240 return ZipFileHeader_getUncompressedSize(
this);
242inline U32 ZipFileHeader::getCrc32() {
243 return ZipFileHeader_getCrc32(
this);
245inline const char* ZipFileHeader::e2str(
ZipErr e) {
246 return ZipFileHeader_e2str(e);
248inline U16 ZipFileHeader::getVersionMade() {
249 return ZipFileHeader_getVersionMade(
this);
251inline U16 ZipFileHeader::getFlag() {
252 return ZipFileHeader_getFlag(
this);
254inline U32 ZipFileHeader::getDataOffset() {
255 return ZipFileHeader_getDataOffset(
this);
257inline U32 ZipFileHeader::getTime() {
258 return ZipFileHeader_getTime(
this);
271 U32 uncompressedSize;
280#if defined(B_LITTLE_ENDIAN)
281#define ZipFileInfo_makeLittleEndianU32(x) x
282#elif defined(B_BIG_ENDIAN)
283#define ZipFileInfo_makeLittleEndianU32(x) \
284 ((U32)((((U32)(x) & 0x000000ffU) << 24) | \
285 (((U32)(x) & 0x0000ff00U) << 8) | \
286 (((U32)(x) & 0x00ff0000U) >> 8) | \
287 (((U32)(x) & 0xff000000U) >> 24)))
289#error in config/make file, you must define one of B_LITTLE_ENDIAN or B_BIG_ENDIAN
292#define ZipFileInfo_getCrc32LittleEndian(o) \
293 ZipFileInfo_makeLittleEndianU32((o)->crc32);
294#define ZipFileInfo_getUncompressedSizeLittleEndian(o) \
295 ZipFileInfo_makeLittleEndianU32((o)->uncompressedSize);
298#define ZipFileInfo_constructor(o, fileHeader, EfPtr) \
300 (o)->crc32 = ZipFileHeader_getCrc32(fileHeader); \
301 (o)->dataOffset = ZipFileHeader_getDataOffset(fileHeader); \
302 (o)->uncompressedSize = ZipFileHeader_getUncompressedSize(fileHeader); \
303 (o)->compressedSize = ZipFileHeader_getCompressedSize(fileHeader); \
304 (o)->time = ZipFileHeader_getTime(fileHeader); \
305 (o)->comprMethod = ZipFileHeader_getComprMethod(fileHeader); \
306 (o)->flag = ZipFileHeader_getFlag(fileHeader); \
308 (o)->AESef = (EfPtr + (ZipFileHeader_getAESef(fileHeader) - ZipFileHeader_getEf(fileHeader))); \
316 U32 uncompressedSize;
322#define MiniZipFileInfo_constructor(o, fileHeader) \
324 (o)->dataOffset = ZipFileHeader_getDataOffset(fileHeader); \
325 (o)->uncompressedSize = ZipFileHeader_getUncompressedSize(fileHeader); \
326 (o)->compressedSize = ZipFileHeader_getCompressedSize(fileHeader); \
327 (o)->comprMethod = ZipFileHeader_getComprMethod(fileHeader); \
362 ZipFileHeader* getElement();
370 ZipFileHeader fileHeader;
371 U32 curFileHeaderOffs;
383#define CentralDirIterator_getECode(o) (o)->err
397 U8* buf,
U32 bufSize);
439 void operator delete(
void* d) {
if(d)
::baFree(d); }
440 void *
operator new(size_t,
void *place) {
return place; }
441 void operator delete(
void*,
void *) { }
482#define ZipContainer_getECode(o) (o)->errCode
491int initGZipHeader(
struct ZipFileInfo* zfi, GzipHeader* gzipH);
int(* CspReader_Read)(struct CspReader *o, void *data, U32 offset, U32 size, int blockStart)
Prototype for the CspReader callback function.
Definition: CspRunTm.h:115
void * baMalloc(size_t size)
Allocate uninitialized storage using the target's configured allocator.
void baFree(void *p)
Release storage using the target's configured allocator.
BA_API void ZipContainer_constructor(ZipContainer *o, ZipReader *reader, U8 *buf, U32 bufSize)
Create a ZipContainer instance.
ZipErr getECode()
Definition: ZipFileIterator.h:487
ZipFileHeader * getElement()
Read the current central-directory entry.
Definition: ZipFileIterator.h:418
struct ZipContainer ZipContainer
A ZipContainer is a buffer used by a ZipIo when reading data from a ZipReader.
ZipErr
ZIP metadata parsing result; zero is success, negative values are failures.
Definition: ZipFileIterator.h:108
#define CentralDirIterator_getECode(o)
Query the iterator's last parsing result.
Definition: ZipFileIterator.h:383
BA_API BaBool CentralDirIterator_nextElement(CentralDirIterator *o)
Advance after a successful getElement().
struct CentralDirIterator CentralDirIterator
Low level ZIP file central directory iterator.
struct ZipFileInfo ZipFileInfo
Low level ZIP file information used internally by the Zip File System.
CentralDirIterator(ZipContainer *container)
Initialize an iterator using the container's shared working buffer.
Definition: ZipFileIterator.h:408
bool nextElement()
Advance after a successful getElement().
Definition: ZipFileIterator.h:421
#define ZipContainer_getECode(o)
Definition: ZipFileIterator.h:482
ZipErr getECode()
Query the iterator's last parsing result.
Definition: ZipFileIterator.h:415
BA_API void CentralDirIterator_constructorR(CentralDirIterator *o, struct ZipContainer *container, U8 *buf, U32 bufSize)
Initialize an iterator with separate working storage.
BA_API void ZipReader_constructor(ZipReader *o, CspReader_Read r, U32 zipFileSize)
Initialize a reader interface; no ZIP data is read yet.
BA_API void CentralDirIterator_constructor(CentralDirIterator *o, struct ZipContainer *container)
Initialize an iterator using the container's shared working buffer.
BA_API ZipFileHeader * CentralDirIterator_getElement(CentralDirIterator *o)
Read the current central-directory entry.
ZipComprMethod
ZIP compression-method identifiers used in entry metadata.
Definition: ZipFileIterator.h:119
@ ZipErr_Compression
Unsupported compr.
Definition: ZipFileIterator.h:112
@ ZipErr_Spanned
Spanned/Split archives not supported.
Definition: ZipFileIterator.h:111
@ ZipErr_Reading
Reading failed.
Definition: ZipFileIterator.h:110
@ ZipErr_Buf
The buffer is too small.
Definition: ZipFileIterator.h:109
@ ZipErr_Incompatible
Unknown ZIP Central Directory Structure.
Definition: ZipFileIterator.h:113
uint16_t U16
Unsigned 16-bit integer.
Definition: GenPrimT.h:91
uint32_t U32
Unsigned 32-bit integer.
Definition: GenPrimT.h:93
uint8_t U8
Unsigned 8-bit integer.
Definition: GenPrimT.h:89
U8 BaBool
Boolean stored in an unsigned byte; FALSE is zero and TRUE is one.
Definition: GenPrimT.h:118
Low level ZIP file central directory iterator.
Definition: ZipFileIterator.h:336
Abstract interface class for reading the "dat" file generated by HttpLink.
Definition: CspRunTm.h:126
A ZipContainer is a buffer used by a ZipIo when reading data from a ZipReader.
Definition: ZipFileIterator.h:434
ZipContainer()
Uninitialized storage; call ZipContainer_constructor before use.
Definition: ZipFileIterator.h:437
Low level ZIP file information used internally by the Zip File System.
Definition: ZipFileIterator.h:268
Abstract interface class for reading a ZipFile.
Definition: ZipFileIterator.h:74
ZipReader()
Uninitialized storage; call ZipReader_constructor before use.
Definition: ZipFileIterator.h:76