Home | History | Annotate | Download | only in zlib

Lines Matching refs:state

8 /* Initialize state for writing a gzip file.  Mark initialization by setting
9 state->size to non-zero. Return -1 on a memory allocation failure, or 0 on
11 local int gz_init(gz_statep state) {
13 z_streamp strm = &(state->strm);
16 state->in = (unsigned char *)malloc(state->want << 1);
17 if (state->in == NULL) {
18 gz_error(state, Z_MEM_ERROR, "out of memory");
22 /* only need output buffer and deflate state if compressing */
23 if (!state->direct) {
25 state->out = (unsigned char *)malloc(state->want);
26 if (state->out == NULL) {
27 free(state->in);
28 gz_error(state, Z_MEM_ERROR, "out of memory");
36 ret = deflateInit2(strm, state->level, Z_DEFLATED,
37 MAX_WBITS + 16, DEF_MEM_LEVEL, state->strategy);
39 free(state->out);
40 free(state->in);
41 gz_error(state, Z_MEM_ERROR, "out of memory");
47 /* mark state as initialized */
48 state->size = state->want;
51 if (!state->direct) {
52 strm->avail_out = state->size;
53 strm->next_out = state->out;
54 state->x.next = strm->next_out;
62 deflate() flush value. If flush is Z_FINISH, then the deflate() state is
65 local int gz_comp(gz_statep state, int flush) {
70 z_streamp strm = &(state->strm);
73 if (state->size == 0 && gz_init(state) == -1)
77 if (state->direct) {
80 writ = write(state->fd, strm->next_in, put);
82 gz_error(state, Z_ERRNO, zstrerror());
92 if (state->reset) {
97 state->reset = 0;
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);
112 gz_error(state, Z_ERRNO, zstrerror());
115 state->x.next += writ;
118 strm->avail_out = state->size;
119 strm->next_out = state->out;
120 state->x.next = state->out;
128 gz_error(state, Z_STREAM_ERROR,
137 state->reset = 1;
145 local int gz_zero(gz_statep state, z_off64_t len) {
148 z_streamp strm = &(state->strm);
151 if (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1)
157 n = GT_OFF(state->size) || (z_off64_t)state->size > len ?
158 (unsigned)len : state->size;
160 memset(state->in, 0, n);
164 strm->next_in = state->in;
165 state->x.pos += n;
166 if (gz_comp(state, Z_NO_FLUSH) == -1)
175 local z_size_t gz_write(gz_statep state, voidpc buf, z_size_t len) {
183 if (state->size == 0 && gz_init(state) == -1)
187 if (state->seek) {
188 state->seek = 0;
189 if (gz_zero(state, state->skip) == -1)
194 if (len < state->size) {
199 if (state->strm.avail_in == 0)
200 state->strm.next_in = state->in;
201 have = (unsigned)((state->strm.next_in + state->strm.avail_in) -
202 state->in);
203 copy = state->size - have;
206 memcpy(state->in + have, buf, copy);
207 state->strm.avail_in += copy;
208 state->x.pos += copy;
211 if (len && gz_comp(state, Z_NO_FLUSH) == -1)
217 if (state->strm.avail_in && gz_comp(state, Z_NO_FLUSH) == -1)
221 state->strm.next_in = __UNCONST(buf);
226 state->strm.avail_in = n;
227 state->x.pos += n;
228 if (gz_comp(state, Z_NO_FLUSH) == -1)
240 gz_statep state;
245 state = (gz_statep)file;
248 if (state->mode != GZ_WRITE || state->err != Z_OK)
254 gz_error(state, Z_DATA_ERROR, "requested length does not fit in int");
259 return (int)gz_write(state, buf, len);
266 gz_statep state;
271 state = (gz_statep)file;
274 if (state->mode != GZ_WRITE || state->err != Z_OK)
280 gz_error(state, Z_STREAM_ERROR, "request does not fit in a size_t");
285 return len ? gz_write(state, buf, len) / size : 0;
292 gz_statep state;
298 state = (gz_statep)file;
299 strm = &(state->strm);
302 if (state->mode != GZ_WRITE || state->err != Z_OK)
306 if (state->seek) {
307 state->seek = 0;
308 if (gz_zero(state, state->skip) == -1)
312 /* try writing to input buffer for speed (state->size == 0 if buffer not
314 if (state->size) {
316 strm->next_in = state->in;
317 have = (unsigned)((strm->next_in + strm->avail_in) - state->in);
318 if (have < state->size) {
319 state->in[have] = (unsigned char)c;
321 state->x.pos++;
328 if (gz_write(state, buf, 1) != 1)
336 gz_statep state;
341 state = (gz_statep)file;
344 if (state->mode != GZ_WRITE || state->err != Z_OK)
350 gz_error(state, Z_STREAM_ERROR, "string length does not fit in int");
353 put = gz_write(state, s, len);
365 gz_statep state;
371 state = (gz_statep)file;
372 strm = &(state->strm);
375 if (state->mode != GZ_WRITE || state->err != Z_OK)
379 if (state->size == 0 && gz_init(state) == -1)
380 return state->err;
383 if (state->seek) {
384 state->seek = 0;
385 if (gz_zero(state, state->skip) == -1)
386 return state->err;
391 be state->size bytes available after the current contents */
393 strm->next_in = state->in;
394 next = (char *)(state->in + (strm->next_in - state->in) + strm->avail_in);
395 next[state->size - 1] = 0;
399 for (len = 0; len < state->size; len++)
406 (void)vsnprintf(next, state->size, format, va);
409 len = vsnprintf(next, state->size, format, va);
414 if (len == 0 || (unsigned)len >= state->size || next[state->size - 1] != 0)
419 state->x.pos += len;
420 if (strm->avail_in >= state->size) {
421 left = strm->avail_in - state->size;
422 strm->avail_in = state->size;
423 if (gz_comp(state, Z_NO_FLUSH) == -1)
424 return state->err;
425 memmove(state->in, state->in + state->size, left);
426 strm->next_in = state->in;
451 gz_statep state;
457 state = (gz_statep)file;
458 strm = &(state->strm);
465 if (state->mode != GZ_WRITE || state->err != Z_OK)
469 if (state->size == 0 && gz_init(state) == -1)
470 return state->error;
473 if (state->seek) {
474 state->seek = 0;
475 if (gz_zero(state, state->skip) == -1)
476 return state->error;
481 be state->size bytes available after the current contents */
483 strm->next_in = state->in;
485 next[state->size - 1] = 0;
499 snprintf(next, state->size, format, a1, a2, a3, a4, a5, a6, a7, a8, a9,
503 len = snprintf(next, state->size, format, a1, a2, a3, a4, a5, a6, a7, a8,
509 if (len == 0 || len >= state->size || next[state->size - 1] != 0)
514 state->x.pos += len;
515 if (strm->avail_in >= state->size) {
516 left = strm->avail_in - state->size;
517 strm->avail_in = state->size;
518 if (gz_comp(state, Z_NO_FLUSH) == -1)
519 return state->err;
520 memmove(state->in, state->in + state->size, left);
521 state->in;
531 gz_statep state;
536 state = (gz_statep)file;
539 if (state->mode != GZ_WRITE || state->err != Z_OK)
547 if (state->seek) {
548 state->seek = 0;
549 if (gz_zero(state, state->skip) == -1)
550 return state->err;
554 (void)gz_comp(state, flush);
555 return state->err;
560 gz_statep state;
566 state = (gz_statep)file;
567 strm = &(state->strm);
570 if (state->mode != GZ_WRITE || state->err != Z_OK || state->direct)
574 if (level == state->level && strategy == state->strategy)
578 if (state->seek) {
579 state->seek = 0;
580 if (gz_zero(state, state->skip) == -1)
581 return state->err;
585 if (state->size) {
587 if (strm->avail_in && gz_comp(state, Z_BLOCK) == -1)
588 return state->err;
591 state->level = level;
592 state->strategy = strategy;
599 gz_statep state;
604 state = (gz_statep)file;
607 if (state->mode != GZ_WRITE)
611 if (state->seek) {
612 state->seek = 0;
613 if (gz_zero(state, state->skip) == -1)
614 ret = state->err;
618 if (gz_comp(state, Z_FINISH) == -1)
619 ret = state->err;
620 if (state->size) {
621 if (!state->direct) {
622 (void)deflateEnd(&(state->strm));
623 free(state->out);
625 free(state->in);
627 gz_error(state, Z_OK, NULL);
628 free(state->path);
629 if (close(state->fd) == -1)
631 free(state);