1 /*
2   Copyright (c) 1990-2009 Info-ZIP.  All rights reserved.
3 
4   See the accompanying file LICENSE, version 2009-Jan-02 or later
5   (the contents of which are also included in unzip.h) for terms of use.
6   If, for some reason, all these files are missing, the Info-ZIP license
7   also may be found at:  ftp://ftp.info-zip.org/pub/infozip/license.html
8 */
9 /*---------------------------------------------------------------------------
10     Win32 specific configuration section:
11   ---------------------------------------------------------------------------*/
12 
13 #ifndef __w32cfg_h
14 #define __w32cfg_h
15 
16 #ifdef __CYGWIN__
17 /* We treat the file system underneath the Cygwin Unix emulator environment
18  * as "native VFAT/NTFS" and use the WIN32 API for its special attributes...
19  */
20 #  ifdef UNIX
21 #    undef UNIX
22 #  endif
23 #endif
24 
25 #if (defined(_MSC_VER) && !defined(MSC))
26 #  define MSC
27 #endif
28 
29 /* enable multibyte character set support by default */
30 #if (!defined(_MBCS) && !defined(NO_MBCS))
31 #  define _MBCS
32 #endif
33 #if (defined(_MBCS) && defined(NO_MBCS))
34 #  undef _MBCS
35 #endif
36 #if (defined(__CYGWIN__) && defined(_MBCS))
37 #  undef _MBCS                  /* Cygwin RTL lacks support for __mb_cur_max */
38 #endif
39 #if (defined(__DJGPP__) && !defined(__EMX__) && defined(_MBCS))
40 #  undef _MBCS                  /* __mb_cur_max missing for RSXNTdj 1.6 beta */
41 #endif
42 
43 #include <sys/types.h>          /* off_t, time_t, dev_t, ... */
44 #include <sys/stat.h>
45 #include <io.h>                 /* read(), open(), etc. */
46 #include <time.h>
47 #if ((defined(__RSXNT__) || defined(__EMX__)) && !defined(tzset))
48 #  define tzset _tzset
49 #endif
50 #if (defined(__LCC__) && !defined(tzset))
51 #  define tzset _tzset
52 #endif
53 #ifdef __MINGW32__
54    extern void _tzset(void);    /* this is missing in <time.h> */
55 #  ifndef tzset
56 #    define tzset _tzset
57 #  endif
58 #endif
59 #ifdef W32_USE_IZ_TIMEZONE
60 #  ifdef __BORLANDC__
61 #    define tzname tzname
62 #    define IZTZ_DEFINESTDGLOBALS
63 #  endif
64 #  ifdef __WATCOMC__
65 #    define IZTZ_DEFINESTDGLOBALS
66 #  endif
67 #  ifndef tzset
68 #    define tzset _tzset
69 #  endif
70 #  ifndef timezone
71 #    define timezone _timezone
72 #  endif
73 #  ifndef daylight
74 #    define daylight _daylight
75 #  endif
76 #  ifndef tzname
77 #    define tzname _tzname
78 #  endif
79 #  if (!defined(NEED__ISINDST) && !defined(__BORLANDC__))
80 #    define NEED__ISINDST
81 #  endif
82 #  ifdef IZTZ_GETLOCALETZINFO
83 #    undef IZTZ_GETLOCALETZINFO
84 #  endif
85 #  define IZTZ_GETLOCALETZINFO GetPlatformLocalTimezone
86 #endif /* W32_USE_IZ_TIMEZONE */
87 #include <memory.h>
88 #if (!defined(__RSXNT__) && !defined(__CYGWIN__))
89 #  include <direct.h>           /* mkdir() */
90 #endif
91 #include <fcntl.h>
92 #ifdef __CYGWIN__
93 #  include <unistd.h>
94    extern int setmode(int, int);        /* this is missing in <fcntl.h> */
95 #endif
96 #if (defined(MSC) || defined(__WATCOMC__) || defined(__MINGW32__))
97 #  include <sys/utime.h>
98 #else
99 #  include <utime.h>
100 #endif
101 #define GOT_UTIMBUF
102 
103 #ifdef _MBCS
104 #  if (!defined(__EMX__) && !defined(__DJGPP__) && !defined(__CYGWIN__))
105 #  if (!defined(__MINGW32__) || defined(__MSVCRT__))
106 #    include <stdlib.h>
107 #    include <mbstring.h>
108      /* for MSC (and compatible compilers), use routines supplied by RTL */
109 #    define CLEN(ptr) _mbclen((const uch *)(ptr))
110 #    define PREINCSTR(ptr) (ptr = (char *)_mbsinc((const uch *)(ptr)))
111 #    define MBSCHR(str, c) (char *)_mbschr((const uch *)(str), (c))
112 #    define MBSRCHR(str, c) (char *)_mbsrchr((const uch *)(str), (c))
113 #  endif
114 #  endif
115 #  if (defined(__MINGW32__) && !defined(MB_CUR_MAX))
116 #    ifdef __MSVCRT__
117        extern int *__p___mb_cur_max(void);
118 #      define MB_CUR_MAX (*__p___mb_cur_max())
119 #    else
120        extern int *_imp____mb_cur_max_dll;
121 #      define MB_CUR_MAX (*_imp____mb_cur_max_dll)
122 #    endif
123 #  endif
124 #  if (defined(__LCC__) && !defined(MB_CUR_MAX))
125      extern int *_imp____mb_cur_max;
126 #    define MB_CUR_MAX (*_imp____mb_cur_max)
127 #  endif
128 #  if (defined(__DJGPP__) && !defined(__EMX__) && !defined(MB_CUR_MAX))
129      extern int *_imp____mb_cur_max;
130 #    define MB_CUR_MAX (*_imp____mb_cur_max)
131 #  endif
132 #endif
133 
134 /* for UnZip, the "basic" part of the win32 api is sufficient */
135 #ifndef WIN32_LEAN_AND_MEAN
136 #  define WIN32_LEAN_AND_MEAN
137 #endif
138 
139 #if defined(__FILEIO_C)
140 #  ifndef __CYGWIN__
141 #    include <conio.h>
142 #  endif
143 #  include <windows.h>
144 #  ifdef __RSXNT__
145 #    include "../win32/rsxntwin.h"
146 #  endif
147 #  ifndef TIME_ZONE_ID_INVALID
148 #    define TIME_ZONE_ID_INVALID  (DWORD)0xFFFFFFFFL
149 #  endif
150 #endif
151 #if (defined(__ENVARGS_C) || defined(__EXTRACT_C) || defined(__UNZIP_C) || \
152      defined(ZCRYPT_INTERNAL))
153 #  include <windows.h>
154 #  ifdef __RSXNT__
155 #    include "../win32/rsxntwin.h"
156 #  endif
157 #  ifndef TIME_ZONE_ID_INVALID
158 #    define TIME_ZONE_ID_INVALID  (DWORD)0xFFFFFFFFL
159 #  endif
160 #endif
161 
162 #ifndef Cdecl
163 #  define Cdecl __cdecl
164 #endif
165 
166 /* the following definitions are considered as "obsolete" by Microsoft and
167  * might be missing in some versions of <windows.h>
168  */
169 #ifndef AnsiToOem
170 #  define AnsiToOem CharToOemA
171 #endif
172 #ifndef OemToAnsi
173 #  define OemToAnsi OemToCharA
174 #endif
175 
176 #define DIR_END       '\\'      /* OS uses '\\' as directory separator */
177 #define DIR_END2      '/'       /* also check for '/' (RTL may convert) */
178 #ifdef DATE_FORMAT
179 #  undef DATE_FORMAT
180 #endif
181 #define DATE_FORMAT   dateformat()
182 #ifdef DATE_SEPCHAR
183 #  undef DATE_SEPCHAR
184 #endif
185 #define DATE_SEPCHAR  dateseparator()
186 #define lenEOL        2
187 #define PutNativeEOL  {*q++ = native(CR); *q++ = native(LF);}
188 
189 #if (defined(__RSXNT__) && !defined(HAVE_MKTIME))
190 #  define HAVE_MKTIME           /* use mktime() in time conversion routines */
191 #endif
192 #if (defined(MSC) && !defined(HAVE_MKTIME))
193 #  define HAVE_MKTIME           /* use mktime() in time conversion routines */
194 #endif
195 #if (defined(__CYGWIN__) && defined(HAVE_MKTIME))
196 #  undef HAVE_MKTIME            /* Cygnus' mktime() implementation is buggy */
197 #endif
198 #if (defined(W32_USE_IZ_TIMEZONE) && !defined(HAVE_MKTIME))
199 #  define HAVE_MKTIME           /* use mktime() in time conversion routines */
200 #endif
201 #if (!defined(NO_EF_UT_TIME) && !defined(USE_EF_UT_TIME))
202 #  define USE_EF_UT_TIME
203 #endif
204 #if (!defined(NO_DIR_ATTRIB) && !defined(SET_DIR_ATTRIB))
205 #  define SET_DIR_ATTRIB
206 #endif
207 #if (!defined(NOTIMESTAMP) && !defined(TIMESTAMP))
208 #  define TIMESTAMP
209 #endif
210 #if (!defined(NO_NTSD_EAS) && !defined(NTSD_EAS))
211 #  define NTSD_EAS      /* enable NTSD support unless explicitly suppressed */
212 #endif
213 #if (defined(NTSD_EAS) && !defined(RESTORE_ACL))
214 #  define RESTORE_ACL   /* "restore ACLs" only needed when NTSD_EAS active */
215 #endif
216 #if (!defined(NO_UNICODE_SUPPORT) && !defined(UNICODE_SUPPORT))
217 #  define UNICODE_SUPPORT       /* enable UTF-8 filename support by default */
218 #endif
219 #if (defined(UNICODE_SUPPORT) && !defined(UNICODE_WCHAR))
220 #  define UNICODE_WCHAR         /* wchar_t is UTF-16 encoded on WIN32 */
221 #endif
222 #ifdef UTF8_MAYBE_NATIVE
223 #  undef UTF8_MAYBE_NATIVE      /* UTF-8 cannot be system charset on WIN32 */
224 #endif
225 
226 /* The following compiler systems provide or use a runtime library with a
227  * locale-aware isprint() implementation.  For these systems, the "enhanced"
228  * unprintable charcode detection in fnfilter() gets enabled.
229  */
230 #if (!defined(HAVE_WORKING_ISPRINT) && !defined(NO_WORKING_ISPRINT))
231 #  if defined(MSC) || defined(__BORLANDC__)
232 #    define HAVE_WORKING_ISPRINT
233 #  endif
234 #  if defined(__MINGW32__) && defined(__MSVCRT__)
235 #    define HAVE_WORKING_ISPRINT
236 #  endif
237 #endif
238 
239 /* WIN32 runs solely on little-endian processors; enable support
240  * for the 32-bit optimized CRC-32 C code by default.
241  */
242 #ifdef IZ_CRC_BE_OPTIMIZ
243 #  undef IZ_CRC_BE_OPTIMIZ
244 #endif
245 #if !defined(IZ_CRC_LE_OPTIMIZ) && !defined(NO_CRC_OPTIMIZ)
246 #  define IZ_CRC_LE_OPTIMIZ
247 #endif
248 
249 /* handlers for OEM <--> ANSI string conversions */
250 #ifdef __RSXNT__
251    /* RSXNT uses OEM coded strings in functions supplied by C RTL */
252 #  ifdef CRTL_CP_IS_ISO
253 #    undef CRTL_CP_IS_ISO
254 #  endif
255 #  ifndef CRTL_CP_IS_OEM
256 #    define CRTL_CP_IS_OEM
257 #  endif
258 #else
259    /* "real" native WIN32 compilers use ANSI coded strings in C RTL calls */
260 #  ifndef CRTL_CP_IS_ISO
261 #    define CRTL_CP_IS_ISO
262 #  endif
263 #  ifdef CRTL_CP_IS_OEM
264 #    undef CRTL_CP_IS_OEM
265 #  endif
266 #endif
267 
268 #ifdef CRTL_CP_IS_ISO
269    /* C RTL's file system support assumes ANSI coded strings */
270 #  define ISO_TO_INTERN(src, dst)  {if ((src) != (dst)) strcpy((dst), (src));}
271 #  define OEM_TO_INTERN(src, dst)  OemToAnsi(src, dst)
272 #  define INTERN_TO_ISO(src, dst)  {if ((src) != (dst)) strcpy((dst), (src));}
273 #  define INTERN_TO_OEM(src, dst)  AnsiToOem(src, dst)
274 #endif /* CRTL_CP_IS_ISO */
275 #ifdef CRTL_CP_IS_OEM
276    /* C RTL's file system support assumes OEM coded strings */
277 #  define ISO_TO_INTERN(src, dst)  AnsiToOem(src, dst)
278 #  define OEM_TO_INTERN(src, dst)  {if ((src) != (dst)) strcpy((dst), (src));}
279 #  define INTERN_TO_ISO(src, dst)  OemToAnsi(src, dst)
280 #  define INTERN_TO_OEM(src, dst)  {if ((src) != (dst)) strcpy((dst), (src));}
281 #endif /* CRTL_CP_IS_OEM */
282 #define _OEM_INTERN(str1) OEM_TO_INTERN(str1, str1)
283 #define _ISO_INTERN(str1) ISO_TO_INTERN(str1, str1)
284 #ifndef WINDLL
285    /* Despite best intentions, for the command-line version UzpPassword()
286     * could return either character set, depending on whether running under
287     * Win95 (DOS-session) or WinNT (native WinNT command interpreter)! */
288 #  define STR_TO_CP2(dst, src)  (AnsiToOem(src, dst), dst)
289 #  define STR_TO_CP3(dst, src)  (OemToAnsi(src, dst), dst)
290 #else
291    /* The WINDLL front end is known to supply ISO/ANSI-coded passwords! */
292 #  define STR_TO_CP2(dst, src)  (AnsiToOem(src, dst), dst)
293 #endif
294 /* dummy defines to disable these functions, they are not needed */
295 #define STR_TO_OEM
296 #define STR_TO_ISO
297 
298 /* Static variables that we have to add to Uz_Globs: */
299 #define SYSTEM_SPECIFIC_GLOBALS \
300     int created_dir, renamed_fullpath, fnlen;\
301     unsigned nLabelDrive;\
302     char lastRootPath[4];\
303     int lastVolOldFAT, lastVolLocTim;\
304     char *rootpath, *buildpathHPFS, *buildpathFAT, *endHPFS, *endFAT;\
305     ZCONST char *wildname;\
306     char *dirname, matchname[FILNAMSIZ];\
307     int rootlen, have_dirname, dirnamelen, notfirstcall;\
308     zvoid *wild_dir;
309 
310 /* created_dir, renamed_fullpath, fnlen, and nLabelDrive are used by   */
311 /*    both mapname() and checkdir().                                   */
312 /* lastRootPath, lastVolOldFAT and lastVolLocTim are used by           */
313 /*    IsVolumeOldFAT() and NTQueryVolInfo().                           */
314 /* rootlen, rootpath, buildpathHPFS, buildpathFAT, endHPFS, and endFAT */
315 /*    are used by checkdir().                                          */
316 /* wild_dir, dirname, wildname, matchname[], dirnamelen, have_dirname, */
317 /*    and notfirstcall are used by do_wild().                          */
318 
319 /* This replacement for C-RTL-supplied getch() (or similar) functionality
320  * avoids leaving unabsorbed LFs in the keyboard buffer under Windows95,
321  * and supports the <ALT>+[0]<digit><digit><digit> feature.
322  */
323 int getch_win32  OF((void));
324 
325 /* Up to now, all versions of Microsoft C runtime libraries lack the support
326  * for customized (non-US) switching rules between daylight saving time and
327  * standard time in the TZ environment variable string.
328  * But non-US timezone rules are correctly supported when timezone information
329  * is read from the OS system settings in the Win32 registry.
330  * The following work-around deletes any TZ environment setting from
331  * the process environment.  This results in a fallback of the RTL time
332  * handling code to the (correctly interpretable) OS system settings, read
333  * from the registry.
334  */
335 #ifdef USE_EF_UT_TIME
336 # if (defined(__WATCOMC__) || defined(__CYGWIN__) || \
337       defined(W32_USE_IZ_TIMEZONE))
338 #   define iz_w32_prepareTZenv()
339 # else
340 #   define iz_w32_prepareTZenv()        putenv("TZ=")
341 # endif
342 #endif
343 
344 /* This patch of stat() is useful for at least two compilers.  It is   */
345 /* difficult to take a stat() of a root directory under Windows95, so  */
346 /* zstat_win32() detects that case and fills in suitable values.       */
347 #ifndef __RSXNT__
348 #  ifndef W32_STATROOT_FIX
349 #    define W32_STATROOT_FIX
350 #  endif
351 #endif /* !__RSXNT__ */
352 
353 #define W32_STAT_BANDAID
354 #if defined(REENTRANT)
355 #  define __W32STAT_GLOBALS__       Uz_Globs *pG,
356 #  define __W32STAT_G__             pG,
357 #else
358 #  define __W32STAT_GLOBALS__
359 #  define __W32STAT_G__
360 #endif
361 #ifdef SSTAT
362 #  undef SSTAT
363 #endif
364 #ifdef WILD_STAT_BUG
365 #  define SSTAT(path, pbuf) (iswild(path) || zstat_win32(__W32STAT_G__ path, pbuf))
366 #else
367 #  define SSTAT(path, pbuf) zstat_win32(__W32STAT_G__ path, pbuf)
368 #endif
369 
370 #ifdef __WATCOMC__
371 #  ifdef __386__
372 #    ifndef WATCOMC_386
373 #      define WATCOMC_386
374 #    endif
375 #    define __32BIT__
376 #    undef far
377 #    define far
378 #    undef near
379 #    define near
380 #    undef Cdecl
381 #    define Cdecl
382 
383 /* gaah -- Watcom's docs claim that _get_osfhandle exists, but it doesn't.  */
384 #    define _get_osfhandle _os_handle
385 
386 /* Get asm routines to link properly without using "__cdecl": */
387 #    ifndef USE_ZLIB
388 #      pragma aux crc32         "_*" parm caller [] value [eax] modify [eax]
389 #      pragma aux get_crc_table "_*" parm caller [] value [eax] \
390                                       modify [eax ecx edx]
391 #    endif /* !USE_ZLIB */
392 #  endif /* __386__ */
393 #endif /* __WATCOMC__ */
394 
395 #define SCREENWIDTH 80
396 #define SCREENSIZE(scrrows, scrcols)  screensize(scrrows, scrcols)
397 int screensize(int *tt_rows, int *tt_cols);
398 
399 /* on the DOS or NT console screen, line-wraps are always enabled */
400 #define SCREENLWRAP 1
401 #define TABSIZE 8
402 
403 
404 /* 64-bit-Integers & Large File Support
405  * (pasted here from Zip 3b, osdep.h - Myles Bennett 7-jun-2004)
406  * (updated from Zip 3.0d - Ed Gordon 6-oct-2004)
407  *
408  *  If this is set it is assumed that the port
409  *  supports 64-bit file calls.  The types are
410  *  defined here.  Any local implementations are
411  *  in w32i64.c and the prototypes for the calls are
412  *  in unzip.h.  Note that a port must support
413  *  these calls fully or should not set
414  *  LARGE_FILE_SUPPORT.
415  */
416 
417 /* Automatically set ZIP64_SUPPORT if supported */
418 
419 #ifndef NO_ZIP64_SUPPORT
420 # ifndef ZIP64_SUPPORT
421 #   if defined(_MSC_VER) || defined(__MINGW32__) || defined(__CYGWIN__)
422 #     define ZIP64_SUPPORT
423 #   elif defined(__LCC__)
424       /* LCC links against crtdll.dll -> no support of 64-bit offsets :( */
425 #   elif (defined(__WATCOMC__) && (__WATCOMC__ >= 1100))
426 #     define ZIP64_SUPPORT
427 #   elif (defined(__BORLANDC__) && (__BORLANDC__ >= 0x0520))
428       /* Borland C RTL lacks any support to get/set 64-bit file pointer :( */
429 #   endif
430 # endif
431 #endif
432 
433 #ifdef ZIP64_SUPPORT
434   /* base type for file offsets and file sizes */
435 # if (defined(__GNUC__) || defined(ULONG_LONG_MAX))
436     typedef long long    zoff_t;
437 # else
438     /* all other compilers use this as intrinsic 64-bit type */
439     typedef __int64      zoff_t;
440 # endif
441 # define ZOFF_T_DEFINED
442 
443   /* user-defined types and format strings for 64-bit numbers and
444    * file pointer functions  (these depend on the rtl library and library
445    * headers used; they are NOT compiler-specific)
446    */
447 # if defined(_MSC_VER) || defined(__MINGW32__) || defined(__LCC__)
448     /* MS C and VC, MinGW32, lcc32 */
449     /* these systems use the Microsoft C RTL */
450 
451     /* 64-bit stat struct */
452     typedef struct _stati64 z_stat;
453 #   define Z_STAT_DEFINED
454 
455 #   ifdef __LCC__
456       /* The LCC headers lack these declarations of MSC rtl functions in
457          sys/stat.h. */
458       struct _stati64 {
459         unsigned int st_dev;
460         unsigned short st_ino;
461         unsigned short st_mode;
462         short st_nlink;
463         short st_uid;
464         short st_gid;
465         unsigned int st_rdev;
466         __int64 st_size;
467         time_t st_atime;
468         time_t st_mtime;
469         time_t st_ctime;
470       };
471       int _stati64(const char *, struct _stati64 *);
472       int _fstati64(int, struct _stati64 *);
473        __int64 _lseeki64(int, __int64, int);
474 #   endif /* __LCC__ */
475 
476     /* printf format size prefix for zoff_t values */
477 #   define FZOFFT_FMT "I64"
478 #   define FZOFFT_HEX_WID_VALUE "16"
479 
480 #   define SHORTHDRSTATS "%9I64u  %02u%c%02u%c%02u %02u:%02u  %c"
481 #   define SHORTFILETRAILER " --------                   -------\n%9I64u                   %9lu file%s\n"
482 
483 # elif (defined(__BORLANDC__) && (__BORLANDC__ >= 0x0520))
484     /* Borland C 5.2 or newer */
485 
486     /* 64-bit stat struct */
487     typedef struct stati64 z_stat;
488 #   define Z_STAT_DEFINED
489 
490     /* Borland C does not provide a 64-bit-capable _lseeki64(), so we
491        need to use the stdio.h stream functions instead. */
492 #   ifndef USE_STRM_INPUT
493 #     define USE_STRM_INPUT
494 #   endif
495 
496     /* printf format size prefix for zoff_t values */
497 #   define FZOFFT_FMT "L"
498 #   define FZOFFT_HEX_WID_VALUE "16"
499 
500 #   define SHORTHDRSTATS "%9Lu  %02u%c%02u%c%02u %02u:%02u  %c"
501 #   define SHORTFILETRAILER " --------                   -------\n%9Lu                   %9lu file%s\n"
502 
503 # elif (defined(__WATCOMC__) && (__WATCOMC__ >= 1100))
504     /* WATCOM C */
505 
506     /* 64-bit stat struct */
507     typedef struct _stati64 z_stat;
508 #   define Z_STAT_DEFINED
509 
510     /* printf format size prefix for zoff_t values */
511 #   define FZOFFT_FMT "ll"
512 #   define FZOFFT_HEX_WID_VALUE "16"
513 
514 #   define SHORTHDRSTATS "%9llu  %02u%c%02u%c%02u %02u:%02u  %c"
515 #   define SHORTFILETRAILER " --------                   -------\n%9llu                   %9lu file%s\n"
516 
517 # elif (defined(__IBMC__) && (__IBMC__ >= 350))
518     /* IBM C */
519 
520     /* 64-bit stat struct */
521 
522     /* printf format size prefix for zoff_t values */
523 #   define FZOFFT_FMT "I64"
524 #   define FZOFFT_HEX_WID_VALUE "16"
525 
526 #   define SHORTHDRSTATS "%9I64u  %02u%c%02u%c%02u %02u:%02u  %c"
527 #   define SHORTFILETRAILER " --------                   -------\n%9I64u                   %9lu file%s\n"
528 
529 # endif
530 
531 #endif
532 
533 /* If port has LARGE_FILE_SUPPORT then define here
534    to make automatic unless overridden */
535 
536 #ifndef LARGE_FILE_SUPPORT
537 # ifndef NO_LARGE_FILE_SUPPORT
538 #   if defined(_MSC_VER) || defined(__MINGW32__)
539 #     define LARGE_FILE_SUPPORT
540 #   elif defined(__LCC__)
541       /* LCC links against crtdll.dll -> no support of 64-bit offsets :( */
542 #   elif defined(__CYGWIN__)
543 #     define LARGE_FILE_SUPPORT
544 #   elif (defined(__WATCOMC__) && (__WATCOMC__ >= 1100))
545 #     define LARGE_FILE_SUPPORT
546 #   elif (defined(__BORLANDC__) && (__BORLANDC__ >= 0x0520))
547       /* Borland C RTL lacks any support to get/set 64-bit file pointer :( */
548 #   endif
549 # endif
550 #endif
551 
552 
553 #ifndef LARGE_FILE_SUPPORT
554   /* No Large File Support */
555 
556   /* base type for file offsets and file sizes */
557   typedef long zoff_t;
558 # define ZOFF_T_DEFINED
559 
560   /* stat struct */
561   typedef struct stat z_stat;
562 # define Z_STAT_DEFINED
563 
564 #  define FZOFFT_FMT "l"
565 #  define FZOFFT_HEX_WID_VALUE "8"
566 
567 
568 #  define SHORTHDRSTATS "%9lu  %02u%c%02u%c%02u %02u:%02u  %c"
569 #  define SHORTFILETRAILER " --------                   -------\n%9lu                   %9lu file%s\n"
570 
571 #endif /* LARGE_FILE_SUPPORT */
572 
573 #endif /* !__w32cfg_h */
574