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