(Szlib) Added unzip.c and fileapi.c to szlib.c

This commit is contained in:
TwinAphex51224 2012-03-06 20:23:24 +01:00
parent d9337a2589
commit 556e158020
3 changed files with 1935 additions and 482 deletions

File diff suppressed because it is too large Load Diff

View File

@ -1,390 +0,0 @@
/* szlib.h -- internal interface and configuration of the compression library
* Copyright (C) 1995-2002 Jean-loup Gailly.
* For conditions of distribution and use, see copyright notice in zlib.h
*/
/* This source as presented is a modified version of original zlib for use with SSNES,
* and must not be confused with the original software. */
#ifndef _SZLIB_H
#define _SZLIB_H
#include <stddef.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include "zconf.h"
/* constants */
#define ZLIB_VERSION "1.1.4"
#define Z_NO_FLUSH 0
#define Z_PARTIAL_FLUSH 1 /* will be removed, use Z_SYNC_FLUSH instead */
#define Z_SYNC_FLUSH 2
#define Z_FULL_FLUSH 3
#define Z_FINISH 4
/* Allowed flush values; see deflate() below for details */
#define Z_OK 0
#define Z_STREAM_END 1
#define Z_NEED_DICT 2
#define Z_ERRNO (-1)
#define Z_STREAM_ERROR (-2)
#define Z_DATA_ERROR (-3)
#define Z_MEM_ERROR (-4)
#define Z_BUF_ERROR (-5)
#define Z_VERSION_ERROR (-6)
/* Return codes for the compression/decompression functions. Negative
* values are errors, positive values are used for special but normal events.
*/
#define Z_NO_COMPRESSION 0
#define Z_BEST_SPEED 1
#define Z_BEST_COMPRESSION 9
#define Z_DEFAULT_COMPRESSION (-1)
/* compression levels */
#define Z_FILTERED 1
#define Z_HUFFMAN_ONLY 2
#define Z_DEFAULT_STRATEGY 0
#define Z_BINARY 0
#define Z_ASCII 1
#define Z_UNKNOWN 2
/* Possible values of the data_type field */
#define Z_DEFLATED 8
/* The deflate compression method (the only one supported in this version) */
#define Z_NULL 0 /* for initializing zalloc, zfree, opaque */
#define zlib_version zlibVersion()
/* for compatibility with versions < 1.0.2 */
typedef voidpf (*alloc_func) (voidpf opaque, unsigned int items, unsigned int size);
typedef void (*free_func) (voidpf opaque, voidpf address);
typedef struct z_stream_s {
Bytef *next_in; /* next input byte */
unsigned int avail_in; /* number of bytes available at next_in */
unsigned long total_in; /* total nb of input bytes read so far */
Bytef *next_out; /* next output byte should be put there */
unsigned int avail_out; /* remaining free space at next_out */
unsigned long total_out; /* total nb of bytes output so far */
char *msg; /* last error message, NULL if no error */
struct internal_state *state; /* not visible by applications */
alloc_func zalloc; /* used to allocate the internal state */
free_func zfree; /* used to free the internal state */
voidpf opaque; /* private data object passed to zalloc and zfree */
int data_type; /* best guess about the data type: ascii or binary */
unsigned long adler; /* adler32 value of the uncompressed data */
unsigned long reserved; /* reserved for future use */
} z_stream;
typedef z_stream *z_streamp;
typedef unsigned char uch;
typedef unsigned char uchf;
typedef unsigned short ush;
typedef unsigned short ushf;
typedef unsigned long ulg;
extern const char *z_errmsg[10]; /* indexed by 2-zlib_error */
/* (size given to avoid silly warnings with Visual C++) */
#define ERR_MSG(err) z_errmsg[Z_NEED_DICT-(err)]
#define ERR_RETURN(strm,err) \
return (strm->msg = (char*)ERR_MSG(err), (err))
/* To be used only when the state is known to be valid */
/* common constants */
#ifndef DEF_WBITS
# define DEF_WBITS MAX_WBITS
#endif
/* default windowBits for decompression. MAX_WBITS is for compression only */
#if MAX_MEM_LEVEL >= 8
# define DEF_MEM_LEVEL 8
#else
# define DEF_MEM_LEVEL MAX_MEM_LEVEL
#endif
/* default memLevel */
#define STORED_BLOCK 0
#define STATIC_TREES 1
#define DYN_TREES 2
/* The three kinds of block type */
#define MIN_MATCH 3
#define MAX_MATCH 258
/* The minimum and maximum match lengths */
#define PRESET_DICT 0x20 /* preset dictionary flag in zlib header */
/* target dependencies */
#ifdef WIN32 /* Window 95 & Windows NT */
# define OS_CODE 0x0b
#endif
#if defined(ATARI) || defined(atarist)
# define OS_CODE 0x05
#endif
#if defined(MACOS) || defined(TARGET_OS_MAC)
# define OS_CODE 0x07
# if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os
# include <unix.h> /* for fdopen */
# else
# ifndef fdopen
# define fdopen(fd,mode) NULL /* No fdopen() */
# endif
# endif
#endif
#ifdef __50SERIES /* Prime/PRIMOS */
# define OS_CODE 0x0F
#endif
#ifdef TOPS20
# define OS_CODE 0x0a
#endif
#if defined(_BEOS_) || defined(RISCOS)
# define fdopen(fd,mode) NULL /* No fdopen() */
#endif
#if (defined(_MSC_VER) && (_MSC_VER > 600))
# define fdopen(fd,type) _fdopen(fd,type)
#endif
/* Common defaults */
#ifndef OS_CODE
# define OS_CODE 0x03 /* assume Unix */
#endif
/* functions */
#ifdef HAVE_STRERROR
extern char *strerror (int);
# define zstrerror(errnum) strerror(errnum)
#else
# define zstrerror(errnum) ""
#endif
typedef unsigned long ( *check_func) (unsigned long check, const Bytef *buf,
unsigned int len);
voidpf zcalloc (voidpf opaque, unsigned items, unsigned size);
void zcfree (voidpf opaque, voidpf ptr);
#define ZALLOC(strm, items, size) \
(*((strm)->zalloc))((strm)->opaque, (items), (size))
#define ZFREE(strm, addr) (*((strm)->zfree))((strm)->opaque, (voidpf)(addr))
/* Huffman code lookup table entry--this entry is four bytes for machines
that have 16-bit pointers (e.g. PC's in the small or medium model). */
typedef struct inflate_huft_s inflate_huft;
struct inflate_huft_s {
union {
struct {
Byte Exop; /* number of extra bits or operation */
Byte Bits; /* number of bits in this code or subcode */
} what;
unsigned int pad; /* pad structure to a power of 2 (4 bytes for */
} word; /* 16-bit, 8 bytes for 32-bit int's) */
unsigned int base; /* literal, length base, distance base,
or table offset */
};
/* Maximum size of dynamic tree. The maximum found in a long but non-
exhaustive search was 1004 huft structures (850 for length/literals
and 154 for distances, the latter actually the result of an
exhaustive search). The actual maximum is not known, but the
value below is more than safe. */
#define MANY 1440
extern int inflate_trees_bits (
unsigned int *, /* 19 code lengths */
unsigned int *, /* bits tree desired/actual depth */
inflate_huft **, /* bits tree result */
inflate_huft *, /* space for trees */
z_streamp); /* for messages */
extern int inflate_trees_dynamic (
unsigned int, /* number of literal/length codes */
unsigned int, /* number of distance codes */
unsigned int *, /* that many (total) code lengths */
unsigned int *, /* literal desired/actual bit depth */
unsigned int *, /* distance desired/actual bit depth */
inflate_huft **, /* literal/length tree result */
inflate_huft **, /* distance tree result */
inflate_huft *, /* space for trees */
z_streamp); /* for messages */
extern int inflate_trees_fixed (
unsigned int *, /* literal desired/actual bit depth */
unsigned int *, /* distance desired/actual bit depth */
inflate_huft **, /* literal/length tree result */
inflate_huft **, /* distance tree result */
z_streamp); /* for memory allocation */
struct inflate_blocks_state;
typedef struct inflate_blocks_state inflate_blocks_statef;
extern inflate_blocks_statef * inflate_blocks_new (
z_streamp z,
check_func c, /* check function */
unsigned int w); /* window size */
extern int inflate_blocks (
inflate_blocks_statef *,
z_streamp ,
int); /* initial return code */
extern void inflate_blocks_reset (
inflate_blocks_statef *,
z_streamp ,
unsigned long *); /* check value on output */
extern int inflate_blocks_free (
inflate_blocks_statef *,
z_streamp);
struct inflate_codes_state;
typedef struct inflate_codes_state inflate_codes_statef;
extern inflate_codes_statef *inflate_codes_new (
unsigned int, unsigned int,
inflate_huft *, inflate_huft *,
z_streamp );
extern int inflate_codes (
inflate_blocks_statef *,
z_streamp ,
int);
typedef enum {
TYPE, /* get type bits (3, including end bit) */
LENS, /* get lengths for stored */
STORED, /* processing stored block */
TABLE, /* get table lengths */
BTREE, /* get bit lengths tree for a dynamic block */
DTREE, /* get length, distance trees for a dynamic block */
CODES, /* processing fixed or dynamic block */
DRY, /* output remaining window bytes */
DONE, /* finished last block, done */
BAD} /* got a data error--stuck here */
inflate_block_mode;
/* inflate blocks semi-private state */
struct inflate_blocks_state {
/* mode */
inflate_block_mode mode; /* current inflate_block mode */
/* mode dependent information */
union {
unsigned int left; /* if STORED, bytes left to copy */
struct {
unsigned int table; /* table lengths (14 bits) */
unsigned int index; /* index into blens (or border) */
unsigned int *blens; /* bit lengths of codes */
unsigned int bb; /* bit length tree depth */
inflate_huft *tb; /* bit length decoding tree */
} trees; /* if DTREE, decoding info for trees */
struct {
inflate_codes_statef
*codes;
} decode; /* if CODES, current state */
} sub; /* submode */
unsigned int last; /* true if this block is the last block */
/* mode independent information */
unsigned int bitk; /* bits in bit buffer */
unsigned long bitb; /* bit buffer */
inflate_huft *hufts; /* single malloc for tree space */
Bytef *window; /* sliding window */
Bytef *end; /* one byte after sliding window */
Bytef *read; /* window read pointer */
Bytef *write; /* window write pointer */
check_func checkfn; /* check function */
unsigned long check; /* check on output */
};
/* defines for inflate input/output */
/* update pointers and return */
#define UPDBITS {s->bitb=b;s->bitk=k;}
#define UPDIN {z->avail_in=n;z->total_in+=p-z->next_in;z->next_in=p;}
#define UPDOUT {s->write=q;}
#define UPDATE {UPDBITS UPDIN UPDOUT}
#define LEAVE {UPDATE return inflate_flush(s,z,r);}
/* get bytes and bits */
#define LOADIN {p=z->next_in;n=z->avail_in;b=s->bitb;k=s->bitk;}
#define NEEDBYTE {if(n)r=Z_OK;else LEAVE}
#define NEXTBYTE (n--,*p++)
#define NEEDBITS(j) {while(k<(j)){NEEDBYTE;b|=((unsigned long)NEXTBYTE)<<k;k+=8;}}
#define DUMPBITS(j) {b>>=(j);k-=(j);}
/* output bytes */
#define WAVAIL (unsigned int)(q<s->read?s->read-q-1:s->end-q)
#define LOADOUT {q=s->write;m=(unsigned int)WAVAIL;}
#define WRAP {if(q==s->end&&s->read!=s->window){q=s->window;m=(unsigned int)WAVAIL;}}
#define FLUSH {UPDOUT r=inflate_flush(s,z,r); LOADOUT}
#define NEEDOUT {if(m==0){WRAP if(m==0){FLUSH WRAP if(m==0) LEAVE}}r=Z_OK;}
#define OUTBYTE(a) {*q++=(Byte)(a);m--;}
/* load local pointers */
#define LOAD {LOADIN LOADOUT}
/* masks for lower bits (size given to avoid silly warnings with Visual C++) */
extern unsigned int inflate_mask[17];
/* copy as much as possible from the sliding window to the output area */
extern int inflate_flush (inflate_blocks_statef *, z_streamp , int);
// utility functions
extern voidp gzopen (const char *path, const char *mode);
extern voidp gzdopen (int fd, const char *mode);
extern int gzread (voidp file, voidp buf, unsigned len);
extern int gzwrite (voidp file, const voidp buf, unsigned len);
extern int gzprintf (voidp file, const char *format, ...);
extern int gzputs (voidp file, const char *s);
extern char * gzgets (voidp file, char *buf, int len);
extern int gzputc (voidp file, int c);
extern int gzgetc (voidp file);
extern int gzflush (voidp file, int flush);
extern z_off_t gzseek (voidp file, z_off_t offset, int whence);
extern int gzrewind (voidp file);
extern z_off_t gztell (voidp file);
extern int gzeof (voidp file);
extern int gzclose (voidp file);
extern const char * gzerror (voidp file, int *errnum);
/* checksum functions */
extern unsigned long adler32 (unsigned long adler, const Bytef *buf, unsigned int len);
extern unsigned long crc32 (unsigned long crc, const Bytef *buf, unsigned int len);
/* various hacks, don't look :) */
extern int inflateInit_ (z_streamp strm, const char * version, int stream_size);
extern int inflateInit2_ (z_streamp strm, int windowBits, const char *version, int stream_size);
#define inflateInit(strm) \
inflateInit_((strm), ZLIB_VERSION, sizeof(z_stream))
#define inflateInit2(strm, windowBits) \
inflateInit2_((strm), (windowBits), ZLIB_VERSION, sizeof(z_stream))
#endif /* _SZLIB_H */

