10 #ifndef MSGPACK_ZBUFFER_H
11 #define MSGPACK_ZBUFFER_H
35 #ifndef MSGPACK_ZBUFFER_INIT_SIZE
36 #define MSGPACK_ZBUFFER_INIT_SIZE 8192
39 static inline bool msgpack_zbuffer_init(
43 static inline msgpack_zbuffer* msgpack_zbuffer_new(
int level,
size_t init_size);
48 static inline const char* msgpack_zbuffer_data(
const msgpack_zbuffer* zbuf);
53 static inline char* msgpack_zbuffer_release_buffer(
msgpack_zbuffer* zbuf);
56 #ifndef MSGPACK_ZBUFFER_RESERVE_SIZE
57 #define MSGPACK_ZBUFFER_RESERVE_SIZE 512
60 static inline int msgpack_zbuffer_write(
void*
data,
const char* buf,
size_t len);
66 int level,
size_t init_size)
70 if(deflateInit(&zbuf->
stream, level) != Z_OK) {
83 static inline msgpack_zbuffer* msgpack_zbuffer_new(
int level,
size_t init_size)
86 if (zbuf == NULL)
return NULL;
87 if(!msgpack_zbuffer_init(zbuf, level, init_size)) {
96 if(zbuf == NULL) {
return; }
97 msgpack_zbuffer_destroy(zbuf);
103 size_t used = (
char*)zbuf->
stream.next_out - zbuf->
data;
104 size_t csize = used + zbuf->
stream.avail_out;
105 size_t nsize = (csize == 0) ? zbuf->
init_size : csize * 2;
107 char* tmp = (
char*)realloc(zbuf->
data, nsize);
113 zbuf->
stream.next_out = (Bytef*)(tmp + used);
114 zbuf->
stream.avail_out = nsize - used;
119 static inline int msgpack_zbuffer_write(
void*
data,
const char* buf,
size_t len)
123 zbuf->
stream.next_in = (Bytef*)buf;
126 while(zbuf->
stream.avail_in > 0) {
128 if(!msgpack_zbuffer_expand(zbuf)) {
133 if(deflate(&zbuf->
stream, Z_NO_FLUSH) != Z_OK) {
144 switch(deflate(&zbuf->
stream, Z_FINISH)) {
148 if(!msgpack_zbuffer_expand(zbuf)) {
158 static inline const char* msgpack_zbuffer_data(
const msgpack_zbuffer* zbuf)
165 return (
char*)zbuf->
stream.next_out - zbuf->
data;
176 if(deflateReset(&zbuf->
stream) != Z_OK) {
179 msgpack_zbuffer_reset_buffer(zbuf);
183 static inline char* msgpack_zbuffer_release_buffer(
msgpack_zbuffer* zbuf)
185 char* tmp = zbuf->
data;
187 zbuf->
stream.next_out = NULL;
188 zbuf->
stream.avail_out = 0;