mirror of
https://github.com/ShadauxCat/CATSFC.git
synced 2025-04-02 10:41:47 -04:00
125 lines
3.6 KiB
C
125 lines
3.6 KiB
C
#ifndef _UNZIPP_H_
|
|
#define _UNZIPP_H_
|
|
|
|
#include "ds2_malloc.h"
|
|
#include "unzip.h"
|
|
|
|
#ifndef local
|
|
#define local static
|
|
#endif
|
|
/* compile with -Dlocal if your debugger can't find static symbols */
|
|
|
|
|
|
|
|
#if !defined(unix) && !defined(CASESENSITIVITYDEFAULT_YES) && \
|
|
!defined(CASESENSITIVITYDEFAULT_NO)
|
|
#define CASESENSITIVITYDEFAULT_NO
|
|
#endif
|
|
|
|
|
|
#ifndef UNZ_BUFSIZE
|
|
#define UNZ_BUFSIZE (16384)
|
|
#endif
|
|
|
|
#ifndef UNZ_MAXFILENAMEINZIP
|
|
#define UNZ_MAXFILENAMEINZIP (256)
|
|
#endif
|
|
|
|
#ifndef ALLOC
|
|
#define ALLOC(size) (malloc(size))
|
|
#endif
|
|
#ifndef TRYFREE
|
|
#define TRYFREE(p) {if (p) free(p);}
|
|
#endif
|
|
|
|
#define SIZECENTRALDIRITEM (0x2e)
|
|
#define SIZEZIPLOCALHEADER (0x1e)
|
|
|
|
|
|
/* I've found an old Unix (a SunOS 4.1.3_U1) without all SEEK_* defined.... */
|
|
|
|
#ifndef SEEK_CUR
|
|
#define SEEK_CUR 1
|
|
#endif
|
|
|
|
#ifndef SEEK_END
|
|
#define SEEK_END 2
|
|
#endif
|
|
|
|
#ifndef SEEK_SET
|
|
#define SEEK_SET 0
|
|
#endif
|
|
|
|
/* unz_file_info_interntal contain internal info about a file in zipfile */
|
|
typedef struct unz_file_info_internal_s
|
|
{
|
|
uLong offset_curfile; /* relative offset of local header 4
|
|
* bytes */
|
|
} unz_file_info_internal;
|
|
|
|
|
|
/*
|
|
* file_in_zip_read_info_s contain internal information about a file in
|
|
* zipfile, when reading and decompress it
|
|
*/
|
|
typedef struct
|
|
{
|
|
char *read_buffer;/* internal buffer for compressed data */
|
|
z_stream stream; /* zLib stream structure for inflate */
|
|
|
|
uLong pos_in_zipfile; /* position in byte on the zipfile,
|
|
* for fseek */
|
|
uLong stream_initialised; /* flag set if stream structure is
|
|
* initialised */
|
|
|
|
uLong offset_local_extrafield; /* offset of the local extra
|
|
* field */
|
|
uInt size_local_extrafield; /* size of the local extra
|
|
* field */
|
|
uLong pos_local_extrafield; /* position in the local
|
|
* extra field in read */
|
|
|
|
uLong crc32; /* crc32 of all data uncompressed */
|
|
uLong crc32_wait; /* crc32 we must obtain after decompress all */
|
|
uLong rest_read_compressed; /* number of byte to be
|
|
* decompressed */
|
|
uLong rest_read_uncompressed; /* number of byte to be
|
|
* obtained after decomp */
|
|
FILE *file; /* io structore of the zipfile */
|
|
uLong compression_method; /* compression method (0==store) */
|
|
uLong byte_before_the_zipfile; /* byte before the zipfile,
|
|
* (>0 for sfx) */
|
|
} file_in_zip_read_info_s;
|
|
|
|
|
|
/*
|
|
* unz_s contain internal information about the zipfile
|
|
*/
|
|
typedef struct
|
|
{
|
|
FILE *file; /* io structore of the zipfile */
|
|
unz_global_info gi; /* public global information */
|
|
uLong byte_before_the_zipfile; /* byte before the zipfile,
|
|
* (>0 for sfx) */
|
|
uLong num_file; /* number of the current file in the zipfile */
|
|
uLong pos_in_central_dir; /* pos of the current file in the
|
|
* central dir */
|
|
uLong current_file_ok; /* flag about the usability of the
|
|
* current file */
|
|
uLong central_pos;/* position of the beginning of the central
|
|
* dir */
|
|
|
|
uLong size_central_dir; /* size of the central directory */
|
|
uLong offset_central_dir; /* offset of start of central
|
|
* directory with respect to the
|
|
* starting disk number */
|
|
|
|
unz_file_info cur_file_info; /* public info about the current file
|
|
* in zip */
|
|
unz_file_info_internal cur_file_info_internal; /* private info about it */
|
|
file_in_zip_read_info_s *pfile_in_zip_read; /* structure about the
|
|
* current file if we are
|
|
* decompressing it */
|
|
} unz_s;
|
|
|
|
#endif
|