Lines Matching +full:- +full:state
1 /* gzwrite.c -- zlib functions for writing gzip files
2 * Copyright (C) 2004-2019 Mark Adler
9 /* Initialize state for writing a gzip file. Mark initialization by setting
10 state->size to non-zero. Return -1 on a memory allocation failure, or 0 on
12 local int gz_init(gz_statep state) { in gz_init() argument
14 z_streamp strm = &(state->strm); in gz_init()
17 state->in = (unsigned char *)malloc(state->want << 1); in gz_init()
18 if (state->in == NULL) { in gz_init()
19 gz_error(state, Z_MEM_ERROR, "out of memory"); in gz_init()
20 return -1; in gz_init()
23 /* only need output buffer and deflate state if compressing */ in gz_init()
24 if (!state->direct) { in gz_init()
26 state->out = (unsigned char *)malloc(state->want); in gz_init()
27 if (state->out == NULL) { in gz_init()
28 free(state->in); in gz_init()
29 gz_error(state, Z_MEM_ERROR, "out of memory"); in gz_init()
30 return -1; in gz_init()
34 strm->zalloc = Z_NULL; in gz_init()
35 strm->zfree = Z_NULL; in gz_init()
36 strm->opaque = Z_NULL; in gz_init()
37 ret = deflateInit2(strm, state->level, Z_DEFLATED, in gz_init()
38 MAX_WBITS + 16, DEF_MEM_LEVEL, state->strategy); in gz_init()
40 free(state->out); in gz_init()
41 free(state->in); in gz_init()
42 gz_error(state, Z_MEM_ERROR, "out of memory"); in gz_init()
43 return -1; in gz_init()
45 strm->next_in = NULL; in gz_init()
48 /* mark state as initialized */ in gz_init()
49 state->size = state->want; in gz_init()
52 if (!state->direct) { in gz_init()
53 strm->avail_out = state->size; in gz_init()
54 strm->next_out = state->out; in gz_init()
55 state->x.next = strm->next_out; in gz_init()
61 Return -1 if there is an error writing to the output file or if gz_init()
63 deflate() flush value. If flush is Z_FINISH, then the deflate() state is
64 reset to start a new gzip stream. If gz->direct is true, then simply write
66 local int gz_comp(gz_statep state, int flush) { in gz_comp() argument
68 unsigned have, put, max = ((unsigned)-1 >> 2) + 1; in gz_comp()
69 z_streamp strm = &(state->strm); in gz_comp()
72 if (state->size == 0 && gz_init(state) == -1) in gz_comp()
73 return -1; in gz_comp()
76 if (state->direct) { in gz_comp()
77 while (strm->avail_in) { in gz_comp()
78 put = strm->avail_in > max ? max : strm->avail_in; in gz_comp()
79 writ = write(state->fd, strm->next_in, put); in gz_comp()
81 gz_error(state, Z_ERRNO, zstrerror()); in gz_comp()
82 return -1; in gz_comp()
84 strm->avail_in -= (unsigned)writ; in gz_comp()
85 strm->next_in += writ; in gz_comp()
91 if (state->reset) { in gz_comp()
93 if (strm->avail_in == 0) in gz_comp()
96 state->reset = 0; in gz_comp()
104 if (strm->avail_out == 0 || (flush != Z_NO_FLUSH && in gz_comp()
106 while (strm->next_out > state->x.next) { in gz_comp()
107 put = strm->next_out - state->x.next > (int)max ? max : in gz_comp()
108 (unsigned)(strm->next_out - state->x.next); in gz_comp()
109 writ = write(state->fd, state->x.next, put); in gz_comp()
111 gz_error(state, Z_ERRNO, zstrerror()); in gz_comp()
112 return -1; in gz_comp()
114 state->x.next += writ; in gz_comp()
116 if (strm->avail_out == 0) { in gz_comp()
117 strm->avail_out = state->size; in gz_comp()
118 strm->next_out = state->out; in gz_comp()
119 state->x.next = state->out; in gz_comp()
124 have = strm->avail_out; in gz_comp()
127 gz_error(state, Z_STREAM_ERROR, in gz_comp()
129 return -1; in gz_comp()
131 have -= strm->avail_out; in gz_comp()
136 state->reset = 1; in gz_comp()
142 /* Compress len zeros to output. Return -1 on a write error or memory
144 local int gz_zero(gz_statep state, z_off64_t len) { in gz_zero() argument
147 z_streamp strm = &(state->strm); in gz_zero()
150 if (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1) in gz_zero()
151 return -1; in gz_zero()
156 n = GT_OFF(state->size) || (z_off64_t)state->size > len ? in gz_zero()
157 (unsigned)len : state->size; in gz_zero()
159 memset(state->in, 0, n); in gz_zero()
162 strm->avail_in = n; in gz_zero()
163 strm->next_in = state->in; in gz_zero()
164 state->x.pos += n; in gz_zero()
165 if (gz_comp(state, Z_NO_FLUSH) == -1) in gz_zero()
166 return -1; in gz_zero()
167 len -= n; in gz_zero()
174 local z_size_t gz_write(gz_statep state, voidpc buf, z_size_t len) { in gz_write() argument
182 if (state->size == 0 && gz_init(state) == -1) in gz_write()
186 if (state->seek) { in gz_write()
187 state->seek = 0; in gz_write()
188 if (gz_zero(state, state->skip) == -1) in gz_write()
193 if (len < state->size) { in gz_write()
198 if (state->strm.avail_in == 0) in gz_write()
199 state->strm.next_in = state->in; in gz_write()
200 have = (unsigned)((state->strm.next_in + state->strm.avail_in) - in gz_write()
201 state->in); in gz_write()
202 copy = state->size - have; in gz_write()
205 memcpy(state->in + have, buf, copy); in gz_write()
206 state->strm.avail_in += copy; in gz_write()
207 state->x.pos += copy; in gz_write()
209 len -= copy; in gz_write()
210 if (len && gz_comp(state, Z_NO_FLUSH) == -1) in gz_write()
216 if (state->strm.avail_in && gz_comp(state, Z_NO_FLUSH) == -1) in gz_write()
220 state->strm.next_in = (z_const Bytef *)buf; in gz_write()
222 unsigned n = (unsigned)-1; in gz_write()
225 state->strm.avail_in = n; in gz_write()
226 state->x.pos += n; in gz_write()
227 if (gz_comp(state, Z_NO_FLUSH) == -1) in gz_write()
229 len -= n; in gz_write()
237 /* -- see zlib.h -- */
239 gz_statep state; in gzwrite() local
244 state = (gz_statep)file; in gzwrite()
247 if (state->mode != GZ_WRITE || state->err != Z_OK) in gzwrite()
253 gz_error(state, Z_DATA_ERROR, "requested length does not fit in int"); in gzwrite()
258 return (int)gz_write(state, buf, len); in gzwrite()
261 /* -- see zlib.h -- */
265 gz_statep state; in gzfwrite() local
270 state = (gz_statep)file; in gzfwrite()
273 if (state->mode != GZ_WRITE || state->err != Z_OK) in gzfwrite()
276 /* compute bytes to read -- error on overflow */ in gzfwrite()
279 gz_error(state, Z_STREAM_ERROR, "request does not fit in a size_t"); in gzfwrite()
284 return len ? gz_write(state, buf, len) / size : 0; in gzfwrite()
287 /* -- see zlib.h -- */
291 gz_statep state; in gzputc() local
296 return -1; in gzputc()
297 state = (gz_statep)file; in gzputc()
298 strm = &(state->strm); in gzputc()
301 if (state->mode != GZ_WRITE || state->err != Z_OK) in gzputc()
302 return -1; in gzputc()
305 if (state->seek) { in gzputc()
306 state->seek = 0; in gzputc()
307 if (gz_zero(state, state->skip) == -1) in gzputc()
308 return -1; in gzputc()
311 /* try writing to input buffer for speed (state->size == 0 if buffer not in gzputc()
313 if (state->size) { in gzputc()
314 if (strm->avail_in == 0) in gzputc()
315 strm->next_in = state->in; in gzputc()
316 have = (unsigned)((strm->next_in + strm->avail_in) - state->in); in gzputc()
317 if (have < state->size) { in gzputc()
318 state->in[have] = (unsigned char)c; in gzputc()
319 strm->avail_in++; in gzputc()
320 state->x.pos++; in gzputc()
327 if (gz_write(state, buf, 1) != 1) in gzputc()
328 return -1; in gzputc()
332 /* -- see zlib.h -- */
335 gz_statep state; in gzputs() local
339 return -1; in gzputs()
340 state = (gz_statep)file; in gzputs()
343 if (state->mode != GZ_WRITE || state->err != Z_OK) in gzputs()
344 return -1; in gzputs()
349 gz_error(state, Z_STREAM_ERROR, "string length does not fit in int"); in gzputs()
350 return -1; in gzputs()
352 put = gz_write(state, s, len); in gzputs()
353 return put < len ? -1 : (int)len; in gzputs()
359 /* -- see zlib.h -- */
364 gz_statep state; in gzvprintf() local
370 state = (gz_statep)file; in gzvprintf()
371 strm = &(state->strm); in gzvprintf()
374 if (state->mode != GZ_WRITE || state->err != Z_OK) in gzvprintf()
378 if (state->size == 0 && gz_init(state) == -1) in gzvprintf()
379 return state->err; in gzvprintf()
382 if (state->seek) { in gzvprintf()
383 state->seek = 0; in gzvprintf()
384 if (gz_zero(state, state->skip) == -1) in gzvprintf()
385 return state->err; in gzvprintf()
388 /* do the printf() into the input buffer, put length in len -- the input in gzvprintf()
389 buffer is double-sized just for this function, so there is guaranteed to in gzvprintf()
390 be state->size bytes available after the current contents */ in gzvprintf()
391 if (strm->avail_in == 0) in gzvprintf()
392 strm->next_in = state->in; in gzvprintf()
393 next = (char *)(state->in + (strm->next_in - state->in) + strm->avail_in); in gzvprintf()
394 next[state->size - 1] = 0; in gzvprintf()
398 for (len = 0; len < state->size; len++) in gzvprintf()
405 (void)vsnprintf(next, state->size, format, va); in gzvprintf()
408 len = vsnprintf(next, state->size, format, va); in gzvprintf()
413 if (len == 0 || (unsigned)len >= state->size || next[state->size - 1] != 0) in gzvprintf()
417 strm->avail_in += (unsigned)len; in gzvprintf()
418 state->x.pos += len; in gzvprintf()
419 if (strm->avail_in >= state->size) { in gzvprintf()
420 left = strm->avail_in - state->size; in gzvprintf()
421 strm->avail_in = state->size; in gzvprintf()
422 if (gz_comp(state, Z_NO_FLUSH) == -1) in gzvprintf()
423 return state->err; in gzvprintf()
424 memmove(state->in, state->in + state->size, left); in gzvprintf()
425 strm->next_in = state->in; in gzvprintf()
426 strm->avail_in = left; in gzvprintf()
443 /* -- see zlib.h -- */
450 gz_statep state; in gzprintf() local
456 state = (gz_statep)file; in gzprintf()
457 strm = &(state->strm); in gzprintf()
464 if (state->mode != GZ_WRITE || state->err != Z_OK) in gzprintf()
468 if (state->size == 0 && gz_init(state) == -1) in gzprintf()
469 return state->error; in gzprintf()
472 if (state->seek) { in gzprintf()
473 state->seek = 0; in gzprintf()
474 if (gz_zero(state, state->skip) == -1) in gzprintf()
475 return state->error; in gzprintf()
478 /* do the printf() into the input buffer, put length in len -- the input in gzprintf()
479 buffer is double-sized just for this function, so there is guaranteed to in gzprintf()
480 be state->size bytes available after the current contents */ in gzprintf()
481 if (strm->avail_in == 0) in gzprintf()
482 strm->next_in = state->in; in gzprintf()
483 next = (char *)(strm->next_in + strm->avail_in); in gzprintf()
484 next[state->size - 1] = 0; in gzprintf()
498 snprintf(next, state->size, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, in gzprintf()
502 len = snprintf(next, state->size, format, a1, a2, a3, a4, a5, a6, a7, a8, in gzprintf()
508 if (len == 0 || len >= state->size || next[state->size - 1] != 0) in gzprintf()
512 strm->avail_in += len; in gzprintf()
513 state->x.pos += len; in gzprintf()
514 if (strm->avail_in >= state->size) { in gzprintf()
515 left = strm->avail_in - state->size; in gzprintf()
516 strm->avail_in = state->size; in gzprintf()
517 if (gz_comp(state, Z_NO_FLUSH) == -1) in gzprintf()
518 return state->err; in gzprintf()
519 memmove(state->in, state->in + state->size, left); in gzprintf()
520 strm->next_in = state->in; in gzprintf()
521 strm->avail_in = left; in gzprintf()
528 /* -- see zlib.h -- */
530 gz_statep state; in gzflush() local
535 state = (gz_statep)file; in gzflush()
538 if (state->mode != GZ_WRITE || state->err != Z_OK) in gzflush()
546 if (state->seek) { in gzflush()
547 state->seek = 0; in gzflush()
548 if (gz_zero(state, state->skip) == -1) in gzflush()
549 return state->err; in gzflush()
553 (void)gz_comp(state, flush); in gzflush()
554 return state->err; in gzflush()
557 /* -- see zlib.h -- */
559 gz_statep state; in gzsetparams() local
565 state = (gz_statep)file; in gzsetparams()
566 strm = &(state->strm); in gzsetparams()
569 if (state->mode != GZ_WRITE || state->err != Z_OK || state->direct) in gzsetparams()
573 if (level == state->level && strategy == state->strategy) in gzsetparams()
577 if (state->seek) { in gzsetparams()
578 state->seek = 0; in gzsetparams()
579 if (gz_zero(state, state->skip) == -1) in gzsetparams()
580 return state->err; in gzsetparams()
584 if (state->size) { in gzsetparams()
586 if (strm->avail_in && gz_comp(state, Z_BLOCK) == -1) in gzsetparams()
587 return state->err; in gzsetparams()
590 state->level = level; in gzsetparams()
591 state->strategy = strategy; in gzsetparams()
595 /* -- see zlib.h -- */
598 gz_statep state; in gzclose_w() local
603 state = (gz_statep)file; in gzclose_w()
606 if (state->mode != GZ_WRITE) in gzclose_w()
610 if (state->seek) { in gzclose_w()
611 state->seek = 0; in gzclose_w()
612 if (gz_zero(state, state->skip) == -1) in gzclose_w()
613 ret = state->err; in gzclose_w()
617 if (gz_comp(state, Z_FINISH) == -1) in gzclose_w()
618 ret = state->err; in gzclose_w()
619 if (state->size) { in gzclose_w()
620 if (!state->direct) { in gzclose_w()
621 (void)deflateEnd(&(state->strm)); in gzclose_w()
622 free(state->out); in gzclose_w()
624 free(state->in); in gzclose_w()
626 gz_error(state, Z_OK, NULL); in gzclose_w()
627 free(state->path); in gzclose_w()
628 if (close(state->fd) == -1) in gzclose_w()
630 free(state); in gzclose_w()