1 /*
2   tailor.h - Zip 3
3 
4   Copyright (c) 1990-2008 Info-ZIP.  All rights reserved.
5 
6   See the accompanying file LICENSE, version 2007-Mar-4 or later
7   (the contents of which are also included in zip.h) for terms of use.
8   If, for some reason, all these files are missing, the Info-ZIP license
9   also may be found at:  ftp://ftp.info-zip.org/pub/infozip/license.html
10 */
11 
12 /* Some compiler distributions for Win32/i386 systems try to emulate
13  * a Unix (POSIX-compatible) environment.
14  */
15 #if (defined(WIN32) && defined(UNIX))
16    /* Zip does not support merging both ports in a single executable. */
17 #  if (defined(FORCE_WIN32_OVER_UNIX) && defined(FORCE_UNIX_OVER_WIN32))
18      /* conflicting choice requests -> we prefer the Win32 environment */
19 #    undef FORCE_UNIX_OVER_WIN32
20 #  endif
21 #  ifdef FORCE_WIN32_OVER_UNIX
22      /* native Win32 support was explicitely requested... */
23 #    undef UNIX
24 #  else
25      /* use the POSIX (Unix) emulation features by default... */
26 #    undef WIN32
27 #  endif
28 #endif
29 
30 
31 /* UNICODE */
32 #ifdef NO_UNICODE_SUPPORT
33 # ifdef UNICODE_SUPPORT
34 #   undef UNICODE_SUPPORT
35 # endif
36 #endif
37 
38 
39 #ifdef AMIGA
40 #include "amiga/osdep.h"
41 #endif
42 
43 #ifdef AOSVS
44 #include "aosvs/osdep.h"
45 #endif
46 
47 #ifdef ATARI
48 #include "atari/osdep.h"
49 #endif
50 
51 #ifdef __ATHEOS__
52 #include "atheos/osdep.h"
53 #endif
54 
55 #ifdef __BEOS__
56 #include "beos/osdep.h"
57 #endif
58 
59 #ifdef DOS
60 #include "msdos/osdep.h"
61 #endif
62 
63 #ifdef __human68k__
64 #include "human68k/osdep.h"
65 #endif
66 
67 #if ((defined(__MWERKS__) && defined(macintosh)) || defined(MACOS))
68 #include "macos/osdep.h"
69 #endif
70 
71 #ifdef NLM
72 #include "novell/osdep.h"
73 #endif
74 
75 #ifdef OS2
76 #include "os2/osdep.h"
77 #endif
78 
79 #ifdef __riscos
80 #include "acorn/osdep.h"
81 #endif
82 
83 #ifdef QDOS
84 #include "qdos/osdep.h"
85 #endif
86 
87 #ifdef __TANDEM
88 #include "tandem.h"
89 #include "tanzip.h"
90 #endif
91 
92 #ifdef UNIX
93 #include "unix/osdep.h"
94 #endif
95 
96 #if defined(__COMPILER_KCC__) || defined(TOPS20)
97 #include "tops20/osdep.h"
98 #endif
99 
100 #if defined(VMS) || defined(__VMS)
101 #include "vms/osdep.h"
102 #endif
103 
104 #if defined(__VM__) || defined(VM_CMS) || defined(MVS)
105 #include "cmsmvs.h"
106 #endif
107 
108 #ifdef WIN32
109 #include "win32/osdep.h"
110 #endif
111 
112 #ifdef THEOS
113 #include "theos/osdep.h"
114 #endif
115 
116 
117 /* generic LARGE_FILE_SUPPORT defines
118    These get used if not defined above.
119    7/21/2004 EG
120 */
121 /* If a port hasn't defined ZOFF_T_FORMAT_SIZE_PREFIX
122    then probably need to define all of these. */
123 #ifndef ZOFF_T_FORMAT_SIZE_PREFIX
124 
125 # ifdef LARGE_FILE_SUPPORT
126     /* Probably passed in from command line instead of in above
127        includes if get here.  Assume large file support and hope. 8/14/04 EG */
128 
129     /* Set the Large File Summit (LFS) defines to turn on large file support
130        in case it helps. */
131 
132 #   define _LARGEFILE_SOURCE    /* some OSes need this for fseeko */
133 #   define _LARGEFILE64_SOURCE
134 #   define _FILE_OFFSET_BITS 64 /* select default interface as 64 bit */
135 #   define _LARGE_FILES         /* some OSes need this for 64-bit off_t */
136 
137     typedef off_t zoff_t;
138     typedef unsigned long long uzoff_t;  /* unsigned zoff_t (12/29/04 EG) */
139 
140     /* go with common prefix */
141 #   define ZOFF_T_FORMAT_SIZE_PREFIX "ll"
142 
143 # else
144     /* Default type for offsets and file sizes was ulg but reports
145        of using ulg to create files from 2 GB to 4 GB suggest
146        it doesn't work well.  Now just switch to Zip64 or not
147        support over 2 GB.  7/24/04 EG */
148     /* Now use uzoff_t for unsigned things.  12/29/04 EG */
149     typedef long zoff_t;
150     typedef unsigned long uzoff_t;
151 
152 #   define ZOFF_T_FORMAT_SIZE_PREFIX "l"
153 
154 # endif
155 
156   typedef struct stat z_stat;
157 
158   /* flag that we are defaulting */
159 # define USING_DEFAULT_LARGE_FILE_SUPPORT
160 #endif
161 
162 
163 #if (defined(USE_ZLIB) && defined(ASM_CRC))
164 #  undef ASM_CRC
165 #endif
166 
167 #if (defined(USE_ZLIB) && defined(ASMV))
168 #  undef ASMV
169 #endif
170 
171 /* When "void" is an alias for "int", prototypes cannot be used. */
172 #if (defined(NO_VOID) && !defined(NO_PROTO))
173 #  define NO_PROTO
174 #endif
175 
176 /* Used to remove arguments in function prototypes for non-ANSI C */
177 #ifndef NO_PROTO
178 #  define OF(a) a
179 #  define OFT(a) a
180 #else /* NO_PROTO */
181 #  define OF(a) ()
182 #  define OFT(a)
183 #endif /* ?NO_PROTO */
184 
185 /* If the compiler can't handle const define ZCONST in osdep.h */
186 /* Define const itself in case the system include files are bonkers */
187 #ifndef ZCONST
188 #  ifdef NO_CONST
189 #    define ZCONST
190 #    define const
191 #  else
192 #    define ZCONST const
193 #  endif
194 #endif
195 
196 /*
197  * Some compiler environments may require additional attributes attached
198  * to declarations of runtime libary functions (e.g. to prepare for
199  * linking against a "shared dll" version of the RTL).  Here, we provide
200  * the "empty" default for these attributes.
201  */
202 #ifndef IZ_IMP
203 #  define IZ_IMP
204 #endif
205 
206 /*
207  * case mapping functions. case_map is used to ignore case in comparisons,
208  * to_up is used to force upper case even on Unix (for dosify option).
209  */
210 #ifdef USE_CASE_MAP
211 #  define case_map(c) upper[(c) & 0xff]
212 #  define to_up(c)    upper[(c) & 0xff]
213 #else
214 #  define case_map(c) (c)
215 #  define to_up(c)    ((c) >= 'a' && (c) <= 'z' ? (c)-'a'+'A' : (c))
216 #endif /* USE_CASE_MAP */
217 
218 /* Define void, zvoid, and extent (size_t) */
219 #include <stdio.h>
220 
221 #ifndef NO_STDDEF_H
222 #  include <stddef.h>
223 #endif /* !NO_STDDEF_H */
224 
225 #ifndef NO_STDLIB_H
226 #  include <stdlib.h>
227 #endif /* !NO_STDLIB_H */
228 
229 #ifndef NO_UNISTD_H
230 #  include <unistd.h> /* usually defines _POSIX_VERSION */
231 #endif /* !NO_UNISTD_H */
232 
233 #ifndef NO_FCNTL_H
234 #  include <fcntl.h>
235 #endif /* !NO_FNCTL_H */
236 
237 #ifndef NO_STRING_H
238 #  include <string.h>
239 #else
240 #  include <strings.h>
241 #endif /* NO_STRING_H */
242 
243 #ifdef NO_VOID
244 #  define void int
245    typedef char zvoid;
246 #else /* !NO_VOID */
247 # ifdef NO_TYPEDEF_VOID
248 #  define zvoid void
249 # else
250    typedef void zvoid;
251 # endif
252 #endif /* ?NO_VOID */
253 
254 #ifdef NO_STRRCHR
255 #  define strrchr rindex
256 #endif
257 
258 #ifdef NO_STRCHR
259 #  define strchr index
260 #endif
261 
262 /*
263  * A couple of forward declarations that are needed on systems that do
264  * not supply C runtime library prototypes.
265  */
266 #ifdef NO_PROTO
267 IZ_IMP char *strcpy();
268 IZ_IMP char *strcat();
269 IZ_IMP char *strrchr();
270 /* XXX use !defined(ZMEM) && !defined(__hpux__) ? */
271 #if !defined(ZMEM) && defined(NO_STRING_H)
272 IZ_IMP char *memset();
273 IZ_IMP char *memcpy();
274 #endif /* !ZMEM && NO_STRING_H */
275 
276 /* XXX use !defined(__hpux__) ? */
277 #ifdef NO_STDLIB_H
278 IZ_IMP char *calloc();
279 IZ_IMP char *malloc();
280 IZ_IMP char *getenv();
281 IZ_IMP long atol();
282 #endif /* NO_STDLIB_H */
283 
284 #ifndef NO_MKTEMP
285 IZ_IMP char *mktemp();
286 #endif /* !NO_MKTEMP */
287 
288 #endif /* NO_PROTO */
289 
290 /*
291  * SEEK_* macros, should be defined in stdio.h
292  */
293 /* Define fseek() commands */
294 #ifndef SEEK_SET
295 #  define SEEK_SET 0
296 #endif /* !SEEK_SET */
297 
298 #ifndef SEEK_CUR
299 #  define SEEK_CUR 1
300 #endif /* !SEEK_CUR */
301 
302 #ifndef FALSE
303 #  define FALSE 0
304 #endif
305 
306 #ifndef TRUE
307 #  define TRUE 1
308 #endif
309 
310 #ifdef NO_SIZE_T
311    typedef unsigned int extent;
312    /* define size_t 3/17/05 EG */
313    typedef unsigned int size_t;
314 #else
315    typedef size_t extent;
316 #endif
317 
318 #ifdef NO_TIME_T
319    typedef long time_t;
320 #endif
321 
322 /* DBCS support for Info-ZIP's zip  (mainly for japanese (-: )
323  * by Yoshioka Tsuneo (QWF00133@nifty.ne.jp,tsuneo-y@is.aist-nara.ac.jp)
324  * This code is public domain!   Date: 1998/12/20
325  */
326 
327 /* 2007-07-29 SMS.
328  * Include <locale.h> here if it will be needed later for Unicode.
329  * Otherwise, SETLOCALE may be defined here, and then defined again
330  * (differently) when <locale.h> is read later.
331  */
332 #ifdef UNICODE_SUPPORT
333 # if defined( UNIX) || defined( VMS)
334 #   include <locale.h>
335 # endif /* defined( UNIX) || defined( VMS) */
336 # include <wchar.h>
337 # include <wctype.h>
338 #endif /* def UNICODE_SUPPORT */
339 
340 #ifdef _MBCS
341 #   include <locale.h>
342 
343     /* Multi Byte Character Set */
344     extern char *___tmp_ptr;
345     unsigned char *zmbschr OF((ZCONST unsigned char *, unsigned int));
346     unsigned char *zmbsrchr OF((ZCONST unsigned char *, unsigned int));
347 #   define CLEN(ptr) mblen((ZCONST char *)ptr, MB_CUR_MAX)
348 #   define PREINCSTR(ptr) (ptr += CLEN(ptr))
349 #   define POSTINCSTR(ptr) (___tmp_ptr=(char *)ptr,ptr += CLEN(ptr),___tmp_ptr)
350     int lastchar OF((ZCONST char *ptr));
351 #   define MBSCHR(str,c) (char *)zmbschr((ZCONST unsigned char *)(str), c)
352 #   define MBSRCHR(str,c) (char *)zmbsrchr((ZCONST unsigned char *)(str), (c))
353 #   ifndef SETLOCALE
354 #      define SETLOCALE(category, locale) setlocale(category, locale)
355 #   endif /* ndef SETLOCALE */
356 #else /* !_MBCS */
357 #   define CLEN(ptr) 1
358 #   define PREINCSTR(ptr) (++(ptr))
359 #   define POSTINCSTR(ptr) ((ptr)++)
360 #   define lastchar(ptr) ((*(ptr)=='\0') ? '\0' : ptr[strlen(ptr)-1])
361 #   define MBSCHR(str, c) strchr(str, c)
362 #   define MBSRCHR(str, c) strrchr(str, c)
363 #   ifndef SETLOCALE
364 #      define SETLOCALE(category, locale)
365 #   endif /* ndef SETLOCALE */
366 #endif /* ?_MBCS */
367 #define INCSTR(ptr) PREINCSTR(ptr)
368 
369 
370 /* System independent replacement for "struct utimbuf", which is missing
371  * in many older OS environments.
372  */
373 typedef struct ztimbuf {
374     time_t actime;              /* new access time */
375     time_t modtime;             /* new modification time */
376 } ztimbuf;
377 
378 /* This macro round a time_t value to the OS specific resolution */
379 #ifndef ROUNDED_TIME
380 #  define ROUNDED_TIME(time)   (time)
381 #endif
382 
383 /* Some systems define S_IFLNK but do not support symbolic links */
384 #if defined (S_IFLNK) && defined(NO_SYMLINKS)
385 #  undef S_IFLNK
386 #endif
387 
388 #ifndef Z_UINT4_DEFINED
389 #  if !defined(NO_LIMITS_H)
390 #    if (defined(UINT_MAX) && (UINT_MAX == 0xffffffffUL))
391        typedef unsigned int     z_uint4;
392 #      define Z_UINT4_DEFINED
393 #    else
394 #      if (defined(ULONG_MAX) && (ULONG_MAX == 0xffffffffUL))
395          typedef unsigned long    z_uint4;
396 #        define Z_UINT4_DEFINED
397 #      else
398 #        if (defined(USHRT_MAX) && (USHRT_MAX == 0xffffffffUL))
399            typedef unsigned short   z_uint4;
400 #          define Z_UINT4_DEFINED
401 #        endif
402 #      endif
403 #    endif
404 #  endif /* !defined(NO_LIMITS_H) */
405 #endif /* ndef Z_UINT4_DEFINED */
406 #ifndef Z_UINT4_DEFINED
407   typedef ulg                z_uint4;
408 # define Z_UINT4_DEFINED
409 #endif
410 
411 #ifndef FOPR    /* fallback default definitions for FOPR, FOPM, FOPW: */
412 #  define FOPR "r"
413 #  define FOPM "r+"
414 #  define FOPW "w"
415 #endif /* fallback definition */
416 
417 #ifndef FOPW_TMP    /* fallback default for opening writable temp files */
418 #  define FOPW_TMP FOPW
419 #endif
420 
421 /* Open the old zip file in exclusive mode if possible (to avoid adding
422  * zip file to itself).
423  */
424 #ifdef OS2
425 #  define FOPR_EX FOPM
426 #else
427 #  define FOPR_EX FOPR
428 #endif
429 
430 
431 /* MSDOS file or directory attributes */
432 #define MSDOS_HIDDEN_ATTR 0x02
433 #define MSDOS_DIR_ATTR 0x10
434 
435 
436 /* Define this symbol if your target allows access to unaligned data.
437  * This is not mandatory, just a speed optimization. The compressed
438  * output is strictly identical.
439  */
440 #if (defined(MSDOS) && !defined(WIN32)) || defined(i386)
441 #    define UNALIGNED_OK
442 #endif
443 #if defined(mc68020) || defined(vax)
444 #    define UNALIGNED_OK
445 #endif
446 
447 #if (defined(SMALL_MEM) && !defined(CBSZ))
448 #   define CBSZ 2048 /* buffer size for copying files */
449 #   define ZBSZ 2048 /* buffer size for temporary zip file */
450 #endif
451 
452 #if (defined(MEDIUM_MEM) && !defined(CBSZ))
453 #  define CBSZ 8192
454 #  define ZBSZ 8192
455 #endif
456 
457 #ifndef CBSZ
458 #  define CBSZ 16384
459 #  define ZBSZ 16384
460 #endif
461 
462 #ifndef SBSZ
463 #  define SBSZ CBSZ     /* copy buf size for STORED entries, see zipup() */
464 #endif
465 
466 #ifndef MEMORY16
467 #  ifdef __WATCOMC__
468 #    undef huge
469 #    undef far
470 #    undef near
471 #  endif
472 #  ifdef THEOS
473 #    undef far
474 #    undef near
475 #  endif
476 #  if (!defined(__IBMC__) || !defined(OS2))
477 #    ifndef huge
478 #      define huge
479 #    endif
480 #    ifndef far
481 #      define far
482 #    endif
483 #    ifndef near
484 #      define near
485 #    endif
486 #  endif
487 #  define nearmalloc malloc
488 #  define nearfree free
489 #  define farmalloc malloc
490 #  define farfree free
491 #endif /* !MEMORY16 */
492 
493 #ifndef Far
494 #  define Far far
495 #endif
496 
497 /* MMAP and BIG_MEM cannot be used together -> let MMAP take precedence */
498 #if (defined(MMAP) && defined(BIG_MEM))
499 #  undef BIG_MEM
500 #endif
501 
502 #if (defined(BIG_MEM) || defined(MMAP)) && !defined(DYN_ALLOC)
503 #   define DYN_ALLOC
504 #endif
505 
506 
507 /* LARGE_FILE_SUPPORT
508  *
509  * Types are in osdep.h for each port
510  *
511  * LARGE_FILE_SUPPORT and ZIP64_SUPPORT are automatically
512  * set in osdep.h (for some ports) based on the port and compiler.
513  *
514  * Function prototypes are below as OF is defined earlier in this file
515  * but after osdep.h is included.  In the future ANSI prototype
516  * support may be required and the OF define may then go away allowing
517  * the function defines to be in the port osdep.h.
518  *
519  * E. Gordon 9/21/2003
520  * Updated 7/24/04 EG
521  */
522 #ifdef LARGE_FILE_SUPPORT
523   /* 64-bit Large File Support */
524 
525   /* Arguments for all functions are assumed to match the actual
526      arguments of the various port calls.  As such only the
527      function names are mapped below. */
528 
529 /* ---------------------------- */
530 # ifdef UNIX
531 
532   /* Assume 64-bit file environment is defined.  The below should all
533      be set to their 64-bit versions automatically.  Neat.  7/20/2004 EG */
534 
535     /* 64-bit stat functions */
536 #   define zstat stat
537 #   define zfstat fstat
538 #   define zlstat lstat
539 
540 # if defined(__alpha) && defined(__osf__)  /* support for osf4.0f */
541     /* 64-bit fseek */
542 #   define zfseeko fseek
543 
544     /* 64-bit ftell */
545 #   define zftello ftell
546 
547 # else
548      /* 64-bit fseeko */
549 #   define zfseeko fseeko
550 
551      /* 64-bit ftello */
552 #   define zftello ftello
553 # endif                                    /* __alpha && __osf__ */
554 
555     /* 64-bit fopen */
556 #   define zfopen fopen
557 #   define zfdopen fdopen
558 
559 # endif /* UNIX */
560 
561 /* ---------------------------- */
562 # ifdef VMS
563 
564     /* 64-bit stat functions */
565 #   define zstat stat
566 #   define zfstat fstat
567 #   define zlstat lstat
568 
569     /* 64-bit fseeko */
570 #   define zfseeko fseeko
571 
572     /* 64-bit ftello */
573 #   define zftello ftello
574 
575     /* 64-bit fopen */
576 #   define zfopen fopen
577 #   define zfdopen fdopen
578 
579 # endif /* def VMS */
580 
581 /* ---------------------------- */
582 # ifdef WIN32
583 
584 #   if defined(__MINGW32__)
585     /* GNU C, linked against "msvcrt.dll" */
586 
587       /* 64-bit stat functions */
588 #     define zstat _stati64
589 # ifdef UNICODE_SUPPORT
590 #     define zwfstat _fstati64
591 #     define zwstat _wstati64
592 #     define zw_stat struct _stati64
593 # endif
594 #     define zfstat _fstati64
595 #     define zlstat lstat
596 
597       /* 64-bit fseeko */
598       /* function in win32.c */
599       int zfseeko OF((FILE *, zoff_t, int));
600 
601       /* 64-bit ftello */
602       /* function in win32.c */
603       zoff_t zftello OF((FILE *));
604 
605       /* 64-bit fopen */
606 #     define zfopen fopen
607 #     define zfdopen fdopen
608 
609 #   endif
610 
611 #   if defined(__CYGWIN__)
612     /* GNU C, CygWin with its own POSIX compatible runtime library */
613 
614       /* 64-bit stat functions */
615 #     define zstat stat
616 #     define zfstat fstat
617 #     define zlstat lstat
618 
619       /* 64-bit fseeko */
620 #     define zfseeko fseeko
621 
622       /* 64-bit ftello */
623 #     define zftello ftello
624 
625       /* 64-bit fopen */
626 #     define zfopen fopen
627 #     define zfdopen fdopen
628 
629 #   endif
630 
631 #   ifdef __WATCOMC__
632     /* WATCOM C */
633 
634       /* 64-bit stat functions */
635 #     define zstat _stati64
636 # ifdef UNICODE_SUPPORT
637 #     define zwfstat _fstati64
638 #     define zwstat _wstati64
639 #     define zw_stat struct _stati64
640 # endif
641 #     define zfstat _fstati64
642 #     define zlstat lstat
643 
644       /* 64-bit fseeko */
645       /* function in win32.c */
646       int zfseeko OF((FILE *, zoff_t, int));
647 
648       /* 64-bit ftello */
649       /* function in win32.c */
650       zoff_t zftello OF((FILE *));
651 
652       /* 64-bit fopen */
653 #     define zfopen fopen
654 #     define zfdopen fdopen
655 
656 #   endif
657 
658 #   ifdef _MSC_VER
659     /* MS C and VC */
660 
661       /* 64-bit stat functions */
662 #     define zstat _stati64
663 # ifdef UNICODE_SUPPORT
664 #     define zwfstat _fstati64
665 #     define zwstat _wstati64
666 #     define zw_stat struct _stati64
667 # endif
668 #     define zfstat _fstati64
669 #     define zlstat lstat
670 
671       /* 64-bit fseeko */
672       /* function in win32.c */
673       int zfseeko OF((FILE *, zoff_t, int));
674 
675       /* 64-bit ftello */
676       /* function in win32.c */
677       zoff_t zftello OF((FILE *));
678 
679       /* 64-bit fopen */
680 #     define zfopen fopen
681 #     define zfdopen fdopen
682 
683 #   endif
684 
685 #   ifdef __IBMC__
686       /* IBM C */
687 
688       /* 64-bit stat functions */
689 
690       /* 64-bit fseeko */
691       /* function in win32.c */
692       int zfseeko OF((FILE *, zoff_t, int));
693 
694       /* 64-bit ftello */
695       /* function in win32.c */
696       zoff_t zftello OF((FILE *));
697 
698       /* 64-bit fopen */
699 
700 #   endif
701 
702 # endif /* WIN32 */
703 
704 #else
705   /* No Large File Support or default for 64-bit environment */
706 
707 # define zstat stat
708 # define zfstat fstat
709 # define zlstat lstat
710 # define zfseeko fseek
711 # define zftello ftell
712 # define zfopen fopen
713 # define zfdopen fdopen
714 # ifdef UNICODE_SUPPORT
715 #   define zwfstat _fstat
716 #   define zwstat _wstat
717 #   define zw_stat struct _stat
718 # endif
719 
720 #endif
721 
722 #ifdef LARGE_FILE_SUPPORT         /* E. Gordon 9/12/2003 */
723 
724 # ifndef SSTAT
725 #  define SSTAT      zstat
726 #  ifdef UNICODE_SUPPORT
727 #    define SSTATW   zwstat
728 #  endif
729 # endif
730 # ifdef S_IFLNK
731 #  define LSTAT      zlstat
732 #  define LSSTAT(n, s)  (linkput ? zlstat((n), (s)) : SSTAT((n), (s)))
733 # else
734 #  define LSTAT      SSTAT
735 #  define LSSTAT     SSTAT
736 #  ifdef UNICODE_SUPPORT
737 #    define LSSTATW  SSTATW
738 #  endif
739 # endif
740 
741 #else /* no LARGE_FILE_SUPPORT */
742 
743 # ifndef SSTAT
744 #  define SSTAT      stat
745 # endif
746 # ifdef S_IFLNK
747 #  define LSTAT      lstat
748 #  define LSSTAT(n, s)  (linkput ? lstat((n), (s)) : SSTAT((n), (s)))
749 # else
750 #  define LSTAT      SSTAT
751 #  define LSSTAT     SSTAT
752 #  ifdef UNICODE_SUPPORT
753 #    define LSSTATW  SSTATW
754 #  endif
755 # endif
756 
757 #endif
758 
759 
760 /*---------------------------------------------------------------------*/
761 
762 
763 /* 2004-12-01 SMS.
764  * Added fancy zofft() macros, et c.
765  */
766 
767 /* Default fzofft() format selection.
768  * Modified 2004-12-27 EG
769  */
770 
771 #ifndef FZOFFT_FMT
772 # define FZOFFT_FMT      ZOFF_T_FORMAT_SIZE_PREFIX /* printf for zoff_t values */
773 
774 # ifdef LARGE_FILE_SUPPORT
775 #   define FZOFFT_HEX_WID_VALUE     "16"  /* width of 64-bit hex values */
776 # else
777 #   define FZOFFT_HEX_WID_VALUE     "8"   /* digits in 32-bit hex values */
778 # endif
779 
780 #endif /* ndef FZOFFT_FMT */
781 
782 #define FZOFFT_HEX_WID ((char *) -1)
783 #define FZOFFT_HEX_DOT_WID ((char *) -2)
784 
785 
786 
787 
788 /* The following default definition of the second input for the crypthead()
789  * random seed computation can be used on most systems (all those that
790  * supply a UNIX compatible getpid() function).
791  */
792 #ifdef ZCRYPT_INTERNAL
793 #  ifndef ZCR_SEED2
794 #    define ZCR_SEED2     (unsigned) getpid()   /* use PID as seed pattern */
795 #  endif
796 #endif /* ZCRYPT_INTERNAL */
797 
798 /* The following OS codes are defined in pkzip appnote.txt */
799 #ifdef AMIGA
800 #  define OS_CODE  0x100
801 #endif
802 #ifdef VMS
803 #  define OS_CODE  0x200
804 #endif
805 /* unix    3 */
806 #ifdef VM_CMS
807 #  define OS_CODE  0x400
808 #endif
809 #ifdef ATARI
810 #  define OS_CODE  0x500
811 #endif
812 #ifdef OS2
813 #  define OS_CODE  0x600
814 #endif
815 #ifdef MACOS
816 #  define OS_CODE  0x700
817 #endif
818 /* z system 8 */
819 /* cp/m     9 */
820 #ifdef TOPS20
821 #  define OS_CODE  0xa00
822 #endif
823 #ifdef WIN32
824 #  define OS_CODE  0xb00
825 #endif
826 #ifdef QDOS
827 #  define OS_CODE  0xc00
828 #endif
829 #ifdef RISCOS
830 #  define OS_CODE  0xd00
831 #endif
832 #ifdef VFAT
833 #  define OS_CODE  0xe00
834 #endif
835 #ifdef MVS
836 #  define OS_CODE  0xf00
837 #endif
838 #ifdef __BEOS__
839 #  define OS_CODE  0x1000
840 #endif
841 #ifdef TANDEM
842 #  define OS_CODE  0x1100
843 #endif
844 #ifdef THEOS
845 #  define OS_CODE  0x1200
846 #endif
847 /* Yes, there is a gap here. */
848 #ifdef __ATHEOS__
849 #  define OS_CODE  0x1E00
850 #endif
851 
852 #define NUM_HOSTS 31
853 /* Number of operating systems. Should be updated when new ports are made */
854 
855 #if defined(DOS) && !defined(OS_CODE)
856 #  define OS_CODE  0x000
857 #endif
858 
859 #ifndef OS_CODE
860 #  define OS_CODE  0x300  /* assume Unix */
861 #endif
862 
863 /* can't use "return 0" from main() on VMS */
864 #ifndef EXIT
865 #  define EXIT  exit
866 #endif
867 #ifndef RETURN
868 #  define RETURN return
869 #endif
870 
871 #ifndef ZIPERR
872 #  define ZIPERR ziperr
873 #endif
874 
875 #if (defined(USE_ZLIB) && defined(MY_ZCALLOC))
876    /* special zcalloc function is not needed when linked against zlib */
877 #  undef MY_ZCALLOC
878 #endif
879 
880 #if (!defined(USE_ZLIB) && !defined(MY_ZCALLOC))
881    /* Any system without a special calloc function */
882 #  define zcalloc(items,size) \
883           (zvoid far *)calloc((unsigned)(items), (unsigned)(size))
884 #  define zcfree    free
885 #endif /* !USE_ZLIB && !MY_ZCALLOC */
886 
887 /* end of tailor.h */
888