1*221b1638SMasahiro Yamada /* zutil.h -- internal interface and configuration of the compression library 2*221b1638SMasahiro Yamada * Copyright (C) 1995-2016 Jean-loup Gailly, Mark Adler 3*221b1638SMasahiro Yamada * For conditions of distribution and use, see copyright notice in zlib.h 4*221b1638SMasahiro Yamada */ 5*221b1638SMasahiro Yamada 6*221b1638SMasahiro Yamada /* WARNING: this file should *not* be used by applications. It is 7*221b1638SMasahiro Yamada part of the implementation of the compression library and is 8*221b1638SMasahiro Yamada subject to change. Applications should only use zlib.h. 9*221b1638SMasahiro Yamada */ 10*221b1638SMasahiro Yamada 11*221b1638SMasahiro Yamada /* @(#) $Id$ */ 12*221b1638SMasahiro Yamada 13*221b1638SMasahiro Yamada #ifndef ZUTIL_H 14*221b1638SMasahiro Yamada #define ZUTIL_H 15*221b1638SMasahiro Yamada 16*221b1638SMasahiro Yamada #ifdef HAVE_HIDDEN 17*221b1638SMasahiro Yamada # define ZLIB_INTERNAL __attribute__((visibility ("hidden"))) 18*221b1638SMasahiro Yamada #else 19*221b1638SMasahiro Yamada # define ZLIB_INTERNAL 20*221b1638SMasahiro Yamada #endif 21*221b1638SMasahiro Yamada 22*221b1638SMasahiro Yamada #include "zlib.h" 23*221b1638SMasahiro Yamada 24*221b1638SMasahiro Yamada #if defined(STDC) && !defined(Z_SOLO) 25*221b1638SMasahiro Yamada # if !(defined(_WIN32_WCE) && defined(_MSC_VER)) 26*221b1638SMasahiro Yamada # include <stddef.h> 27*221b1638SMasahiro Yamada # endif 28*221b1638SMasahiro Yamada # include <string.h> 29*221b1638SMasahiro Yamada # include <stdlib.h> 30*221b1638SMasahiro Yamada #endif 31*221b1638SMasahiro Yamada 32*221b1638SMasahiro Yamada #ifdef Z_SOLO 33*221b1638SMasahiro Yamada typedef long ptrdiff_t; /* guess -- will be caught if guess is wrong */ 34*221b1638SMasahiro Yamada #endif 35*221b1638SMasahiro Yamada 36*221b1638SMasahiro Yamada #ifndef local 37*221b1638SMasahiro Yamada # define local static 38*221b1638SMasahiro Yamada #endif 39*221b1638SMasahiro Yamada /* since "static" is used to mean two completely different things in C, we 40*221b1638SMasahiro Yamada define "local" for the non-static meaning of "static", for readability 41*221b1638SMasahiro Yamada (compile with -Dlocal if your debugger can't find static symbols) */ 42*221b1638SMasahiro Yamada 43*221b1638SMasahiro Yamada typedef unsigned char uch; 44*221b1638SMasahiro Yamada typedef uch FAR uchf; 45*221b1638SMasahiro Yamada typedef unsigned short ush; 46*221b1638SMasahiro Yamada typedef ush FAR ushf; 47*221b1638SMasahiro Yamada typedef unsigned long ulg; 48*221b1638SMasahiro Yamada 49*221b1638SMasahiro Yamada extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */ 50*221b1638SMasahiro Yamada /* (size given to avoid silly warnings with Visual C++) */ 51*221b1638SMasahiro Yamada 52*221b1638SMasahiro Yamada #define ERR_MSG(err) z_errmsg[Z_NEED_DICT-(err)] 53*221b1638SMasahiro Yamada 54*221b1638SMasahiro Yamada #define ERR_RETURN(strm,err) \ 55*221b1638SMasahiro Yamada return (strm->msg = ERR_MSG(err), (err)) 56*221b1638SMasahiro Yamada /* To be used only when the state is known to be valid */ 57*221b1638SMasahiro Yamada 58*221b1638SMasahiro Yamada /* common constants */ 59*221b1638SMasahiro Yamada 60*221b1638SMasahiro Yamada #ifndef DEF_WBITS 61*221b1638SMasahiro Yamada # define DEF_WBITS MAX_WBITS 62*221b1638SMasahiro Yamada #endif 63*221b1638SMasahiro Yamada /* default windowBits for decompression. MAX_WBITS is for compression only */ 64*221b1638SMasahiro Yamada 65*221b1638SMasahiro Yamada #if MAX_MEM_LEVEL >= 8 66*221b1638SMasahiro Yamada # define DEF_MEM_LEVEL 8 67*221b1638SMasahiro Yamada #else 68*221b1638SMasahiro Yamada # define DEF_MEM_LEVEL MAX_MEM_LEVEL 69*221b1638SMasahiro Yamada #endif 70*221b1638SMasahiro Yamada /* default memLevel */ 71*221b1638SMasahiro Yamada 72*221b1638SMasahiro Yamada #define STORED_BLOCK 0 73*221b1638SMasahiro Yamada #define STATIC_TREES 1 74*221b1638SMasahiro Yamada #define DYN_TREES 2 75*221b1638SMasahiro Yamada /* The three kinds of block type */ 76*221b1638SMasahiro Yamada 77*221b1638SMasahiro Yamada #define MIN_MATCH 3 78*221b1638SMasahiro Yamada #define MAX_MATCH 258 79*221b1638SMasahiro Yamada /* The minimum and maximum match lengths */ 80*221b1638SMasahiro Yamada 81*221b1638SMasahiro Yamada #define PRESET_DICT 0x20 /* preset dictionary flag in zlib header */ 82*221b1638SMasahiro Yamada 83*221b1638SMasahiro Yamada /* target dependencies */ 84*221b1638SMasahiro Yamada 85*221b1638SMasahiro Yamada #if defined(MSDOS) || (defined(WINDOWS) && !defined(WIN32)) 86*221b1638SMasahiro Yamada # define OS_CODE 0x00 87*221b1638SMasahiro Yamada # ifndef Z_SOLO 88*221b1638SMasahiro Yamada # if defined(__TURBOC__) || defined(__BORLANDC__) 89*221b1638SMasahiro Yamada # if (__STDC__ == 1) && (defined(__LARGE__) || defined(__COMPACT__)) 90*221b1638SMasahiro Yamada /* Allow compilation with ANSI keywords only enabled */ 91*221b1638SMasahiro Yamada void _Cdecl farfree( void *block ); 92*221b1638SMasahiro Yamada void *_Cdecl farmalloc( unsigned long nbytes ); 93*221b1638SMasahiro Yamada # else 94*221b1638SMasahiro Yamada # include <alloc.h> 95*221b1638SMasahiro Yamada # endif 96*221b1638SMasahiro Yamada # else /* MSC or DJGPP */ 97*221b1638SMasahiro Yamada # include <malloc.h> 98*221b1638SMasahiro Yamada # endif 99*221b1638SMasahiro Yamada # endif 100*221b1638SMasahiro Yamada #endif 101*221b1638SMasahiro Yamada 102*221b1638SMasahiro Yamada #ifdef AMIGA 103*221b1638SMasahiro Yamada # define OS_CODE 1 104*221b1638SMasahiro Yamada #endif 105*221b1638SMasahiro Yamada 106*221b1638SMasahiro Yamada #if defined(VAXC) || defined(VMS) 107*221b1638SMasahiro Yamada # define OS_CODE 2 108*221b1638SMasahiro Yamada # define F_OPEN(name, mode) \ 109*221b1638SMasahiro Yamada fopen((name), (mode), "mbc=60", "ctx=stm", "rfm=fix", "mrs=512") 110*221b1638SMasahiro Yamada #endif 111*221b1638SMasahiro Yamada 112*221b1638SMasahiro Yamada #ifdef __370__ 113*221b1638SMasahiro Yamada # if __TARGET_LIB__ < 0x20000000 114*221b1638SMasahiro Yamada # define OS_CODE 4 115*221b1638SMasahiro Yamada # elif __TARGET_LIB__ < 0x40000000 116*221b1638SMasahiro Yamada # define OS_CODE 11 117*221b1638SMasahiro Yamada # else 118*221b1638SMasahiro Yamada # define OS_CODE 8 119*221b1638SMasahiro Yamada # endif 120*221b1638SMasahiro Yamada #endif 121*221b1638SMasahiro Yamada 122*221b1638SMasahiro Yamada #if defined(ATARI) || defined(atarist) 123*221b1638SMasahiro Yamada # define OS_CODE 5 124*221b1638SMasahiro Yamada #endif 125*221b1638SMasahiro Yamada 126*221b1638SMasahiro Yamada #ifdef OS2 127*221b1638SMasahiro Yamada # define OS_CODE 6 128*221b1638SMasahiro Yamada # if defined(M_I86) && !defined(Z_SOLO) 129*221b1638SMasahiro Yamada # include <malloc.h> 130*221b1638SMasahiro Yamada # endif 131*221b1638SMasahiro Yamada #endif 132*221b1638SMasahiro Yamada 133*221b1638SMasahiro Yamada #if defined(MACOS) || defined(TARGET_OS_MAC) 134*221b1638SMasahiro Yamada # define OS_CODE 7 135*221b1638SMasahiro Yamada # ifndef Z_SOLO 136*221b1638SMasahiro Yamada # if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os 137*221b1638SMasahiro Yamada # include <unix.h> /* for fdopen */ 138*221b1638SMasahiro Yamada # else 139*221b1638SMasahiro Yamada # ifndef fdopen 140*221b1638SMasahiro Yamada # define fdopen(fd,mode) NULL /* No fdopen() */ 141*221b1638SMasahiro Yamada # endif 142*221b1638SMasahiro Yamada # endif 143*221b1638SMasahiro Yamada # endif 144*221b1638SMasahiro Yamada #endif 145*221b1638SMasahiro Yamada 146*221b1638SMasahiro Yamada #ifdef __acorn 147*221b1638SMasahiro Yamada # define OS_CODE 13 148*221b1638SMasahiro Yamada #endif 149*221b1638SMasahiro Yamada 150*221b1638SMasahiro Yamada #if defined(WIN32) && !defined(__CYGWIN__) 151*221b1638SMasahiro Yamada # define OS_CODE 10 152*221b1638SMasahiro Yamada #endif 153*221b1638SMasahiro Yamada 154*221b1638SMasahiro Yamada #ifdef _BEOS_ 155*221b1638SMasahiro Yamada # define OS_CODE 16 156*221b1638SMasahiro Yamada #endif 157*221b1638SMasahiro Yamada 158*221b1638SMasahiro Yamada #ifdef __TOS_OS400__ 159*221b1638SMasahiro Yamada # define OS_CODE 18 160*221b1638SMasahiro Yamada #endif 161*221b1638SMasahiro Yamada 162*221b1638SMasahiro Yamada #ifdef __APPLE__ 163*221b1638SMasahiro Yamada # define OS_CODE 19 164*221b1638SMasahiro Yamada #endif 165*221b1638SMasahiro Yamada 166*221b1638SMasahiro Yamada #if defined(_BEOS_) || defined(RISCOS) 167*221b1638SMasahiro Yamada # define fdopen(fd,mode) NULL /* No fdopen() */ 168*221b1638SMasahiro Yamada #endif 169*221b1638SMasahiro Yamada 170*221b1638SMasahiro Yamada #if (defined(_MSC_VER) && (_MSC_VER > 600)) && !defined __INTERIX 171*221b1638SMasahiro Yamada # if defined(_WIN32_WCE) 172*221b1638SMasahiro Yamada # define fdopen(fd,mode) NULL /* No fdopen() */ 173*221b1638SMasahiro Yamada # ifndef _PTRDIFF_T_DEFINED 174*221b1638SMasahiro Yamada typedef int ptrdiff_t; 175*221b1638SMasahiro Yamada # define _PTRDIFF_T_DEFINED 176*221b1638SMasahiro Yamada # endif 177*221b1638SMasahiro Yamada # else 178*221b1638SMasahiro Yamada # define fdopen(fd,type) _fdopen(fd,type) 179*221b1638SMasahiro Yamada # endif 180*221b1638SMasahiro Yamada #endif 181*221b1638SMasahiro Yamada 182*221b1638SMasahiro Yamada #if defined(__BORLANDC__) && !defined(MSDOS) 183*221b1638SMasahiro Yamada #pragma warn -8004 184*221b1638SMasahiro Yamada #pragma warn -8008 185*221b1638SMasahiro Yamada #pragma warn -8066 186*221b1638SMasahiro Yamada #endif 187*221b1638SMasahiro Yamada 188*221b1638SMasahiro Yamada /* provide prototypes for these when building zlib without LFS */ 189*221b1638SMasahiro Yamada #if !defined(_WIN32) && \ 190*221b1638SMasahiro Yamada (!defined(_LARGEFILE64_SOURCE) || _LFS64_LARGEFILE-0 == 0) 191*221b1638SMasahiro Yamada ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off_t)); 192*221b1638SMasahiro Yamada ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off_t)); 193*221b1638SMasahiro Yamada #endif 194*221b1638SMasahiro Yamada 195*221b1638SMasahiro Yamada /* common defaults */ 196*221b1638SMasahiro Yamada 197*221b1638SMasahiro Yamada #ifndef OS_CODE 198*221b1638SMasahiro Yamada # define OS_CODE 3 /* assume Unix */ 199*221b1638SMasahiro Yamada #endif 200*221b1638SMasahiro Yamada 201*221b1638SMasahiro Yamada #ifndef F_OPEN 202*221b1638SMasahiro Yamada # define F_OPEN(name, mode) fopen((name), (mode)) 203*221b1638SMasahiro Yamada #endif 204*221b1638SMasahiro Yamada 205*221b1638SMasahiro Yamada /* functions */ 206*221b1638SMasahiro Yamada 207*221b1638SMasahiro Yamada #if defined(pyr) || defined(Z_SOLO) 208*221b1638SMasahiro Yamada # define NO_MEMCPY 209*221b1638SMasahiro Yamada #endif 210*221b1638SMasahiro Yamada #if defined(SMALL_MEDIUM) && !defined(_MSC_VER) && !defined(__SC__) 211*221b1638SMasahiro Yamada /* Use our own functions for small and medium model with MSC <= 5.0. 212*221b1638SMasahiro Yamada * You may have to use the same strategy for Borland C (untested). 213*221b1638SMasahiro Yamada * The __SC__ check is for Symantec. 214*221b1638SMasahiro Yamada */ 215*221b1638SMasahiro Yamada # define NO_MEMCPY 216*221b1638SMasahiro Yamada #endif 217*221b1638SMasahiro Yamada #if defined(STDC) && !defined(HAVE_MEMCPY) && !defined(NO_MEMCPY) 218*221b1638SMasahiro Yamada # define HAVE_MEMCPY 219*221b1638SMasahiro Yamada #endif 220*221b1638SMasahiro Yamada #ifdef HAVE_MEMCPY 221*221b1638SMasahiro Yamada # ifdef SMALL_MEDIUM /* MSDOS small or medium model */ 222*221b1638SMasahiro Yamada # define zmemcpy _fmemcpy 223*221b1638SMasahiro Yamada # define zmemcmp _fmemcmp 224*221b1638SMasahiro Yamada # define zmemzero(dest, len) _fmemset(dest, 0, len) 225*221b1638SMasahiro Yamada # else 226*221b1638SMasahiro Yamada # define zmemcpy memcpy 227*221b1638SMasahiro Yamada # define zmemcmp memcmp 228*221b1638SMasahiro Yamada # define zmemzero(dest, len) memset(dest, 0, len) 229*221b1638SMasahiro Yamada # endif 230*221b1638SMasahiro Yamada #else 231*221b1638SMasahiro Yamada void ZLIB_INTERNAL zmemcpy OF((Bytef* dest, const Bytef* source, uInt len)); 232*221b1638SMasahiro Yamada int ZLIB_INTERNAL zmemcmp OF((const Bytef* s1, const Bytef* s2, uInt len)); 233*221b1638SMasahiro Yamada void ZLIB_INTERNAL zmemzero OF((Bytef* dest, uInt len)); 234*221b1638SMasahiro Yamada #endif 235*221b1638SMasahiro Yamada 236*221b1638SMasahiro Yamada /* Diagnostic functions */ 237*221b1638SMasahiro Yamada #ifdef ZLIB_DEBUG 238*221b1638SMasahiro Yamada # include <stdio.h> 239*221b1638SMasahiro Yamada extern int ZLIB_INTERNAL z_verbose; 240*221b1638SMasahiro Yamada extern void ZLIB_INTERNAL z_error OF((char *m)); 241*221b1638SMasahiro Yamada # define Assert(cond,msg) {if(!(cond)) z_error(msg);} 242*221b1638SMasahiro Yamada # define Trace(x) {if (z_verbose>=0) fprintf x ;} 243*221b1638SMasahiro Yamada # define Tracev(x) {if (z_verbose>0) fprintf x ;} 244*221b1638SMasahiro Yamada # define Tracevv(x) {if (z_verbose>1) fprintf x ;} 245*221b1638SMasahiro Yamada # define Tracec(c,x) {if (z_verbose>0 && (c)) fprintf x ;} 246*221b1638SMasahiro Yamada # define Tracecv(c,x) {if (z_verbose>1 && (c)) fprintf x ;} 247*221b1638SMasahiro Yamada #else 248*221b1638SMasahiro Yamada # define Assert(cond,msg) 249*221b1638SMasahiro Yamada # define Trace(x) 250*221b1638SMasahiro Yamada # define Tracev(x) 251*221b1638SMasahiro Yamada # define Tracevv(x) 252*221b1638SMasahiro Yamada # define Tracec(c,x) 253*221b1638SMasahiro Yamada # define Tracecv(c,x) 254*221b1638SMasahiro Yamada #endif 255*221b1638SMasahiro Yamada 256*221b1638SMasahiro Yamada #ifndef Z_SOLO 257*221b1638SMasahiro Yamada voidpf ZLIB_INTERNAL zcalloc OF((voidpf opaque, unsigned items, 258*221b1638SMasahiro Yamada unsigned size)); 259*221b1638SMasahiro Yamada void ZLIB_INTERNAL zcfree OF((voidpf opaque, voidpf ptr)); 260*221b1638SMasahiro Yamada #endif 261*221b1638SMasahiro Yamada 262*221b1638SMasahiro Yamada #define ZALLOC(strm, items, size) \ 263*221b1638SMasahiro Yamada (*((strm)->zalloc))((strm)->opaque, (items), (size)) 264*221b1638SMasahiro Yamada #define ZFREE(strm, addr) (*((strm)->zfree))((strm)->opaque, (voidpf)(addr)) 265*221b1638SMasahiro Yamada #define TRY_FREE(s, p) {if (p) ZFREE(s, p);} 266*221b1638SMasahiro Yamada 267*221b1638SMasahiro Yamada /* Reverse the bytes in a 32-bit value */ 268*221b1638SMasahiro Yamada #define ZSWAP32(q) ((((q) >> 24) & 0xff) + (((q) >> 8) & 0xff00) + \ 269*221b1638SMasahiro Yamada (((q) & 0xff00) << 8) + (((q) & 0xff) << 24)) 270*221b1638SMasahiro Yamada 271*221b1638SMasahiro Yamada #endif /* ZUTIL_H */ 272