63 #include <grass/config.h> 67 #error "GRASS requires libz to compile" 72 #include <grass/gis.h> 73 #include <grass/glocale.h> 77 static void _init_zstruct(z_stream * z)
82 z->zalloc = (alloc_func) 0;
83 z->zfree = (free_func) 0;
84 z->opaque = (voidpf) 0;
89 G_zlib_compress(
unsigned char *src,
int src_sz,
unsigned char *
dst,
92 int err, nbytes, buf_sz;
101 if (src_sz <= 0 || dst_sz <= 0)
106 buf_sz = compressBound(src_sz);
107 if (
NULL == (buf = (
unsigned char *)
108 G_calloc(buf_sz,
sizeof(
unsigned char))))
112 _init_zstruct(&c_stream);
115 c_stream.avail_in = src_sz;
116 c_stream.next_in = (
unsigned char *) src;
117 c_stream.avail_out = buf_sz;
118 c_stream.next_out = buf;
133 err = deflate(&c_stream, Z_FINISH);
134 if (err != Z_STREAM_END) {
138 deflateEnd(&c_stream);
143 deflateEnd(&c_stream);
152 nbytes = buf_sz - c_stream.avail_out;
153 if (nbytes >= src_sz) {
156 deflateEnd(&c_stream);
160 for (err = 0; err < nbytes; err++)
164 deflateEnd(&c_stream);
171 G_zlib_expand(
unsigned char *src,
int src_sz,
unsigned char *dst,
182 if (src_sz <= 0 || dst_sz <= 0)
186 _init_zstruct(&c_stream);
189 c_stream.avail_in = src_sz;
190 c_stream.next_in = (
unsigned char *)src;
191 c_stream.avail_out = dst_sz;
192 c_stream.next_out =
dst;
195 err = inflateInit(&c_stream);
202 err = inflate(&c_stream, Z_FINISH);
207 nbytes = dst_sz - c_stream.avail_out;
212 if (!(err == Z_STREAM_END || err == Z_OK)) {
213 if (!(err == Z_BUF_ERROR && nbytes == dst_sz)) {
214 inflateEnd(&c_stream);
222 inflateEnd(&c_stream);
SYMBOL * err(FILE *fp, SYMBOL *s, char *msg)
void G_free(void *buf)
Free allocated memory.