23 typedef enum nmsg_zbuf_type {
24 nmsg_zbuf_type_deflate,
25 nmsg_zbuf_type_inflate
40 zb = malloc(
sizeof(*zb));
44 zb->type = nmsg_zbuf_type_deflate;
45 zb->zs.zalloc = Z_NULL;
46 zb->zs.zfree = Z_NULL;
47 zb->zs.opaque = Z_NULL;
49 zret = deflateInit(&zb->zs, Z_DEFAULT_COMPRESSION);
63 zb = malloc(
sizeof(*zb));
67 zb->type = nmsg_zbuf_type_inflate;
68 zb->zs.zalloc = Z_NULL;
69 zb->zs.zfree = Z_NULL;
70 zb->zs.opaque = Z_NULL;
72 zb->zs.next_in = Z_NULL;
74 zret = inflateInit(&zb->zs);
86 if ((*zb)->type == nmsg_zbuf_type_deflate)
87 deflateEnd(&(*zb)->zs);
88 else if ((*zb)->type == nmsg_zbuf_type_inflate)
89 inflateEnd(&(*zb)->zs);
97 size_t *z_len, u_char *z_buf)
101 store_net32(z_buf, (uint32_t) len);
104 zb->zs.avail_in = len;
105 zb->zs.next_in = buf;
106 zb->zs.avail_out = *z_len;
107 zb->zs.next_out = z_buf;
109 zret = deflate(&zb->zs, Z_FINISH);
110 assert(zret == Z_STREAM_END);
111 assert(zb->zs.avail_in == 0);
112 *z_len = *z_len - zb->zs.avail_out +
sizeof(uint32_t);
113 assert(deflateReset(&zb->zs) == Z_OK);
121 size_t *u_len, u_char **u_buf)
126 load_net32(z_buf, &my_ulen);
130 *u_buf = malloc(*u_len);
134 zb->zs.avail_in = z_len;
135 zb->zs.next_in = z_buf;
136 zb->zs.avail_out = *u_len;
137 zb->zs.next_out = *u_buf;
139 zret = inflate(&zb->zs, Z_NO_FLUSH);
140 if (zret != Z_STREAM_END || zb->zs.avail_out != 0) {
144 assert(inflateReset(&zb->zs) == Z_OK);
void nmsg_zbuf_destroy(nmsg_zbuf_t *zb)
Destroy all resources associated with an nmsg_zbuf_t object.
nmsg_zbuf_t nmsg_zbuf_inflate_init(void)
Initialize an nmsg_zbuf_t object for inflation.
nmsg_res nmsg_zbuf_deflate(nmsg_zbuf_t zb, size_t len, u_char *buf, size_t *z_len, u_char *z_buf)
Deflate a buffer.
nmsg_zbuf_t nmsg_zbuf_deflate_init(void)
Initialize an nmsg_zbuf_t object for deflation.
nmsg_res nmsg_zbuf_inflate(nmsg_zbuf_t zb, size_t z_len, u_char *z_buf, size_t *u_len, u_char **u_buf)
Inflate a buffer.