blob: c9688cd9c04d86e0960bcb6c72b853190a96a7cf [file] [log] [blame]
David Turner54b0bca2002-10-31 22:19:27 +00001/* zutil.h -- internal interface and configuration of the compression library
2 * Copyright (C) 1995-2002 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 _Z_UTIL_H
14#define _Z_UTIL_H
15
16#include "zlib.h"
17
18#ifdef STDC
19# include <stddef.h>
20# include <string.h>
21# include <stdlib.h>
22#endif
23#ifdef NO_ERRNO_H
24 extern int errno;
25#else
26# include <errno.h>
27#endif
28
29#ifndef local
30# define local static
31#endif
32/* compile with -Dlocal if your debugger can't find static symbols */
33
34typedef unsigned char uch;
35typedef uch FAR uchf;
36typedef unsigned short ush;
37typedef ush FAR ushf;
38typedef unsigned long ulg;
39
David Turner54b0bca2002-10-31 22:19:27 +000040
41#define ERR_RETURN(strm,err) \
42 return (strm->msg = (char*)ERR_MSG(err), (err))
43/* To be used only when the state is known to be valid */
44
45 /* common constants */
46
47#ifndef DEF_WBITS
48# define DEF_WBITS MAX_WBITS
49#endif
50/* default windowBits for decompression. MAX_WBITS is for compression only */
51
52#if MAX_MEM_LEVEL >= 8
53# define DEF_MEM_LEVEL 8
54#else
55# define DEF_MEM_LEVEL MAX_MEM_LEVEL
56#endif
57/* default memLevel */
58
59#define STORED_BLOCK 0
60#define STATIC_TREES 1
61#define DYN_TREES 2
62/* The three kinds of block type */
63
64#define MIN_MATCH 3
65#define MAX_MATCH 258
66/* The minimum and maximum match lengths */
67
68#define PRESET_DICT 0x20 /* preset dictionary flag in zlib header */
69
70 /* target dependencies */
71
72#ifdef MSDOS
73# define OS_CODE 0x00
74# if defined(__TURBOC__) || defined(__BORLANDC__)
75# if(__STDC__ == 1) && (defined(__LARGE__) || defined(__COMPACT__))
76 /* Allow compilation with ANSI keywords only enabled */
77 void _Cdecl farfree( void *block );
78 void *_Cdecl farmalloc( unsigned long nbytes );
79# else
80# include <alloc.h>
81# endif
82# else /* MSC or DJGPP */
David Turner54b0bca2002-10-31 22:19:27 +000083# endif
84#endif
85
86#ifdef OS2
87# define OS_CODE 0x06
88#endif
89
90#ifdef WIN32 /* Window 95 & Windows NT */
91# define OS_CODE 0x0b
92#endif
93
94#if defined(VAXC) || defined(VMS)
95# define OS_CODE 0x02
96# define F_OPEN(name, mode) \
Werner Lemberg8fe65392006-04-29 07:31:16 +000097 ft_fopen((name), (mode), "mbc=60", "ctx=stm", "rfm=fix", "mrs=512")
David Turner54b0bca2002-10-31 22:19:27 +000098#endif
99
100#ifdef AMIGA
101# define OS_CODE 0x01
102#endif
103
104#if defined(ATARI) || defined(atarist)
105# define OS_CODE 0x05
106#endif
107
108#if defined(MACOS) || defined(TARGET_OS_MAC)
109# define OS_CODE 0x07
110# if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os
111# include <unix.h> /* for fdopen */
112# else
113# ifndef fdopen
114# define fdopen(fd,mode) NULL /* No fdopen() */
115# endif
116# endif
117#endif
118
119#ifdef __50SERIES /* Prime/PRIMOS */
120# define OS_CODE 0x0F
121#endif
122
123#ifdef TOPS20
124# define OS_CODE 0x0a
125#endif
126
127#if defined(_BEOS_) || defined(RISCOS)
128# define fdopen(fd,mode) NULL /* No fdopen() */
129#endif
130
131#if (defined(_MSC_VER) && (_MSC_VER > 600))
132# define fdopen(fd,type) _fdopen(fd,type)
133#endif
134
135
136 /* Common defaults */
137
138#ifndef OS_CODE
139# define OS_CODE 0x03 /* assume Unix */
140#endif
141
142#ifndef F_OPEN
Werner Lemberg8fe65392006-04-29 07:31:16 +0000143# define F_OPEN(name, mode) ft_fopen((name), (mode))
David Turner54b0bca2002-10-31 22:19:27 +0000144#endif
145
146 /* functions */
147
148#ifdef HAVE_STRERROR
149 extern char *strerror OF((int));
150# define zstrerror(errnum) strerror(errnum)
151#else
152# define zstrerror(errnum) ""
153#endif
154
155#if defined(pyr)
156# define NO_MEMCPY
157#endif
158#if defined(SMALL_MEDIUM) && !defined(_MSC_VER) && !defined(__SC__)
159 /* Use our own functions for small and medium model with MSC <= 5.0.
160 * You may have to use the same strategy for Borland C (untested).
161 * The __SC__ check is for Symantec.
162 */
163# define NO_MEMCPY
164#endif
165#if defined(STDC) && !defined(HAVE_MEMCPY) && !defined(NO_MEMCPY)
166# define HAVE_MEMCPY
167#endif
168#ifdef HAVE_MEMCPY
169# ifdef SMALL_MEDIUM /* MSDOS small or medium model */
170# define zmemcpy _fmemcpy
171# define zmemcmp _fmemcmp
172# define zmemzero(dest, len) _fmemset(dest, 0, len)
173# else
David Turner60b32e12002-11-06 22:32:54 +0000174# define zmemcpy ft_memcpy
Werner Lemberg282637f2003-05-21 07:39:42 +0000175# define zmemcmp ft_memcmp
176# define zmemzero(dest, len) ft_memset(dest, 0, len)
David Turner54b0bca2002-10-31 22:19:27 +0000177# endif
178#else
179 extern void zmemcpy OF((Bytef* dest, const Bytef* source, uInt len));
180 extern int zmemcmp OF((const Bytef* s1, const Bytef* s2, uInt len));
181 extern void zmemzero OF((Bytef* dest, uInt len));
182#endif
183
184/* Diagnostic functions */
185#ifdef DEBUG
186# include <stdio.h>
187 extern int z_verbose;
188 extern void z_error OF((char *m));
189# define Assert(cond,msg) {if(!(cond)) z_error(msg);}
190# define Trace(x) {if (z_verbose>=0) fprintf x ;}
191# define Tracev(x) {if (z_verbose>0) fprintf x ;}
192# define Tracevv(x) {if (z_verbose>1) fprintf x ;}
193# define Tracec(c,x) {if (z_verbose>0 && (c)) fprintf x ;}
194# define Tracecv(c,x) {if (z_verbose>1 && (c)) fprintf x ;}
195#else
196# define Assert(cond,msg)
197# define Trace(x)
198# define Tracev(x)
199# define Tracevv(x)
200# define Tracec(c,x)
201# define Tracecv(c,x)
202#endif
203
204
David Turner8291d252002-12-26 20:51:04 +0000205typedef uLong (*check_func) OF((uLong check, const Bytef *buf,
Werner Lemberg93634642007-06-01 06:56:17 +0000206 uInt len));
David Turner60b32e12002-11-06 22:32:54 +0000207local voidpf zcalloc OF((voidpf opaque, unsigned items, unsigned size));
208local void zcfree OF((voidpf opaque, voidpf ptr));
David Turner54b0bca2002-10-31 22:19:27 +0000209
210#define ZALLOC(strm, items, size) \
211 (*((strm)->zalloc))((strm)->opaque, (items), (size))
212#define ZFREE(strm, addr) (*((strm)->zfree))((strm)->opaque, (voidpf)(addr))
213#define TRY_FREE(s, p) {if (p) ZFREE(s, p);}
214
215#endif /* _Z_UTIL_H */