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