1*2d60b848STomohiro Kusumi /* zutil.c -- target dependent utility functions for the compression library
2*2d60b848STomohiro Kusumi * Copyright (C) 1995-2005, 2010, 2011, 2012 Jean-loup Gailly.
3*2d60b848STomohiro Kusumi * For conditions of distribution and use, see copyright notice in zlib.h
4*2d60b848STomohiro Kusumi */
5*2d60b848STomohiro Kusumi
6*2d60b848STomohiro Kusumi /* @(#) $Id$ */
7*2d60b848STomohiro Kusumi
8*2d60b848STomohiro Kusumi #include "hammer2_zlib_zutil.h"
9*2d60b848STomohiro Kusumi
10*2d60b848STomohiro Kusumi #ifndef NO_DUMMY_DECL
11*2d60b848STomohiro Kusumi struct internal_state {int dummy;}; /* for buggy compilers */
12*2d60b848STomohiro Kusumi #endif
13*2d60b848STomohiro Kusumi
14*2d60b848STomohiro Kusumi z_const char * const z_errmsg[10] = {
15*2d60b848STomohiro Kusumi "need dictionary", /* Z_NEED_DICT 2 */
16*2d60b848STomohiro Kusumi "stream end", /* Z_STREAM_END 1 */
17*2d60b848STomohiro Kusumi "", /* Z_OK 0 */
18*2d60b848STomohiro Kusumi "file error", /* Z_ERRNO (-1) */
19*2d60b848STomohiro Kusumi "stream error", /* Z_STREAM_ERROR (-2) */
20*2d60b848STomohiro Kusumi "data error", /* Z_DATA_ERROR (-3) */
21*2d60b848STomohiro Kusumi "insufficient memory", /* Z_MEM_ERROR (-4) */
22*2d60b848STomohiro Kusumi "buffer error", /* Z_BUF_ERROR (-5) */
23*2d60b848STomohiro Kusumi "incompatible version",/* Z_VERSION_ERROR (-6) */
24*2d60b848STomohiro Kusumi ""};
25*2d60b848STomohiro Kusumi
26*2d60b848STomohiro Kusumi const char * zlibVersion(void);
27*2d60b848STomohiro Kusumi uLong zlibCompileFlags(void);
28*2d60b848STomohiro Kusumi const char * zError(int err);
29*2d60b848STomohiro Kusumi
30*2d60b848STomohiro Kusumi const
31*2d60b848STomohiro Kusumi char*
zlibVersion(void)32*2d60b848STomohiro Kusumi zlibVersion(void)
33*2d60b848STomohiro Kusumi {
34*2d60b848STomohiro Kusumi return ZLIB_VERSION;
35*2d60b848STomohiro Kusumi }
36*2d60b848STomohiro Kusumi
37*2d60b848STomohiro Kusumi uLong
zlibCompileFlags(void)38*2d60b848STomohiro Kusumi zlibCompileFlags(void)
39*2d60b848STomohiro Kusumi {
40*2d60b848STomohiro Kusumi uLong flags;
41*2d60b848STomohiro Kusumi
42*2d60b848STomohiro Kusumi flags = 0;
43*2d60b848STomohiro Kusumi switch ((int)(sizeof(uInt))) {
44*2d60b848STomohiro Kusumi case 2: break;
45*2d60b848STomohiro Kusumi case 4: flags += 1; break;
46*2d60b848STomohiro Kusumi case 8: flags += 2; break;
47*2d60b848STomohiro Kusumi default: flags += 3;
48*2d60b848STomohiro Kusumi }
49*2d60b848STomohiro Kusumi switch ((int)(sizeof(uLong))) {
50*2d60b848STomohiro Kusumi case 2: break;
51*2d60b848STomohiro Kusumi case 4: flags += 1 << 2; break;
52*2d60b848STomohiro Kusumi case 8: flags += 2 << 2; break;
53*2d60b848STomohiro Kusumi default: flags += 3 << 2;
54*2d60b848STomohiro Kusumi }
55*2d60b848STomohiro Kusumi switch ((int)(sizeof(voidpf))) {
56*2d60b848STomohiro Kusumi case 2: break;
57*2d60b848STomohiro Kusumi case 4: flags += 1 << 4; break;
58*2d60b848STomohiro Kusumi case 8: flags += 2 << 4; break;
59*2d60b848STomohiro Kusumi default: flags += 3 << 4;
60*2d60b848STomohiro Kusumi }
61*2d60b848STomohiro Kusumi switch ((int)(sizeof(z_off_t))) {
62*2d60b848STomohiro Kusumi case 2: break;
63*2d60b848STomohiro Kusumi case 4: flags += 1 << 6; break;
64*2d60b848STomohiro Kusumi case 8: flags += 2 << 6; break;
65*2d60b848STomohiro Kusumi default: flags += 3 << 6;
66*2d60b848STomohiro Kusumi }
67*2d60b848STomohiro Kusumi #ifdef H2_ZLIB_DEBUG
68*2d60b848STomohiro Kusumi flags += 1 << 8;
69*2d60b848STomohiro Kusumi #endif
70*2d60b848STomohiro Kusumi #if defined(ASMV) || defined(ASMINF)
71*2d60b848STomohiro Kusumi flags += 1 << 9;
72*2d60b848STomohiro Kusumi #endif
73*2d60b848STomohiro Kusumi #ifdef ZLIB_WINAPI
74*2d60b848STomohiro Kusumi flags += 1 << 10;
75*2d60b848STomohiro Kusumi #endif
76*2d60b848STomohiro Kusumi #ifdef BUILDFIXED
77*2d60b848STomohiro Kusumi flags += 1 << 12;
78*2d60b848STomohiro Kusumi #endif
79*2d60b848STomohiro Kusumi #ifdef DYNAMIC_CRC_TABLE
80*2d60b848STomohiro Kusumi flags += 1 << 13;
81*2d60b848STomohiro Kusumi #endif
82*2d60b848STomohiro Kusumi #ifdef NO_GZCOMPRESS
83*2d60b848STomohiro Kusumi flags += 1L << 16;
84*2d60b848STomohiro Kusumi #endif
85*2d60b848STomohiro Kusumi #ifdef NO_GZIP
86*2d60b848STomohiro Kusumi flags += 1L << 17;
87*2d60b848STomohiro Kusumi #endif
88*2d60b848STomohiro Kusumi #ifdef PKZIP_BUG_WORKAROUND
89*2d60b848STomohiro Kusumi flags += 1L << 20;
90*2d60b848STomohiro Kusumi #endif
91*2d60b848STomohiro Kusumi #ifdef FASTEST
92*2d60b848STomohiro Kusumi flags += 1L << 21;
93*2d60b848STomohiro Kusumi #endif
94*2d60b848STomohiro Kusumi #if defined(STDC) || defined(Z_HAVE_STDARG_H)
95*2d60b848STomohiro Kusumi # ifdef NO_vsnprintf
96*2d60b848STomohiro Kusumi flags += 1L << 25;
97*2d60b848STomohiro Kusumi # ifdef HAS_vsprintf_void
98*2d60b848STomohiro Kusumi flags += 1L << 26;
99*2d60b848STomohiro Kusumi # endif
100*2d60b848STomohiro Kusumi # else
101*2d60b848STomohiro Kusumi # ifdef HAS_vsnprintf_void
102*2d60b848STomohiro Kusumi flags += 1L << 26;
103*2d60b848STomohiro Kusumi # endif
104*2d60b848STomohiro Kusumi # endif
105*2d60b848STomohiro Kusumi #else
106*2d60b848STomohiro Kusumi flags += 1L << 24;
107*2d60b848STomohiro Kusumi # ifdef NO_snprintf
108*2d60b848STomohiro Kusumi flags += 1L << 25;
109*2d60b848STomohiro Kusumi # ifdef HAS_sprintf_void
110*2d60b848STomohiro Kusumi flags += 1L << 26;
111*2d60b848STomohiro Kusumi # endif
112*2d60b848STomohiro Kusumi # else
113*2d60b848STomohiro Kusumi # ifdef HAS_snprintf_void
114*2d60b848STomohiro Kusumi flags += 1L << 26;
115*2d60b848STomohiro Kusumi # endif
116*2d60b848STomohiro Kusumi # endif
117*2d60b848STomohiro Kusumi #endif
118*2d60b848STomohiro Kusumi return flags;
119*2d60b848STomohiro Kusumi }
120*2d60b848STomohiro Kusumi
121*2d60b848STomohiro Kusumi #ifdef H2_ZLIB_DEBUG
122*2d60b848STomohiro Kusumi
123*2d60b848STomohiro Kusumi # ifndef verbose
124*2d60b848STomohiro Kusumi # define verbose 0
125*2d60b848STomohiro Kusumi # endif
126*2d60b848STomohiro Kusumi int ZLIB_INTERNAL z_verbose = verbose;
127*2d60b848STomohiro Kusumi
z_error(char * m)128*2d60b848STomohiro Kusumi void ZLIB_INTERNAL z_error (char *m)
129*2d60b848STomohiro Kusumi {
130*2d60b848STomohiro Kusumi #if defined(_KERNEL)
131*2d60b848STomohiro Kusumi panic("h2 %s: %s", __func__, m);
132*2d60b848STomohiro Kusumi #else
133*2d60b848STomohiro Kusumi fprintf(stderr, "%s\n", m);
134*2d60b848STomohiro Kusumi exit(1);
135*2d60b848STomohiro Kusumi #endif
136*2d60b848STomohiro Kusumi }
137*2d60b848STomohiro Kusumi #endif
138*2d60b848STomohiro Kusumi
139*2d60b848STomohiro Kusumi /* exported to allow conversion of error code to string for compress() and
140*2d60b848STomohiro Kusumi * uncompress()
141*2d60b848STomohiro Kusumi */
142*2d60b848STomohiro Kusumi const
143*2d60b848STomohiro Kusumi char*
zError(int err)144*2d60b848STomohiro Kusumi zError(int err)
145*2d60b848STomohiro Kusumi {
146*2d60b848STomohiro Kusumi return ERR_MSG(err);
147*2d60b848STomohiro Kusumi }
148*2d60b848STomohiro Kusumi
149*2d60b848STomohiro Kusumi #ifndef HAVE_MEMCPY
150*2d60b848STomohiro Kusumi
151*2d60b848STomohiro Kusumi void
152*2d60b848STomohiro Kusumi ZLIB_INTERNAL
zmemcpy(Bytef * dest,const Bytef * source,uInt len)153*2d60b848STomohiro Kusumi zmemcpy(Bytef* dest, const Bytef* source, uInt len)
154*2d60b848STomohiro Kusumi {
155*2d60b848STomohiro Kusumi if (len == 0) return;
156*2d60b848STomohiro Kusumi do {
157*2d60b848STomohiro Kusumi *dest++ = *source++; /* ??? to be unrolled */
158*2d60b848STomohiro Kusumi } while (--len != 0);
159*2d60b848STomohiro Kusumi }
160*2d60b848STomohiro Kusumi
161*2d60b848STomohiro Kusumi int
162*2d60b848STomohiro Kusumi ZLIB_INTERNAL
zmemcmp(const Bytef * s1,const Bytef * s2,uInt len)163*2d60b848STomohiro Kusumi zmemcmp(const Bytef* s1, const Bytef* s2, uInt len)
164*2d60b848STomohiro Kusumi {
165*2d60b848STomohiro Kusumi uInt j;
166*2d60b848STomohiro Kusumi
167*2d60b848STomohiro Kusumi for (j = 0; j < len; j++) {
168*2d60b848STomohiro Kusumi if (s1[j] != s2[j]) return 2*(s1[j] > s2[j])-1;
169*2d60b848STomohiro Kusumi }
170*2d60b848STomohiro Kusumi return 0;
171*2d60b848STomohiro Kusumi }
172*2d60b848STomohiro Kusumi
173*2d60b848STomohiro Kusumi void
174*2d60b848STomohiro Kusumi ZLIB_INTERNAL
zmemzero(Bytef * dest,uInt len)175*2d60b848STomohiro Kusumi zmemzero(Bytef* dest, uInt len)
176*2d60b848STomohiro Kusumi {
177*2d60b848STomohiro Kusumi if (len == 0) return;
178*2d60b848STomohiro Kusumi do {
179*2d60b848STomohiro Kusumi *dest++ = 0; /* ??? to be unrolled */
180*2d60b848STomohiro Kusumi } while (--len != 0);
181*2d60b848STomohiro Kusumi }
182*2d60b848STomohiro Kusumi #endif
183