16 state->in = (
unsigned char *)
malloc(state->want << 1);
17 if (state->in == NULL) {
25 state->out = (
unsigned char *)
malloc(state->want);
26 if (state->out == NULL) {
48 state->size = state->want;
52 strm->avail_out = state->size;
53 strm->next_out = state->out;
54 state->x.next = strm->next_out;
67 unsigned have, put,
max = ((unsigned)-1 >> 2) + 1;
71 if (state->size == 0 &&
gz_init(state) == -1)
76 while (strm->avail_in) {
77 put = strm->avail_in > max ? max : strm->avail_in;
78 writ = write(state->fd, strm->next_in, put);
83 strm->avail_in -= (unsigned)writ;
84 strm->next_in += writ;
92 if (strm->avail_in == 0)
103 if (strm->avail_out == 0 || (flush !=
Z_NO_FLUSH &&
105 while (strm->next_out > state->x.next) {
106 put = strm->next_out - state->x.next > (
int)max ? max :
107 (
unsigned)(strm->next_out - state->x.next);
108 writ = write(state->fd, state->x.next, put);
113 state->x.next += writ;
115 if (strm->avail_out == 0) {
116 strm->avail_out = state->size;
117 strm->next_out = state->out;
118 state->x.next = state->out;
123 have = strm->avail_out;
127 "internal error: deflate stream corrupt");
130 have -= strm->avail_out;
156 (
unsigned)len : state->size;
158 memset(state->in, 0, n);
162 strm->next_in = state->in;
181 if (state->size == 0 &&
gz_init(state) == -1)
187 if (
gz_zero(state, state->skip) == -1)
192 if (len < state->
size) {
197 if (state->strm.avail_in == 0)
198 state->strm.next_in = state->in;
199 have = (unsigned)((state->strm.next_in + state->strm.avail_in) -
201 copy = state->size -
have;
203 copy = (unsigned)len;
204 memcpy(state->in + have, buf, copy);
205 state->strm.avail_in += copy;
206 state->x.pos += copy;
207 buf = (
const char *)buf + copy;
221 unsigned n = (unsigned)-1;
224 state->strm.avail_in = n;
257 return (
int)
gz_write(state, buf, len);
277 if (size && len / size != nitems) {
283 return len ?
gz_write(state, buf, len) / size : 0;
289 unsigned char buf[1];
297 strm = &(state->strm);
306 if (
gz_zero(state, state->skip) == -1)
313 if (strm->avail_in == 0)
314 strm->next_in = state->in;
315 have = (unsigned)((strm->next_in + strm->avail_in) - state->in);
316 if (have < state->
size) {
317 state->in[
have] = (
unsigned char)c;
325 buf[0] = (
unsigned char)c;
347 if ((
int)len < 0 || (
unsigned)len != len) {
352 return put < len ? -1 : (
int)len;
355 #if defined(STDC) || defined(Z_HAVE_STDARG_H)
370 strm = &(state->strm);
377 if (state->size == 0 &&
gz_init(state) == -1)
383 if (
gz_zero(state, state->skip) == -1)
390 if (strm->avail_in == 0)
391 strm->next_in = state->in;
392 next = (
char *)(state->in + (strm->next_in - state->in) + strm->avail_in);
393 next[state->size - 1] = 0;
395 # ifdef HAS_vsprintf_void
396 (void)vsprintf(next, format, va);
397 for (len = 0; len < state->size; len++)
398 if (next[len] == 0)
break;
400 len = vsprintf(next, format, va);
403 # ifdef HAS_vsnprintf_void
404 (void)vsnprintf(next, state->size, format, va);
407 len = vsnprintf(next, state->size, format, va);
412 if (len == 0 || (
unsigned)len >= state->size || next[state->size - 1] != 0)
416 strm->avail_in += (unsigned)len;
418 if (strm->avail_in >= state->size) {
419 left = strm->avail_in - state->size;
420 strm->avail_in = state->size;
423 memmove(state->in, state->in + state->size, left);
424 strm->next_in = state->in;
425 strm->avail_in = left;
434 va_start(va, format);
435 ret = gzvprintf(file, format, va);
444 int a4,
int a5,
int a6,
int a7,
int a8,
int a9,
int a10,
445 int a11,
int a12,
int a13,
int a14,
int a15,
int a16,
446 int a17,
int a18,
int a19,
int a20) {
456 strm = &(state->strm);
459 if (
sizeof(
int) !=
sizeof(
void *))
467 if (state->size == 0 &&
gz_init(state) == -1)
473 if (
gz_zero(state, state->skip) == -1)
480 if (strm->avail_in == 0)
481 strm->next_in = state->in;
482 next = (
char *)(strm->next_in + strm->avail_in);
483 next[state->size - 1] = 0;
485 # ifdef HAS_sprintf_void
486 sprintf(next, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12,
487 a13, a14, a15, a16, a17, a18, a19, a20);
488 for (len = 0; len <
size; len++)
492 len = sprintf(next, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11,
493 a12, a13, a14, a15, a16, a17, a18, a19, a20);
496 # ifdef HAS_snprintf_void
497 snprintf(next, state->size, format, a1, a2, a3, a4, a5, a6, a7, a8, a9,
498 a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
501 len = snprintf(next, state->size, format, a1, a2, a3, a4, a5, a6, a7, a8,
502 a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
507 if (len == 0 || len >= state->size || next[state->size - 1] != 0)
511 strm->avail_in += len;
513 if (strm->avail_in >= state->size) {
514 left = strm->avail_in - state->size;
515 strm->avail_in = state->size;
518 memmove(state->in, state->in + state->size, left);
519 strm->next_in = state->in;
520 strm->avail_in = left;
547 if (
gz_zero(state, state->skip) == -1)
565 strm = &(state->strm);
568 if (state->mode !=
GZ_WRITE || state->err !=
Z_OK || state->direct)
572 if (level == state->level && strategy == state->strategy)
578 if (
gz_zero(state, state->skip) == -1)
589 state->level = level;
590 state->strategy = strategy;
611 if (
gz_zero(state, state->skip) == -1)
619 if (!state->direct) {
627 if (close(state->fd) == -1)
local z_size_t gz_write(gz_statep state, voidpc buf, z_size_t len)
int ZEXPORT deflateParams(z_streamp strm, int level, int strategy)
#define deflateInit2(strm, level, method, windowBits, memLevel, strategy)
int ZEXPORT gzsetparams(gzFile file, int level, int strategy)
typedef int(ZCALLBACK *close_file_func) OF((voidpf opaque
int ZEXPORT deflateEnd(z_streamp strm)
int ZEXPORT gzputs(gzFile file, const char *s)
int ZEXPORT gzwrite(gzFile file, voidpc buf, unsigned len)
local int gz_init(gz_statep state)
int ZEXPORT gzputc(gzFile file, int c)
constexpr const _Tp & max(const _Tp &a, const _Tp &b)
z_size_t ZEXPORT gzfwrite(voidpc buf, z_size_t size, z_size_t nitems, gzFile file)
local int gz_zero(gz_statep state, z_off64_t len)
int ZEXPORT gzclose_w(gzFile file)
local int gz_comp(gz_statep state, int flush)
int ZEXPORT deflate(z_streamp strm, int flush)
int ZEXPORTVA gzprintf(gzFile file, const char *format, int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11, int a12, int a13, int a14, int a15, int a16, int a17, int a18, int a19, int a20)
void ZLIB_INTERNAL gz_error(gz_statep, int, const char *)
int ZEXPORT gzflush(gzFile file, int flush)
int ZEXPORT deflateReset(z_streamp strm)