blob: c44e3cb8491af13c4324f1850060d398c983b113 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
|
#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
|