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