View File

@ -1,76 +1,23 @@
/* zlib.h -- interface of the 'zlib' general purpose compression library
version 1.1.4, March 11th, 2002
Copyright (C) 1995-2002 Jean-loup Gailly and Mark Adler
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
Jean-loup Gailly Mark Adler
jloup@gzip.org madler@alumni.caltech.edu
The data format used by the zlib library is described by RFCs (Request for
Comments) 1950 to 1952 in the files ftp://ds.internic.net/rfc/rfc1950.txt
(zlib format), rfc1951.txt (deflate format) and rfc1952.txt (gzip format).
*/
/* szlib.h -- internal interface and configuration of the compression library
* Copyright (C) 1995-2002 Jean-loup Gailly.
* For conditions of distribution and use, see copyright notice in zlib.h
*/
/* This source as presented is a modified version of original zlib for use with SSNES,
* and must not be confused with the original software. */
#ifndef _ZLIB_H
#define _ZLIB_H
#include "zconf.h"
#ifndef _SZLIB_H
#define _SZLIB_H
#ifdef __cplusplus
extern "C" {
#endif
#define ZLIB_VERSION "1.1.4"
typedef voidpf (*alloc_func) (voidpf opaque, unsigned int items, unsigned int size);
typedef void (*free_func) (voidpf opaque, voidpf address);
struct internal_state;
typedef struct z_stream_s {
Bytef *next_in; /* next input byte */
unsigned int avail_in; /* number of bytes available at next_in */
unsigned long total_in; /* total nb of input bytes read so far */
Bytef *next_out; /* next output byte should be put there */
unsigned int avail_out; /* remaining free space at next_out */
unsigned long total_out; /* total nb of bytes output so far */
char *msg; /* last error message, NULL if no error */
struct internal_state *state; /* not visible by applications */
alloc_func zalloc; /* used to allocate the internal state */
free_func zfree; /* used to free the internal state */
voidpf opaque; /* private data object passed to zalloc and zfree */
int data_type; /* best guess about the data type: ascii or binary */
unsigned long adler; /* adler32 value of the uncompressed data */
unsigned long reserved; /* reserved for future use */
} z_stream;
typedef z_stream *z_streamp;
#include <string.h>
#include "zconf.h"
/* constants */
#define ZLIB_VERSION "1.1.4"
#define Z_NO_FLUSH 0
#define Z_PARTIAL_FLUSH 1 /* will be removed, use Z_SYNC_FLUSH instead */
@ -88,6 +35,7 @@ typedef z_stream *z_streamp;
#define Z_MEM_ERROR (-4)
#define Z_BUF_ERROR (-5)
#define Z_VERSION_ERROR (-6)
/* Return codes for the compression/decompression functions. Negative
* values are errors, positive values are used for special but normal events.
*/
@ -115,57 +63,631 @@ typedef z_stream *z_streamp;
#define zlib_version zlibVersion()
/* for compatibility with versions < 1.0.2 */
// basic functions
typedef voidpf (*alloc_func) (voidpf opaque, unsigned int items, unsigned int size);
typedef void (*free_func) (voidpf opaque, voidpf address);
typedef voidp gzFile;
typedef struct z_stream_s {
Bytef *next_in; /* next input byte */
unsigned int avail_in; /* number of bytes available at next_in */
unsigned long total_in; /* total nb of input bytes read so far */
extern const char * zlibVersion (void);
Bytef *next_out; /* next output byte should be put there */
unsigned int avail_out; /* remaining free space at next_out */
unsigned long total_out; /* total nb of bytes output so far */
extern int inflate (z_streamp strm, int flush);
char *msg; /* last error message, NULL if no error */
struct internal_state *state; /* not visible by applications */
extern int inflateEnd (z_streamp strm);
alloc_func zalloc; /* used to allocate the internal state */
free_func zfree; /* used to free the internal state */
voidpf opaque; /* private data object passed to zalloc and zfree */
// The following functions are needed only in some special applications.
int data_type; /* best guess about the data type: ascii or binary */
unsigned long adler; /* adler32 value of the uncompressed data */
unsigned long reserved; /* reserved for future use */
} z_stream;
extern int inflateReset (z_streamp strm);
typedef z_stream *z_streamp;
typedef unsigned char uch;
typedef unsigned char uchf;
typedef unsigned short ush;
typedef unsigned short ushf;
typedef unsigned long ulg;
extern const char *z_errmsg[10]; /* indexed by 2-zlib_error */
/* (size given to avoid silly warnings with Visual C++) */
#define ERR_MSG(err) z_errmsg[Z_NEED_DICT-(err)]
#define ERR_RETURN(strm,err) \
return (strm->msg = (char*)ERR_MSG(err), (err))
/* To be used only when the state is known to be valid */
/* common constants */
#ifndef DEF_WBITS
# define DEF_WBITS MAX_WBITS
#endif
/* default windowBits for decompression. MAX_WBITS is for compression only */
#if MAX_MEM_LEVEL >= 8
# define DEF_MEM_LEVEL 8
#else
# define DEF_MEM_LEVEL MAX_MEM_LEVEL
#endif
/* default memLevel */
#define STORED_BLOCK 0
#define STATIC_TREES 1
#define DYN_TREES 2
/* The three kinds of block type */
#define MIN_MATCH 3
#define MAX_MATCH 258
/* The minimum and maximum match lengths */
#define PRESET_DICT 0x20 /* preset dictionary flag in zlib header */
/* target dependencies */
#ifdef WIN32 /* Window 95 & Windows NT */
# define OS_CODE 0x0b
#endif
#if defined(ATARI) || defined(atarist)
# define OS_CODE 0x05
#endif
#if defined(MACOS) || defined(TARGET_OS_MAC)
# define OS_CODE 0x07
# if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os
# include <unix.h> /* for fdopen */
# else
# ifndef fdopen
# define fdopen(fd,mode) NULL /* No fdopen() */
# endif
# endif
#endif
#ifdef __50SERIES /* Prime/PRIMOS */
# define OS_CODE 0x0F
#endif
#ifdef TOPS20
# define OS_CODE 0x0a
#endif
#if defined(_BEOS_) || defined(RISCOS)
# define fdopen(fd,mode) NULL /* No fdopen() */
#endif
#if (defined(_MSC_VER) && (_MSC_VER > 600))
# define fdopen(fd,type) _fdopen(fd,type)
#endif
/* Common defaults */
#ifndef OS_CODE
# define OS_CODE 0x03 /* assume Unix */
#endif
/* functions */
#ifdef HAVE_STRERROR
extern char *strerror (int);
# define zstrerror(errnum) strerror(errnum)
#else
# define zstrerror(errnum) ""
#endif
typedef unsigned long ( *check_func) (unsigned long check, const Bytef *buf,
unsigned int len);
voidpf zcalloc (voidpf opaque, unsigned items, unsigned size);
void zcfree (voidpf opaque, voidpf ptr);
#define ZALLOC(strm, items, size) \
(*((strm)->zalloc))((strm)->opaque, (items), (size))
#define ZFREE(strm, addr) (*((strm)->zfree))((strm)->opaque, (voidpf)(addr))
/* Huffman code lookup table entry--this entry is four bytes for machines
that have 16-bit pointers (e.g. PC's in the small or medium model). */
typedef struct inflate_huft_s inflate_huft;
struct inflate_huft_s {
union {
struct {
Byte Exop; /* number of extra bits or operation */
Byte Bits; /* number of bits in this code or subcode */
} what;
unsigned int pad; /* pad structure to a power of 2 (4 bytes for */
} word; /* 16-bit, 8 bytes for 32-bit int's) */
unsigned int base; /* literal, length base, distance base,
or table offset */
};
/* Maximum size of dynamic tree. The maximum found in a long but non-
exhaustive search was 1004 huft structures (850 for length/literals
and 154 for distances, the latter actually the result of an
exhaustive search). The actual maximum is not known, but the
value below is more than safe. */
#define MANY 1440
extern int inflate_trees_bits (
unsigned int *, /* 19 code lengths */
unsigned int *, /* bits tree desired/actual depth */
inflate_huft **, /* bits tree result */
inflate_huft *, /* space for trees */
z_streamp); /* for messages */
extern int inflate_trees_dynamic (
unsigned int, /* number of literal/length codes */
unsigned int, /* number of distance codes */
unsigned int *, /* that many (total) code lengths */
unsigned int *, /* literal desired/actual bit depth */
unsigned int *, /* distance desired/actual bit depth */
inflate_huft **, /* literal/length tree result */
inflate_huft **, /* distance tree result */
inflate_huft *, /* space for trees */
z_streamp); /* for messages */
extern int inflate_trees_fixed (
unsigned int *, /* literal desired/actual bit depth */
unsigned int *, /* distance desired/actual bit depth */
inflate_huft **, /* literal/length tree result */
inflate_huft **, /* distance tree result */
z_streamp); /* for memory allocation */
struct inflate_blocks_state;
typedef struct inflate_blocks_state inflate_blocks_statef;
extern inflate_blocks_statef * inflate_blocks_new (
z_streamp z,
check_func c, /* check function */
unsigned int w); /* window size */
extern int inflate_blocks (
inflate_blocks_statef *,
z_streamp ,
int); /* initial return code */
extern void inflate_blocks_reset (
inflate_blocks_statef *,
z_streamp ,
unsigned long *); /* check value on output */
extern int inflate_blocks_free (
inflate_blocks_statef *,
z_streamp);
struct inflate_codes_state;
typedef struct inflate_codes_state inflate_codes_statef;
extern inflate_codes_statef *inflate_codes_new (
unsigned int, unsigned int,
inflate_huft *, inflate_huft *,
z_streamp );
extern int inflate_codes (
inflate_blocks_statef *,
z_streamp ,
int);
typedef enum {
TYPE, /* get type bits (3, including end bit) */
LENS, /* get lengths for stored */
STORED, /* processing stored block */
TABLE, /* get table lengths */
BTREE, /* get bit lengths tree for a dynamic block */
DTREE, /* get length, distance trees for a dynamic block */
CODES, /* processing fixed or dynamic block */
DRY, /* output remaining window bytes */
DONE, /* finished last block, done */
BAD} /* got a data error--stuck here */
inflate_block_mode;
/* inflate blocks semi-private state */
struct inflate_blocks_state {
/* mode */
inflate_block_mode mode; /* current inflate_block mode */
/* mode dependent information */
union {
unsigned int left; /* if STORED, bytes left to copy */
struct {
unsigned int table; /* table lengths (14 bits) */
unsigned int index; /* index into blens (or border) */
unsigned int *blens; /* bit lengths of codes */
unsigned int bb; /* bit length tree depth */
inflate_huft *tb; /* bit length decoding tree */
} trees; /* if DTREE, decoding info for trees */
struct {
inflate_codes_statef
*codes;
} decode; /* if CODES, current state */
} sub; /* submode */
unsigned int last; /* true if this block is the last block */
/* mode independent information */
unsigned int bitk; /* bits in bit buffer */
unsigned long bitb; /* bit buffer */
inflate_huft *hufts; /* single malloc for tree space */
Bytef *window; /* sliding window */
Bytef *end; /* one byte after sliding window */
Bytef *read; /* window read pointer */
Bytef *write; /* window write pointer */
check_func checkfn; /* check function */
unsigned long check; /* check on output */
};
/* defines for inflate input/output */
/* update pointers and return */
#define UPDBITS {s->bitb=b;s->bitk=k;}
#define UPDIN {z->avail_in=n;z->total_in+=p-z->next_in;z->next_in=p;}
#define UPDOUT {s->write=q;}
#define UPDATE {UPDBITS UPDIN UPDOUT}
#define LEAVE {UPDATE return inflate_flush(s,z,r);}
/* get bytes and bits */
#define LOADIN {p=z->next_in;n=z->avail_in;b=s->bitb;k=s->bitk;}
#define NEEDBYTE {if(n)r=Z_OK;else LEAVE}
#define NEXTBYTE (n--,*p++)
#define NEEDBITS(j) {while(k<(j)){NEEDBYTE;b|=((unsigned long)NEXTBYTE)<<k;k+=8;}}
#define DUMPBITS(j) {b>>=(j);k-=(j);}
/* output bytes */
#define WAVAIL (unsigned int)(q<s->read?s->read-q-1:s->end-q)
#define LOADOUT {q=s->write;m=(unsigned int)WAVAIL;}
#define WRAP {if(q==s->end&&s->read!=s->window){q=s->window;m=(unsigned int)WAVAIL;}}
#define FLUSH {UPDOUT r=inflate_flush(s,z,r); LOADOUT}
#define NEEDOUT {if(m==0){WRAP if(m==0){FLUSH WRAP if(m==0) LEAVE}}r=Z_OK;}
#define OUTBYTE(a) {*q++=(Byte)(a);m--;}
/* load local pointers */
#define LOAD {LOADIN LOADOUT}
/* masks for lower bits (size given to avoid silly warnings with Visual C++) */
extern unsigned int inflate_mask[17];
/* copy as much as possible from the sliding window to the output area */
extern int inflate_flush (inflate_blocks_statef *, z_streamp , int);
// utility functions
extern gzFile gzopen (const char *path, const char *mode);
extern gzFile gzdopen (int fd, const char *mode);
extern int gzread (gzFile file, voidp buf, unsigned len);
extern int gzwrite (gzFile file, const voidp buf, unsigned len);
extern int gzprintf (gzFile file, const char *format, ...);
extern int gzputs (gzFile file, const char *s);
extern char * gzgets (gzFile file, char *buf, int len);
extern int gzputc (gzFile file, int c);
extern int gzgetc (gzFile file);
extern int gzflush (gzFile file, int flush);
extern z_off_t gzseek (gzFile file, z_off_t offset, int whence);
extern int gzrewind (gzFile file);
extern z_off_t gztell (gzFile file);
extern int gzeof (gzFile file);
extern int gzclose (gzFile file);
extern const char * gzerror (gzFile file, int *errnum);
extern voidp gzopen (const char *path, const char *mode);
extern voidp gzdopen (int fd, const char *mode);
extern int gzread (voidp file, voidp buf, unsigned len);
extern int gzwrite (voidp file, const voidp buf, unsigned len);
extern int gzprintf (voidp file, const char *format, ...);
extern int gzputs (voidp file, const char *s);
extern char * gzgets (voidp file, char *buf, int len);
extern int gzputc (voidp file, int c);
extern int gzgetc (voidp file);
extern int gzflush (voidp file, int flush);
extern z_off_t gzseek (voidp file, z_off_t offset, int whence);
extern int gzrewind (voidp file);
extern z_off_t gztell (voidp file);
extern int gzeof (voidp file);
extern int gzclose (voidp file);
extern const char * gzerror (voidp file, int *errnum);
/* checksum functions */
extern unsigned long adler32 (unsigned long adler, const Bytef *buf, unsigned int len);
extern unsigned long crc32 (unsigned long crc, const Bytef *buf, unsigned int len);
extern unsigned long adler32 (unsigned long adler, const Bytef *buf, unsigned int len);
extern unsigned long crc32 (unsigned long crc, const Bytef *buf, unsigned int len);
/* various hacks, don't look :) */
extern int inflateInit_ (z_streamp strm, const char *version, int stream_size);
extern int inflateInit2_ (z_streamp strm, int windowBits, const char *version, int stream_size);
extern int inflateInit_ (z_streamp strm, const char * version, int stream_size);
extern int inflateInit2_ (z_streamp strm, int windowBits, const char *version, int stream_size);
#define inflateInit(strm) \
inflateInit_((strm), ZLIB_VERSION, sizeof(z_stream))
#define inflateInit2(strm, windowBits) \
inflateInit2_((strm), (windowBits), ZLIB_VERSION, sizeof(z_stream))
extern const char * zError (int err);
#if (!defined(_WIN32)) && (!defined(WIN32))
// Linux needs this to support file operation on files larger then 4+GB
// But might need better if/def to select just the platforms that needs them.
#ifndef __USE_FILE_OFFSET64
#define __USE_FILE_OFFSET64
#endif
#ifndef __USE_LARGEFILE64
#define __USE_LARGEFILE64
#endif
#ifndef _LARGEFILE64_SOURCE
#define _LARGEFILE64_SOURCE
#endif
#ifndef _FILE_OFFSET_BIT
#define _FILE_OFFSET_BIT 64
#endif
#endif
#if defined(USE_FILE32API)
#define fopen64 fopen
#define ftello64 ftell
#define fseeko64 fseek
#else
#ifdef _MSC_VER
#define fopen64 fopen
#if (_MSC_VER >= 1400) && (!(defined(NO_MSCVER_FILE64_FUNC)))
#define ftello64 _ftelli64
#define fseeko64 _fseeki64
#else // old MSC
#define ftello64 ftell
#define fseeko64 fseek
#endif
#endif
#endif
#ifdef HAVE_MINIZIP64_CONF_H
#include "mz64conf.h"
#endif
/* a type choosen by DEFINE */
#ifdef HAVE_64BIT_INT_CUSTOM
typedef 64BIT_INT_CUSTOM_TYPE ZPOS64_T;
#else
#ifdef HAS_STDINT_H
#include "stdint.h"
typedef uint64_t ZPOS64_T;
#else
#if defined(_MSC_VER) || defined(__BORLANDC__)
typedef unsigned __int64 ZPOS64_T;
#else
typedef unsigned long long int ZPOS64_T;
#endif
#endif
#endif
#ifdef __cplusplus
extern "C" {
#endif
#define ZLIB_FILEFUNC_SEEK_CUR (1)
#define ZLIB_FILEFUNC_SEEK_END (2)
#define ZLIB_FILEFUNC_SEEK_SET (0)
#define ZLIB_FILEFUNC_MODE_READ (1)
#define ZLIB_FILEFUNC_MODE_WRITE (2)
#define ZLIB_FILEFUNC_MODE_READWRITEFILTER (3)
#define ZLIB_FILEFUNC_MODE_EXISTING (4)
#define ZLIB_FILEFUNC_MODE_CREATE (8)
typedef voidpf ( *open_file_func) (voidpf opaque, const char* filename, int mode);
typedef unsigned long ( *read_file_func) (voidpf opaque, voidpf stream, void* buf, unsigned long size);
typedef unsigned long ( *write_file_func) (voidpf opaque, voidpf stream, const void* buf, unsigned long size);
typedef int ( *close_file_func) (voidpf opaque, voidpf stream);
typedef int ( *testerror_file_func) (voidpf opaque, voidpf stream);
typedef long ( *tell_file_func) (voidpf opaque, voidpf stream);
typedef long ( *seek_file_func) (voidpf opaque, voidpf stream, unsigned long offset, int origin);
/* here is the "old" 32 bits structure structure */
typedef struct zlib_filefunc_def_s
{
open_file_func zopen_file;
read_file_func zread_file;
write_file_func zwrite_file;
tell_file_func ztell_file;
seek_file_func zseek_file;
close_file_func zclose_file;
testerror_file_func zerror_file;
voidpf opaque;
} zlib_filefunc_def;
typedef ZPOS64_T ( *tell64_file_func) (voidpf opaque, voidpf stream);
typedef long ( *seek64_file_func) (voidpf opaque, voidpf stream, ZPOS64_T offset, int origin);
typedef voidpf ( *open64_file_func) (voidpf opaque, const void* filename, int mode);
typedef struct zlib_filefunc64_def_s
{
open64_file_func zopen64_file;
read_file_func zread_file;
write_file_func zwrite_file;
tell64_file_func ztell64_file;
seek64_file_func zseek64_file;
close_file_func zclose_file;
testerror_file_func zerror_file;
voidpf opaque;
} zlib_filefunc64_def;
void fill_fopen64_filefunc (zlib_filefunc64_def* pzlib_filefunc_def);
void fill_fopen_filefunc (zlib_filefunc_def* pzlib_filefunc_def);
/* now internal definition, only for zip.c and unzip.h */
typedef struct zlib_filefunc64_32_def_s
{
zlib_filefunc64_def zfile_func64;
open_file_func zopen32_file;
tell_file_func ztell32_file;
seek_file_func zseek32_file;
} zlib_filefunc64_32_def;
#define ZREAD(filefunc,filestream,buf,size) ((*((filefunc).zread_file))((filefunc).opaque,filestream,buf,size))
#define ZWRITE(filefunc,filestream,buf,size) ((*((filefunc).zwrite_file))((filefunc).opaque,filestream,buf,size))
#define ZTELL(filefunc,filestream) ((*((filefunc).ztell_file))((filefunc).opaque,filestream))
#define ZSEEK(filefunc,filestream,pos,mode) ((*((filefunc).zseek_file))((filefunc).opaque,filestream,pos,mode))
#define ZCLOSE(filefunc,filestream) ((*((filefunc).zclose_file))((filefunc).opaque,filestream))
#define ZERROR(filefunc,filestream) ((*((filefunc).zerror_file))((filefunc).opaque,filestream))
voidpf call_zopen64 (const zlib_filefunc64_32_def* pfilefunc,const void*filename,int mode);
long call_zseek64 (const zlib_filefunc64_32_def* pfilefunc,voidpf filestream, ZPOS64_T offset, int origin);
ZPOS64_T call_ztell64 (const zlib_filefunc64_32_def* pfilefunc,voidpf filestream);
void fill_zlib_filefunc64_32_def_from_filefunc32(zlib_filefunc64_32_def* p_filefunc64_32,const zlib_filefunc_def* p_filefunc32);
#define ZOPEN64(filefunc,filename,mode) (call_zopen64((&(filefunc)),(filename),(mode)))
#define ZTELL64(filefunc,filestream) (call_ztell64((&(filefunc)),(filestream)))
#define ZSEEK64(filefunc,filestream,pos,mode) (call_zseek64((&(filefunc)),(filestream),(pos),(mode)))
#define Z_BZIP2ED 12
typedef voidp unzFile;
#define UNZ_OK (0)
#define UNZ_END_OF_LIST_OF_FILE (-100)
#define UNZ_ERRNO (Z_ERRNO)
#define UNZ_EOF (0)
#define UNZ_PARAMERROR (-102)
#define UNZ_PARAMERROR_UL (-102UL)
#define UNZ_BADZIPFILE (-103)
#define UNZ_INTERNALERROR (-104)
#define UNZ_CRCERROR (-105)
/* tm_unz contain date/time info */
typedef struct tm_unz_s
{
unsigned int tm_sec; /* seconds after the minute - [0,59] */
unsigned int tm_min; /* minutes after the hour - [0,59] */
unsigned int tm_hour; /* hours since midnight - [0,23] */
unsigned int tm_mday; /* day of the month - [1,31] */
unsigned int tm_mon; /* months since January - [0,11] */
unsigned int tm_year; /* years - [1980..2044] */
} tm_unz;
/* unz_global_info structure contain global data about the ZIPfile
These data comes from the end of central dir */
typedef struct unz_global_info64_s
{
ZPOS64_T number_entry; /* total number of entries in
the central dir on this disk */
unsigned long size_comment; /* size of the global comment of the zipfile */
} unz_global_info64;
typedef struct unz_global_info_s
{
unsigned long number_entry; /* total number of entries in
the central dir on this disk */
unsigned long size_comment; /* size of the global comment of the zipfile */
} unz_global_info;
/* unz_file_info contain information about a file in the zipfile */
typedef struct unz_file_info64_s
{
unsigned long version; /* version made by 2 bytes */
unsigned long version_needed; /* version needed to extract 2 bytes */
unsigned long flag; /* general purpose bit flag 2 bytes */
unsigned long compression_method; /* compression method 2 bytes */
unsigned long dosDate; /* last mod file date in Dos fmt 4 bytes */
unsigned long crc; /* crc-32 4 bytes */
ZPOS64_T compressed_size; /* compressed size 8 bytes */
ZPOS64_T uncompressed_size; /* uncompressed size 8 bytes */
unsigned long size_filename; /* filename length 2 bytes */
unsigned long size_file_extra; /* extra field length 2 bytes */
unsigned long size_file_comment; /* file comment length 2 bytes */
unsigned long disk_num_start; /* disk number start 2 bytes */
unsigned long internal_fa; /* internal file attributes 2 bytes */
unsigned long external_fa; /* external file attributes 4 bytes */
tm_unz tmu_date;
} unz_file_info64;
typedef struct unz_file_info_s
{
unsigned long version; /* version made by 2 bytes */
unsigned long version_needed; /* version needed to extract 2 bytes */
unsigned long flag; /* general purpose bit flag 2 bytes */
unsigned long compression_method; /* compression method 2 bytes */
unsigned long dosDate; /* last mod file date in Dos fmt 4 bytes */
unsigned long crc; /* crc-32 4 bytes */
unsigned long compressed_size; /* compressed size 4 bytes */
unsigned long uncompressed_size; /* uncompressed size 4 bytes */
unsigned long size_filename; /* filename length 2 bytes */
unsigned long size_file_extra; /* extra field length 2 bytes */
unsigned long size_file_comment; /* file comment length 2 bytes */
unsigned long disk_num_start; /* disk number start 2 bytes */
unsigned long internal_fa; /* internal file attributes 2 bytes */
unsigned long external_fa; /* external file attributes 4 bytes */
tm_unz tmu_date;
} unz_file_info;
extern int unzStringFileNameCompare (const char* fileName1, const char* fileName2, int iCaseSensitivity);
extern unzFile unzOpen (const char *path);
extern unzFile unzOpen64 (const void *path);
extern unzFile unzOpen2 (const char *path, zlib_filefunc_def* pzlib_filefunc_def);
extern unzFile unzOpen2_64 (const void *path, zlib_filefunc64_def* pzlib_filefunc_def);
extern int unzClose (unzFile file);
extern int unzGetGlobalInfo (unzFile file, unz_global_info *pglobal_info);
extern int unzGetGlobalInfo64 (unzFile file, unz_global_info64 *pglobal_info);
extern int unzGetGlobalComment (unzFile file, char *szComment, unsigned long uSizeBuf);
extern int unzGoToFirstFile (unzFile file);
extern int unzGoToNextFile (unzFile file);
extern int unzLocateFile (unzFile file, const char *szFileName, int iCaseSensitivity);
typedef struct unz_file_pos_s
{
unsigned long pos_in_zip_directory; /* offset in zip file directory */
unsigned long num_of_file; /* # of file */
} unz_file_pos;
extern int unzGetFilePos(unzFile file, unz_file_pos* file_pos);
extern int unzGoToFilePos(unzFile file, unz_file_pos* file_pos);
typedef struct unz64_file_pos_s
{
ZPOS64_T pos_in_zip_directory; /* offset in zip file directory */
ZPOS64_T num_of_file; /* # of file */
} unz64_file_pos;
extern int unzGetFilePos64(unzFile file, unz64_file_pos* file_pos);
extern int unzGoToFilePos64(unzFile file, const unz64_file_pos* file_pos);
extern int unzGetCurrentFileInfo64 (unzFile file,
unz_file_info64 *pfile_info,
char *szFileName,
unsigned long fileNameBufferSize,
void *extraField,
unsigned long extraFieldBufferSize,
char *szComment,
unsigned long commentBufferSize);
extern int unzGetCurrentFileInfo (unzFile file,
unz_file_info *pfile_info,
char *szFileName,
unsigned long fileNameBufferSize,
void *extraField,
unsigned long extraFieldBufferSize,
char *szComment,
unsigned long commentBufferSize);
extern ZPOS64_T unzGetCurrentFileZStreamPos64 (unzFile file);
extern int unzOpenCurrentFile (unzFile file);
extern int unzOpenCurrentFilePassword (unzFile file, const char* password);
extern int unzOpenCurrentFile2 (unzFile file, int* method, int* level, int raw);
extern int unzOpenCurrentFile3 (unzFile file, int* method, int* level, int raw, const char* password);
extern int unzCloseCurrentFile (unzFile file);
extern int unzReadCurrentFile (unzFile file, voidp buf, unsigned len);
extern z_off_t unztell (unzFile file);
extern ZPOS64_T unztell64 (unzFile file);
extern int unzeof (unzFile file);
extern int unzGetLocalExtrafield (unzFile file, voidp buf, unsigned len);
/* Get the current file offset */
extern ZPOS64_T unzGetOffset64 (unzFile file);
extern unsigned long unzGetOffset (unzFile file);
/* Set the current file offset */
extern int unzSetOffset64 (unzFile file, ZPOS64_T pos);
extern int unzSetOffset (unzFile file, unsigned long pos);
#ifdef __cplusplus
}
#endif
#endif /* _ZLIB_H */
#endif /* _SZLIB_H */