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