117651Speter/* zutil.h -- internal interface and configuration of the compression library
2250261Sdelphij * Copyright (C) 1995-2013 Jean-loup Gailly.
317651Speter * For conditions of distribution and use, see copyright notice in zlib.h
417651Speter */
517651Speter
617651Speter/* WARNING: this file should *not* be used by applications. It is
717651Speter   part of the implementation of the compression library and is
817651Speter   subject to change. Applications should only use zlib.h.
917651Speter */
1017651Speter
11146081Skientzle/* @(#) $Id$ */
1217651Speter
13131380Stjr#ifndef ZUTIL_H
14131380Stjr#define ZUTIL_H
1517651Speter
16237410Sdelphij#ifdef HAVE_HIDDEN
17206924Sdelphij#  define ZLIB_INTERNAL __attribute__((visibility ("hidden")))
18206924Sdelphij#else
19206924Sdelphij#  define ZLIB_INTERNAL
20206924Sdelphij#endif
21206924Sdelphij
2217651Speter#include "zlib.h"
2317651Speter
24237410Sdelphij#if defined(STDC) && !defined(Z_SOLO)
25205471Sdelphij#  if !(defined(_WIN32_WCE) && defined(_MSC_VER))
26157046Sdes#    include <stddef.h>
27157046Sdes#  endif
2817651Speter#  include <string.h>
2917651Speter#  include <stdlib.h>
3017651Speter#endif
31205471Sdelphij
32237410Sdelphij#ifdef Z_SOLO
33237410Sdelphij   typedef long ptrdiff_t;  /* guess -- will be caught if guess is wrong */
34237410Sdelphij#endif
35237410Sdelphij
3617651Speter#ifndef local
3717651Speter#  define local static
3817651Speter#endif
3917651Speter/* compile with -Dlocal if your debugger can't find static symbols */
4017651Speter
4117651Spetertypedef unsigned char  uch;
4217651Spetertypedef uch FAR uchf;
4317651Spetertypedef unsigned short ush;
4417651Spetertypedef ush FAR ushf;
4517651Spetertypedef unsigned long  ulg;
4617651Speter
47250261Sdelphijextern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
4817651Speter/* (size given to avoid silly warnings with Visual C++) */
4917651Speter
5017651Speter#define ERR_MSG(err) z_errmsg[Z_NEED_DICT-(err)]
5117651Speter
5217651Speter#define ERR_RETURN(strm,err) \
53250261Sdelphij  return (strm->msg = ERR_MSG(err), (err))
5417651Speter/* To be used only when the state is known to be valid */
5517651Speter
5617651Speter        /* common constants */
5717651Speter
5817651Speter#ifndef DEF_WBITS
5917651Speter#  define DEF_WBITS MAX_WBITS
6017651Speter#endif
6117651Speter/* default windowBits for decompression. MAX_WBITS is for compression only */
6217651Speter
6317651Speter#if MAX_MEM_LEVEL >= 8
6417651Speter#  define DEF_MEM_LEVEL 8
6517651Speter#else
6617651Speter#  define DEF_MEM_LEVEL  MAX_MEM_LEVEL
6717651Speter#endif
6817651Speter/* default memLevel */
6917651Speter
7017651Speter#define STORED_BLOCK 0
7117651Speter#define STATIC_TREES 1
7217651Speter#define DYN_TREES    2
7317651Speter/* The three kinds of block type */
7417651Speter
7517651Speter#define MIN_MATCH  3
7617651Speter#define MAX_MATCH  258
7717651Speter/* The minimum and maximum match lengths */
7817651Speter
7917651Speter#define PRESET_DICT 0x20 /* preset dictionary flag in zlib header */
8017651Speter
8117651Speter        /* target dependencies */
8217651Speter
83131380Stjr#if defined(MSDOS) || (defined(WINDOWS) && !defined(WIN32))
8417651Speter#  define OS_CODE  0x00
85237410Sdelphij#  ifndef Z_SOLO
86237410Sdelphij#    if defined(__TURBOC__) || defined(__BORLANDC__)
87237410Sdelphij#      if (__STDC__ == 1) && (defined(__LARGE__) || defined(__COMPACT__))
88237410Sdelphij         /* Allow compilation with ANSI keywords only enabled */
89237410Sdelphij         void _Cdecl farfree( void *block );
90237410Sdelphij         void *_Cdecl farmalloc( unsigned long nbytes );
91237410Sdelphij#      else
92237410Sdelphij#        include <alloc.h>
93237410Sdelphij#      endif
94237410Sdelphij#    else /* MSC or DJGPP */
95237410Sdelphij#      include <malloc.h>
9633908Ssteve#    endif
9717651Speter#  endif
9817651Speter#endif
9917651Speter
100131380Stjr#ifdef AMIGA
101131380Stjr#  define OS_CODE  0x01
10217651Speter#endif
10317651Speter
10417651Speter#if defined(VAXC) || defined(VMS)
10517651Speter#  define OS_CODE  0x02
10633908Ssteve#  define F_OPEN(name, mode) \
10717651Speter     fopen((name), (mode), "mbc=60", "ctx=stm", "rfm=fix", "mrs=512")
10817651Speter#endif
10917651Speter
11017651Speter#if defined(ATARI) || defined(atarist)
11117651Speter#  define OS_CODE  0x05
11217651Speter#endif
11317651Speter
114131380Stjr#ifdef OS2
115131380Stjr#  define OS_CODE  0x06
116237410Sdelphij#  if defined(M_I86) && !defined(Z_SOLO)
117205471Sdelphij#    include <malloc.h>
118157046Sdes#  endif
119131380Stjr#endif
120131380Stjr
12133908Ssteve#if defined(MACOS) || defined(TARGET_OS_MAC)
12217651Speter#  define OS_CODE  0x07
123237410Sdelphij#  ifndef Z_SOLO
124237410Sdelphij#    if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os
125237410Sdelphij#      include <unix.h> /* for fdopen */
126237410Sdelphij#    else
127237410Sdelphij#      ifndef fdopen
128237410Sdelphij#        define fdopen(fd,mode) NULL /* No fdopen() */
129237410Sdelphij#      endif
13042471Speter#    endif
13133908Ssteve#  endif
13217651Speter#endif
13317651Speter
13417651Speter#ifdef TOPS20
13517651Speter#  define OS_CODE  0x0a
13617651Speter#endif
13717651Speter
138131380Stjr#ifdef WIN32
139131380Stjr#  ifndef __CYGWIN__  /* Cygwin is Unix, not Win32 */
140131380Stjr#    define OS_CODE  0x0b
141131380Stjr#  endif
142131380Stjr#endif
143131380Stjr
144131380Stjr#ifdef __50SERIES /* Prime/PRIMOS */
145131380Stjr#  define OS_CODE  0x0f
146131380Stjr#endif
147131380Stjr
14817651Speter#if defined(_BEOS_) || defined(RISCOS)
14917651Speter#  define fdopen(fd,mode) NULL /* No fdopen() */
15017651Speter#endif
15117651Speter
152205471Sdelphij#if (defined(_MSC_VER) && (_MSC_VER > 600)) && !defined __INTERIX
153131380Stjr#  if defined(_WIN32_WCE)
154131380Stjr#    define fdopen(fd,mode) NULL /* No fdopen() */
155131380Stjr#    ifndef _PTRDIFF_T_DEFINED
156131380Stjr       typedef int ptrdiff_t;
157131380Stjr#      define _PTRDIFF_T_DEFINED
158131380Stjr#    endif
159131380Stjr#  else
160131380Stjr#    define fdopen(fd,type)  _fdopen(fd,type)
161131380Stjr#  endif
16233908Ssteve#endif
16333908Ssteve
164237410Sdelphij#if defined(__BORLANDC__) && !defined(MSDOS)
165205471Sdelphij  #pragma warn -8004
166205471Sdelphij  #pragma warn -8008
167205471Sdelphij  #pragma warn -8066
168205471Sdelphij#endif
169205471Sdelphij
170206002Sdelphij/* provide prototypes for these when building zlib without LFS */
171250261Sdelphij#if !defined(_WIN32) && \
172250261Sdelphij    (!defined(_LARGEFILE64_SOURCE) || _LFS64_LARGEFILE-0 == 0)
173206708Sdelphij    ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off_t));
174206708Sdelphij    ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off_t));
175206002Sdelphij#endif
176206002Sdelphij
177131380Stjr        /* common defaults */
17833908Ssteve
17917651Speter#ifndef OS_CODE
18017651Speter#  define OS_CODE  0x03  /* assume Unix */
18117651Speter#endif
18217651Speter
18333908Ssteve#ifndef F_OPEN
18433908Ssteve#  define F_OPEN(name, mode) fopen((name), (mode))
18517651Speter#endif
18617651Speter
18717651Speter         /* functions */
18817651Speter
189237410Sdelphij#if defined(pyr) || defined(Z_SOLO)
19017651Speter#  define NO_MEMCPY
19117651Speter#endif
19233908Ssteve#if defined(SMALL_MEDIUM) && !defined(_MSC_VER) && !defined(__SC__)
19317651Speter /* Use our own functions for small and medium model with MSC <= 5.0.
19417651Speter  * You may have to use the same strategy for Borland C (untested).
19533908Ssteve  * The __SC__ check is for Symantec.
19617651Speter  */
19717651Speter#  define NO_MEMCPY
19817651Speter#endif
19917651Speter#if defined(STDC) && !defined(HAVE_MEMCPY) && !defined(NO_MEMCPY)
20017651Speter#  define HAVE_MEMCPY
20117651Speter#endif
20217651Speter#ifdef HAVE_MEMCPY
20317651Speter#  ifdef SMALL_MEDIUM /* MSDOS small or medium model */
20417651Speter#    define zmemcpy _fmemcpy
20517651Speter#    define zmemcmp _fmemcmp
20617651Speter#    define zmemzero(dest, len) _fmemset(dest, 0, len)
20717651Speter#  else
20817651Speter#    define zmemcpy memcpy
20917651Speter#    define zmemcmp memcmp
21017651Speter#    define zmemzero(dest, len) memset(dest, 0, len)
21117651Speter#  endif
21217651Speter#else
213206924Sdelphij   void ZLIB_INTERNAL zmemcpy OF((Bytef* dest, const Bytef* source, uInt len));
214206924Sdelphij   int ZLIB_INTERNAL zmemcmp OF((const Bytef* s1, const Bytef* s2, uInt len));
215206924Sdelphij   void ZLIB_INTERNAL zmemzero OF((Bytef* dest, uInt len));
21617651Speter#endif
21717651Speter
21817651Speter/* Diagnostic functions */
21917651Speter#ifdef DEBUG
22017651Speter#  include <stdio.h>
221206924Sdelphij   extern int ZLIB_INTERNAL z_verbose;
222206924Sdelphij   extern void ZLIB_INTERNAL z_error OF((char *m));
22317651Speter#  define Assert(cond,msg) {if(!(cond)) z_error(msg);}
22433908Ssteve#  define Trace(x) {if (z_verbose>=0) fprintf x ;}
22533908Ssteve#  define Tracev(x) {if (z_verbose>0) fprintf x ;}
22633908Ssteve#  define Tracevv(x) {if (z_verbose>1) fprintf x ;}
22733908Ssteve#  define Tracec(c,x) {if (z_verbose>0 && (c)) fprintf x ;}
22833908Ssteve#  define Tracecv(c,x) {if (z_verbose>1 && (c)) fprintf x ;}
22917651Speter#else
23017651Speter#  define Assert(cond,msg)
23117651Speter#  define Trace(x)
23217651Speter#  define Tracev(x)
23317651Speter#  define Tracevv(x)
23417651Speter#  define Tracec(c,x)
23517651Speter#  define Tracecv(c,x)
23617651Speter#endif
23717651Speter
238237410Sdelphij#ifndef Z_SOLO
239237410Sdelphij   voidpf ZLIB_INTERNAL zcalloc OF((voidpf opaque, unsigned items,
240237410Sdelphij                                    unsigned size));
241237410Sdelphij   void ZLIB_INTERNAL zcfree  OF((voidpf opaque, voidpf ptr));
242237410Sdelphij#endif
24317651Speter
24417651Speter#define ZALLOC(strm, items, size) \
24517651Speter           (*((strm)->zalloc))((strm)->opaque, (items), (size))
24617651Speter#define ZFREE(strm, addr)  (*((strm)->zfree))((strm)->opaque, (voidpf)(addr))
24717651Speter#define TRY_FREE(s, p) {if (p) ZFREE(s, p);}
24817651Speter
249237410Sdelphij/* Reverse the bytes in a 32-bit value */
250237410Sdelphij#define ZSWAP32(q) ((((q) >> 24) & 0xff) + (((q) >> 8) & 0xff00) + \
251237410Sdelphij                    (((q) & 0xff00) << 8) + (((q) & 0xff) << 24))
252237410Sdelphij
253131380Stjr#endif /* ZUTIL_H */
254