#include #define err(msg) perror(msg)
static int gzip_uncompress(char *bufin, int lenin, char *bufout, int lenout)
{
z_stream d_stream;
int result;
memset(bufout, '\0', sizeof(bufout));
d_stream.zalloc = NULL;
d_stream.zfree = NULL;
d_stream.opaque = NULL;
result = inflateInit2(&d_stream, MAX_WBITS + 16);
d_stream.next_in = bufin;
d_stream.avail_in = lenin;
d_stream.next_out = bufout;
d_stream.avail_out = lenout;
inflate(&d_stream, Z_SYNC_FLUSH);
inflateEnd(&d_stream);
return 0;
}
static int gzip_compress(char *bufin, int lenin, char *bufout, int lenout)
{
z_stream d_stream;
int result;
memset(bufout, '\0', sizeof(lenout));
d_stream.zalloc = NULL;
d_stream.zfree = NULL;
d_stream.opaque = NULL;
result = deflateInit2(&d_stream, Z_DEFAULT_COMPRESSION,
Z_DEFLATED, MAX_WBITS + 16,
9, Z_DEFAULT_STRATEGY);
if (result != Z_OK) {
err("deflateInit2");
goto out;
}
d_stream.next_in = bufin;
d_stream.avail_in = lenin;
d_stream.next_out = bufout;
d_stream.avail_out = lenout;
deflate(&d_stream, Z_SYNC_FLUSH);
deflateEnd(&d_stream);
return d_stream.total_out;
out:
return -1;
}
int main(void)
{
int result;
char bufin[] = "hello world";
char bufout[1024];
char bufout2[BUFSIZ];
int lenout;
lenout = gzip_compress(bufin, strlen(bufin), bufout, sizeof(bufout));
gzip_uncompress(bufout, lenout, bufout2, sizeof(bufout2));
printf("bufout2: %s\n", bufout2);
return 0;
out:
return -1;
}