1 /* zutil.c -- target dependent utility functions for the compression library
2 * Copyright (C) 1995-2005, 2010, 2011, 2012 Jean-loup Gailly.
3 * For conditions of distribution and use, see copyright notice in zlib.h
4 */
5
6 /* @(#) $Id$ */
7
8 #include "zutil.h"
9 #ifndef Z_SOLO
10 # include "gzguts.h"
11 #endif
12
13 char z_errmsg[10][21] = {
14 "need dictionary", /* Z_NEED_DICT 2 */
15 "stream end", /* Z_STREAM_END 1 */
16 "", /* Z_OK 0 */
17 "file error", /* Z_ERRNO (-1) */
18 "stream error", /* Z_STREAM_ERROR (-2) */
19 "data error", /* Z_DATA_ERROR (-3) */
20 "insufficient memory", /* Z_MEM_ERROR (-4) */
21 "buffer error", /* Z_BUF_ERROR (-5) */
22 "incompatible version",/* Z_VERSION_ERROR (-6) */
23 ""};
24
25
zlibVersion(void)26 const char * zlibVersion(void)
27 {
28 return ZLIB_VERSION;
29 }
30
zlibCompileFlags(void)31 uLong zlibCompileFlags(void)
32 {
33 uLong flags = 0;
34
35 switch ((int)(sizeof(uInt)))
36 {
37 case 2:
38 break;
39 case 4:
40 flags += 1;
41 break;
42 case 8:
43 flags += 2;
44 break;
45 default:
46 flags += 3;
47 }
48
49 switch ((int)(sizeof(uLong)))
50 {
51 case 2:
52 break;
53 case 4:
54 flags += 1 << 2;
55 break;
56 case 8:
57 flags += 2 << 2;
58 break;
59 default:
60 flags += 3 << 2;
61 }
62
63 switch ((int)(sizeof(voidpf)))
64 {
65 case 2:
66 break;
67 case 4:
68 flags += 1 << 4;
69 break;
70 case 8:
71 flags += 2 << 4;
72 break;
73 default:
74 flags += 3 << 4;
75 }
76
77 switch ((int)(sizeof(z_off_t)))
78 {
79 case 2:
80 break;
81 case 4:
82 flags += 1 << 6;
83 break;
84 case 8:
85 flags += 2 << 6;
86 break;
87 default:
88 flags += 3 << 6;
89 }
90 #if defined(ASMV) || defined(ASMINF)
91 flags += 1 << 9;
92 #endif
93 #ifdef ZLIB_WINAPI
94 flags += 1 << 10;
95 #endif
96 #ifdef BUILDFIXED
97 flags += 1 << 12;
98 #endif
99 #ifdef DYNAMIC_CRC_TABLE
100 flags += 1 << 13;
101 #endif
102 #ifdef NO_GZCOMPRESS
103 flags += 1L << 16;
104 #endif
105 #ifdef NO_GZIP
106 flags += 1L << 17;
107 #endif
108 #ifdef PKZIP_BUG_WORKAROUND
109 flags += 1L << 20;
110 #endif
111 #ifdef FASTEST
112 flags += 1L << 21;
113 #endif
114 #if defined(STDC) || defined(Z_HAVE_STDARG_H)
115 # ifdef NO_vsnprintf
116 flags += 1L << 25;
117 # ifdef HAS_vsprintf_void
118 flags += 1L << 26;
119 # endif
120 # else
121 # ifdef HAS_vsnprintf_void
122 flags += 1L << 26;
123 # endif
124 # endif
125 #else
126 flags += 1L << 24;
127 # ifdef NO_snprintf
128 flags += 1L << 25;
129 # ifdef HAS_sprintf_void
130 flags += 1L << 26;
131 # endif
132 # else
133 # ifdef HAS_snprintf_void
134 flags += 1L << 26;
135 # endif
136 # endif
137 #endif
138 return flags;
139 }
140
141 /* exported to allow conversion of error code to string for compress() and
142 * uncompress()
143 */
zError(int err)144 const char * zError(int err)
145 {
146 return ERR_MSG(err);
147 }
148
149 #if defined(_WIN32_WCE)
150 /* The Microsoft C Run-Time Library for Windows CE doesn't have
151 * errno. We define it as a global variable to simplify porting.
152 * Its value is always 0 and should not be used.
153 */
154 int errno = 0;
155 #endif
156
zcalloc(voidpf opaque,unsigned items,unsigned size)157 voidpf ZLIB_INTERNAL zcalloc (voidpf opaque, unsigned items, unsigned size)
158 {
159 if (opaque) items += size - size; /* make compiler happy */
160 return sizeof(uInt) > 2 ? (voidpf)malloc(items * size) :
161 (voidpf)calloc(items, size);
162 }
163
zcfree(voidpf opaque,voidpf ptr)164 void ZLIB_INTERNAL zcfree (voidpf opaque, voidpf ptr)
165 {
166 free(ptr);
167 }
168