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