1 #ifndef ZUTIL_H_
2 #define ZUTIL_H_
3 /* zutil.h -- internal interface and configuration of the compression library
4  * Copyright (C) 1995-2016 Jean-loup Gailly, Mark Adler
5  * For conditions of distribution and use, see copyright notice in zlib.h
6  */
7 
8 /* WARNING: this file should *not* be used by applications. It is
9    part of the implementation of the compression library and is
10    subject to change. Applications should only use zlib.h.
11  */
12 
13 #include "zbuild.h"
14 #ifdef ZLIB_COMPAT
15 #  include "zlib.h"
16 #else
17 #  include "zlib-ng.h"
18 #endif
19 
20 typedef unsigned char uch; /* Included for compatibility with external code only */
21 typedef uint16_t ush;      /* Included for compatibility with external code only */
22 typedef unsigned long ulg;
23 
24 extern z_const char * const PREFIX(z_errmsg)[10]; /* indexed by 2-zlib_error */
25 /* (size given to avoid silly warnings with Visual C++) */
26 
27 #define ERR_MSG(err) PREFIX(z_errmsg)[Z_NEED_DICT-(err)]
28 
29 #define ERR_RETURN(strm, err) return (strm->msg = ERR_MSG(err), (err))
30 /* To be used only when the state is known to be valid */
31 
32         /* common constants */
33 
34 #ifndef DEF_WBITS
35 #  define DEF_WBITS MAX_WBITS
36 #endif
37 /* default windowBits for decompression. MAX_WBITS is for compression only */
38 
39 #if MAX_MEM_LEVEL >= 8
40 #  define DEF_MEM_LEVEL 8
41 #else
42 #  define DEF_MEM_LEVEL  MAX_MEM_LEVEL
43 #endif
44 /* default memLevel */
45 
46 #define STORED_BLOCK 0
47 #define STATIC_TREES 1
48 #define DYN_TREES    2
49 /* The three kinds of block type */
50 
51 #define STD_MIN_MATCH  3
52 #define STD_MAX_MATCH  258
53 /* The minimum and maximum match lengths mandated by the deflate standard */
54 
55 #define WANT_MIN_MATCH  4
56 /* The minimum wanted match length, affects deflate_quick, deflate_fast, deflate_medium and deflate_slow  */
57 
58 #define PRESET_DICT 0x20 /* preset dictionary flag in zlib header */
59 
60 #define ADLER32_INITIAL_VALUE 1 /* initial adler-32 hash value */
61 #define CRC32_INITIAL_VALUE   0 /* initial crc-32 hash value */
62 
63 #define ZLIB_WRAPLEN 6      /* zlib format overhead */
64 #define GZIP_WRAPLEN 18     /* gzip format overhead */
65 
66 #define DEFLATE_HEADER_BITS 3
67 #define DEFLATE_EOBS_BITS   15
68 #define DEFLATE_PAD_BITS    6
69 #define DEFLATE_BLOCK_OVERHEAD ((DEFLATE_HEADER_BITS + DEFLATE_EOBS_BITS + DEFLATE_PAD_BITS) >> 3)
70 /* deflate block overhead: 3 bits for block start + 15 bits for block end + padding to nearest byte */
71 
72 #define DEFLATE_QUICK_LIT_MAX_BITS 9
73 #define DEFLATE_QUICK_OVERHEAD(x) ((x * (DEFLATE_QUICK_LIT_MAX_BITS - 8) + 7) >> 3)
74 /* deflate_quick worst-case overhead: 9 bits per literal, round up to next byte (+7) */
75 
76 
77         /* target dependencies */
78 
79 #ifdef AMIGA
80 #  define OS_CODE  1
81 #endif
82 
83 #ifdef __370__
84 #  if __TARGET_LIB__ < 0x20000000
85 #    define OS_CODE 4
86 #  elif __TARGET_LIB__ < 0x40000000
87 #    define OS_CODE 11
88 #  else
89 #    define OS_CODE 8
90 #  endif
91 #endif
92 
93 #if defined(ATARI) || defined(atarist)
94 #  define OS_CODE  5
95 #endif
96 
97 #ifdef OS2
98 #  define OS_CODE  6
99 #endif
100 
101 #if defined(MACOS) || defined(TARGET_OS_MAC)
102 #  define OS_CODE  7
103 #endif
104 
105 #ifdef __acorn
106 #  define OS_CODE 13
107 #endif
108 
109 #if defined(_WIN32) && !defined(__CYGWIN__)
110 #  define OS_CODE  10
111 #endif
112 
113 #ifdef __APPLE__
114 #  define OS_CODE 19
115 #endif
116 
117         /* common defaults */
118 
119 #ifndef OS_CODE
120 #  define OS_CODE  3  /* assume Unix */
121 #endif
122 
123          /* memory allocation functions */
124 
125 void Z_INTERNAL *zng_calloc(void *opaque, unsigned items, unsigned size);
126 void Z_INTERNAL   zng_cfree(void *opaque, void *ptr);
127 
128 typedef void *zng_calloc_func(void *opaque, unsigned items, unsigned size);
129 typedef void  zng_cfree_func(void *opaque, void *ptr);
130 
131 void Z_INTERNAL *zng_alloc_aligned(zng_calloc_func zalloc, void *opaque, unsigned items, unsigned size, unsigned align);
132 void Z_INTERNAL  zng_free_aligned(zng_cfree_func zfree, void *opaque, void *ptr);
133 
134 #define ZALLOC(strm, items, size) zng_alloc_aligned((strm)->zalloc, (strm)->opaque, (items), (size), 64)
135 #define ZFREE(strm, addr)         zng_free_aligned((strm)->zfree, (strm)->opaque, (void *)(addr))
136 
137 #define TRY_FREE(s, p)            {if (p) ZFREE(s, p);}
138 
139 #endif /* ZUTIL_H_ */
140