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
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
|
/*
Copyright (c) 1990-2005 Info-ZIP. All rights reserved.
See the accompanying file LICENSE, version 2004-May-22 or later
(the contents of which are also included in zip.h) for terms of use.
If, for some reason, both of these files are missing, the Info-ZIP license
also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html
*/
/* Automatic setting of the common Microsoft C idenfifier MSC.
* NOTE: Watcom also defines M_I*86 !
*/
#if defined(_MSC_VER) || (defined(M_I86) && !defined(__WATCOMC__))
# ifndef MSC
# define MSC /* This should work for older MSC, too! */
# endif
#endif
#if defined(__WATCOMC__) && defined(__386__)
# define WATCOMC_386
#endif
#if (defined(__CYGWIN32__) && !defined(__CYGWIN__))
# define __CYGWIN__ /* compatibility for CygWin B19 and older */
#endif
/* enable multibyte character set support by default */
#ifndef _MBCS
# define _MBCS
#endif
#if defined(__CYGWIN__)
# undef _MBCS
#endif
#ifndef MSDOS
/*
* Windows 95 (and Windows NT) file systems are (to some extend)
* extensions of MSDOS. Common features include for example:
* FAT or (FAT like) file systems,
* '\\' as directory separator in paths,
* "\r\n" as record (line) terminator in text files, ...
*/
# define MSDOS
/* inherit MS-DOS file system etc. stuff */
#endif
#define USE_CASE_MAP
#define PROCNAME(n) (action == ADD || action == UPDATE ? wild(n) : \
procname(n, 1))
#define BROKEN_FSEEK
#ifndef __RSXNT__
# define HAVE_FSEEKABLE
#endif
/* File operations--use "b" for binary if allowed or fixed length 512 on VMS
* use "S" for sequential access on NT to prevent the NT
* file cache eating up memory with large .zip files
*/
#define FOPR "rb"
#define FOPM "r+b"
#define FOPW "wbS"
#if (defined(__CYGWIN__) && !defined(NO_MKTIME))
# define NO_MKTIME /* Cygnus' mktime() implementation is buggy */
#endif
#if (!defined(NT_TZBUG_WORKAROUND) && !defined(NO_NT_TZBUG_WORKAROUND))
# define NT_TZBUG_WORKAROUND
#endif
#if (defined(UTIL) && defined(NT_TZBUG_WORKAROUND))
# undef NT_TZBUG_WORKAROUND /* the Zip utilities do not use time-stamps */
#endif
#if !defined(NO_EF_UT_TIME) && !defined(USE_EF_UT_TIME)
# define USE_EF_UT_TIME
#endif
#if (!defined(NO_NTSD_EAS) && !defined(NTSD_EAS))
# define NTSD_EAS
#endif
#if (defined(NTSD_EAS) && !defined(ZP_NEED_MEMCOMPR))
# define ZP_NEED_MEMCOMPR
#endif
#ifdef WINDLL
# ifndef NO_ASM
# define NO_ASM
# endif
# ifndef MSWIN
# define MSWIN
# endif
# ifndef REENTRANT
# define REENTRANT
# endif
#endif /* WINDLL */
/* Enable use of optimized x86 assembler version of longest_match() for
MSDOS, WIN32 and OS2 per default. */
#if !defined(NO_ASM) && !defined(ASMV)
# define ASMV
#endif
/* Enable use of optimized x86 assembler version of crc32() for
MSDOS, WIN32 and OS2 per default. */
#if !defined(NO_ASM) && !defined(ASM_CRC) && !defined(NO_ASM_CRC)
# define ASM_CRC
#endif
#if !defined(__GO32__) && !defined(__EMX__) && !defined(__CYGWIN__)
# define NO_UNISTD_H
#endif
/* the following definitions are considered as "obsolete" by Microsoft and
* might be missing in some versions of <windows.h>
*/
#ifndef AnsiToOem
# define AnsiToOem CharToOemA
#endif
#ifndef OemToAnsi
# define OemToAnsi OemToCharA
#endif
#if (defined(__RSXNT__) && defined(__CRTRSXNT__))
# include <crtrsxnt.h>
#endif
/* Get types and stat */
#include <sys/types.h>
#include <sys/stat.h>
#include <io.h>
#ifdef _MBCS
# if (!defined(__EMX__) && !defined(__MINGW32__) && !defined(__CYGWIN__))
# include <stdlib.h>
# include <mbstring.h>
# endif
# if (defined(__MINGW32__) && !defined(MB_CUR_MAX))
# ifdef __MSVCRT__
extern int *__p___mb_cur_max(void);
# define MB_CUR_MAX (*__p___mb_cur_max())
# else
extern int *_imp____mb_cur_max_dll;
# define MB_CUR_MAX (*_imp____mb_cur_max_dll)
# endif
# endif
# if (defined(__LCC__) && !defined(MB_CUR_MAX))
extern int *_imp____mb_cur_max;
# define MB_CUR_MAX (*_imp____mb_cur_max)
# endif
#endif
#ifdef __LCC__
# include <time.h>
# ifndef tzset
# define tzset _tzset
# endif
# ifndef utime
# define utime _utime
# endif
#endif
#ifdef __MINGW32__
extern void _tzset(void); /* this is missing in <time.h> */
# ifndef tzset
# define tzset _tzset
# endif
#endif
#if (defined(__RSXNT__) || defined(__EMX__)) && !defined(tzset)
# define tzset _tzset
#endif
#ifdef W32_USE_IZ_TIMEZONE
# ifdef __BORLANDC__
# define tzname tzname
# define IZTZ_DEFINESTDGLOBALS
# endif
# ifndef tzset
# define tzset _tzset
# endif
# ifndef timezone
# define timezone _timezone
# endif
# ifndef daylight
# define daylight _daylight
# endif
# ifndef tzname
# define tzname _tzname
# endif
# if (!defined(NEED__ISINDST) && !defined(__BORLANDC__))
# define NEED__ISINDST
# endif
# ifdef IZTZ_GETLOCALETZINFO
# undef IZTZ_GETLOCALETZINFO
# endif
# define IZTZ_GETLOCALETZINFO GetPlatformLocalTimezone
#endif /* W32_USE_IZ_TIMEZONE */
#ifdef MATCH
# undef MATCH
#endif
#define MATCH dosmatch /* use DOS style wildcard matching */
#ifdef ZCRYPT_INTERNAL
# ifdef WINDLL
# define ZCR_SEED2 (unsigned)3141592654L /* use PI as seed pattern */
# else
# include <process.h> /* getpid() declaration for srand seed */
# endif
#endif
/* Up to now, all versions of Microsoft C runtime libraries lack the support
* for customized (non-US) switching rules between daylight saving time and
* standard time in the TZ environment variable string.
* But non-US timezone rules are correctly supported when timezone information
* is read from the OS system settings in the Win32 registry.
* The following work-around deletes any TZ environment setting from
* the process environment. This results in a fallback of the RTL time
* handling code to the (correctly interpretable) OS system settings, read
* from the registry.
*/
#ifdef USE_EF_UT_TIME
# if (defined(__WATCOMC__) || defined(W32_USE_IZ_TIMEZONE))
# define iz_w32_prepareTZenv()
# else
# define iz_w32_prepareTZenv() putenv("TZ=")
# endif
#endif
/* This patch of stat() is useful for at least three compilers. It is */
/* difficult to take a stat() of a root directory under Windows95, so */
/* zstat_zipwin32() detects that case and fills in suitable values. */
#ifndef __RSXNT__
# ifndef W32_STATROOT_FIX
# define W32_STATROOT_FIX
# endif
#endif /* !__RSXNT__ */
#if (defined(NT_TZBUG_WORKAROUND) || defined(W32_STATROOT_FIX))
# define W32_STAT_BANDAID
int zstat_zipwin32(const char *path, struct stat *buf);
# ifdef SSTAT
# undef SSTAT
# endif
# define SSTAT zstat_zipwin32
#endif /* NT_TZBUG_WORKAROUND || W32_STATROOT_FIX */
int getch_win32(void);
#ifdef __GNUC__
# define IZ_PACKED __attribute__((packed))
#else
# define IZ_PACKED
#endif
/* for some (all ?) versions of IBM C Set/2 and IBM C Set++ */
#ifndef S_IFMT
# define S_IFMT 0xF000
#endif /* !S_IFMT */
#ifdef __WATCOMC__
# include <stdio.h> /* PATH_MAX is defined here */
# define NO_MKTEMP
/* Get asm routines to link properly without using "__cdecl": */
# ifdef __386__
# ifdef ASMV
# pragma aux match_init "_*" parm caller [] modify []
# pragma aux longest_match "_*" parm caller [] value [eax] \
modify [eax ecx edx]
# endif
# if defined(ASM_CRC) && !defined(USE_ZLIB)
# pragma aux crc32 "_*" parm caller [] value [eax] modify [eax]
# pragma aux get_crc_table "_*" parm caller [] value [eax] \
modify [eax ecx edx]
# endif /* ASM_CRC && !USE_ZLIB */
# endif /* __386__ */
#endif /* __WATCOMC__ */
|