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