21 z_streamp strm = &(state->strm);
24 state->in = (
unsigned char *)malloc(state->want << 1);
25 if (state->in == NULL) {
33 state->out = (
unsigned char *)malloc(state->want);
34 if (state->out == NULL) {
56 state->size = state->want;
60 strm->avail_out = state->size;
61 strm->next_out = state->out;
62 state->x.next = strm->next_out;
78 unsigned have, put, max = ((
unsigned)-1 >> 2) + 1;
79 z_streamp strm = &(state->strm);
82 if (state->size == 0 && gz_init(state) == -1)
87 while (strm->avail_in) {
88 put = strm->avail_in > max ? max : strm->avail_in;
89 writ = write(state->fd, strm->next_in, put);
94 strm->avail_in -= (
unsigned)writ;
95 strm->next_in += writ;
105 if (strm->avail_out == 0 || (flush !=
Z_NO_FLUSH &&
107 while (strm->next_out > state->x.next) {
108 put = strm->next_out - state->x.next > (
int)max ? max :
109 (
unsigned)(strm->next_out - state->x.next);
110 writ = write(state->fd, state->x.next, put);
115 state->x.next += writ;
117 if (strm->avail_out == 0) {
118 strm->avail_out = state->size;
119 strm->next_out = state->out;
120 state->x.next = state->out;
125 have = strm->avail_out;
126 ret = deflate(strm, flush);
129 "internal error: deflate stream corrupt");
132 have -= strm->avail_out;
151 z_streamp strm = &(state->strm);
154 if (strm->avail_in && gz_comp(state,
Z_NO_FLUSH) == -1)
161 (
unsigned)len : state->size;
163 memset(state->in, 0, n);
167 strm->next_in = state->in;
190 if (state->size == 0 && gz_init(state) == -1)
196 if (gz_zero(state, state->skip) == -1)
201 if (len < state->size) {
206 if (state->strm.avail_in == 0)
207 state->strm.next_in = state->in;
208 have = (
unsigned)((state->strm.next_in + state->strm.avail_in) -
210 copy = state->size - have;
213 memcpy(state->in + have, buf, copy);
214 state->strm.avail_in += copy;
215 state->x.pos += copy;
216 buf = (
const char *)buf + copy;
224 if (state->strm.avail_in && gz_comp(state,
Z_NO_FLUSH) == -1)
228 state->strm.next_in = (
z_const Bytef *)buf;
230 unsigned n = (
unsigned)-1;
233 state->strm.avail_in = n;
256 state = (gz_statep)file;
265 gz_error(state,
Z_DATA_ERROR,
"requested length does not fit in int");
270 return (
int)gz_write(state, buf, len);
286 state = (gz_statep)file;
294 if (size && len / size != nitems) {
295 gz_error(state,
Z_STREAM_ERROR,
"request does not fit in a size_t");
300 return len ? gz_write(state, buf, len) / size : 0;
309 unsigned char buf[1];
316 state = (gz_statep)file;
317 strm = &(state->strm);
326 if (gz_zero(state, state->skip) == -1)
333 if (strm->avail_in == 0)
334 strm->next_in = state->in;
335 have = (
unsigned)((strm->next_in + strm->avail_in) - state->in);
336 if (have < state->size) {
337 state->in[have] = (
unsigned char)c;
345 buf[0] = (
unsigned char)c;
346 if (gz_write(state, buf, 1) != 1)
363 state = (gz_statep)file;
371 ret = gz_write(state, str, len);
372 return ret == 0 && len != 0 ? -1 : ret;
375 #if defined(STDC
) || defined(Z_HAVE_STDARG_H) 398 if (state
->size == 0 && gz_init(state) == -1)
404 if (gz_zero(state, state
->skip) == -1)
414 next[state
->size - 1] = 0;
416 # ifdef HAS_vsprintf_void 417 (
void)vsprintf(next, format, va);
418 for (len = 0; len < state->size; len++)
419 if (next[len] == 0)
break;
421 len = vsprintf(next, format, va);
424 # ifdef HAS_vsnprintf_void 425 (
void)vsnprintf(next, state->size, format, va);
428 len = vsnprintf(next, state->size, format, va);
433 if (len == 0 || (
unsigned)len >= state
->size || next[state
->size - 1] != 0)
444 memcpy(state->in, state->in + state->size, left);
456 va_start(va, format);
457 ret = gzvprintf(file, format, va);
465 int ZEXPORTVA gzprintf (file, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10,
466 a11, a12, a13, a14, a15, a16, a17, a18, a19, a20)
469 int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10,
470 a11, a12, a13, a14, a15, a16, a17, a18, a19, a20;
479 return Z_STREAM_ERROR;
480 state = (gz_statep)file;
481 strm = &(state->strm);
484 if (
sizeof(
int) !=
sizeof(
void *))
485 return Z_STREAM_ERROR;
488 if (state->mode != GZ_WRITE || state->err != Z_OK)
489 return Z_STREAM_ERROR;
492 if (state->size == 0 && gz_init(state) == -1)
498 if (gz_zero(state, state->skip) == -1)
505 if (strm->avail_in == 0)
506 strm->next_in = state->in;
507 next = (
char *)(strm->next_in + strm->avail_in);
508 next[state->size - 1] = 0;
510 # ifdef HAS_sprintf_void 511 sprintf(next, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12,
512 a13, a14, a15, a16, a17, a18, a19, a20);
513 for (len = 0; len < size; len++)
517 len = sprintf(next, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11,
518 a12, a13, a14, a15, a16, a17, a18, a19, a20);
521 # ifdef HAS_snprintf_void 522 snprintf(next, state->size, format, a1, a2, a3, a4, a5, a6, a7, a8, a9,
523 a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
526 len = snprintf(next, state->size, format, a1, a2, a3, a4, a5, a6, a7, a8,
527 a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
532 if (len == 0 || len >= state->size || next[state->size - 1] != 0)
536 strm->avail_in += len;
538 if (strm->avail_in >= state->size) {
539 left = strm->avail_in - state->size;
540 strm->avail_in = state->size;
541 if (gz_comp(state, Z_NO_FLUSH) == -1)
543 memcpy(state->in, state->in + state->size, left);
544 strm->next_in = state->in;
545 strm->avail_in = left;
562 state = (gz_statep)file;
575 if (gz_zero(state, state->skip) == -1)
580 (
void)gz_comp(state, flush);
596 state = (gz_statep)file;
597 strm = &(state->strm);
604 if (level == state->level && strategy == state->strategy)
610 if (gz_zero(state, state->skip) == -1)
617 if (strm->avail_in && gz_comp(state,
Z_BLOCK) == -1)
619 deflateParams(strm, level, strategy);
621 state->level = level;
622 state->strategy = strategy;
636 state = (gz_statep)file;
645 if (gz_zero(state, state->skip) == -1)
653 if (!state->direct) {
654 (
void)deflateEnd(&(state->strm));
659 gz_error(state,
Z_OK, NULL);
661 if (close(state->fd) == -1)
local z_size_t gz_write(gz_statep state, voidpc buf, z_size_t len)
#define deflateInit2(strm, level, method, windowBits, memLevel, strategy)
int ZEXPORT gzsetparams(gzFile file, int level, int strategy)
int ZEXPORT gzwrite(gzFile file, voidpc buf, unsigned len)
local int gz_init(gz_statep state)
int ZEXPORT gzputc(gzFile file, int c)
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)
int ZEXPORT gzputs(gzFile file, const char *str)
local int gz_comp(gz_statep state, int flush)
int ZEXPORT gzflush(gzFile file, int flush)