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) {
68 z_streamp strm = &(state->strm);
71 if (state->size == 0 && gz_init(state) == -1)
75 if (state->direct) {
78 writ = write(state->fd, strm->next_in, put);
80 gz_error(state, Z_ERRNO, zstrerror());
90 if (state->reset) {
95 state->reset = 0;
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);
110 gz_error(state, Z_ERRNO, zstrerror());
113 state->x.next += writ;
116 strm->avail_out = state->size;
117 strm->next_out = state->out;
118 state->x.next = state->out;
126 gz_error(state, Z_STREAM_ERROR,
135 state->reset = 1;
143 local int gz_zero(gz_statep state, z_off64_t len) {
146 z_streamp strm = &(state->strm);
149 if (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1)
155 n = GT_OFF(state->size) || (z_off64_t)state->size > len ?
156 (unsigned)len : state->size;
158 memset(state->in, 0, n);
162 strm->next_in = state->in;
163 state->x.pos += n;
164 if (gz_comp(state, Z_NO_FLUSH) == -1)
173 local z_size_t gz_write(gz_statep state, voidpc buf, z_size_t len) {
181 if (state->size == 0 && gz_init(state) == -1)
185 if (state->seek) {
186 state->seek = 0;
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) -
200 state->in);
201 copy = state->size - have;
204 memcpy(state->in + have, buf, copy);
205 state->strm.avail_in += copy;
206 state->x.pos += copy;
209 if (len && gz_comp(state, Z_NO_FLUSH) == -1)
215 if (state->strm.avail_in && gz_comp(state, Z_NO_FLUSH) == -1)
219 state->strm.next_in = (z_const Bytef *)buf;
224 state->strm.avail_in = n;
225 state->x.pos += n;
226 if (gz_comp(state, Z_NO_FLUSH) == -1)
238 gz_statep state;
243 state = (gz_statep)file;
246 if (state->mode != GZ_WRITE || state->err != Z_OK)
252 gz_error(state, Z_DATA_ERROR, "requested length does not fit in int");
257 return (int)gz_write(state, buf, len);
264 gz_statep state;
269 state = (gz_statep)file;
272 if (state->mode != GZ_WRITE || state->err != Z_OK)
278 gz_error(state, Z_STREAM_ERROR, "request does not fit in a size_t");
283 return len ? gz_write(state, buf, len) / size : 0;
290 gz_statep state;
296 state = (gz_statep)file;
297 strm = &(state->strm);
300 if (state->mode != GZ_WRITE || state->err != Z_OK)
304 if (state->seek) {
305 state->seek = 0;
306 if (gz_zero(state, state->skip) == -1)
310 /* try writing to input buffer for speed (state->size == 0 if buffer not
312 if (state->size) {
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;
319 state->x.pos++;
326 if (gz_write(state, buf, 1) != 1)
334 gz_statep state;
339 state = (gz_statep)file;
342 if (state->mode != GZ_WRITE || state->err != Z_OK)
348 gz_error(state, Z_STREAM_ERROR, "string length does not fit in int");
351 put = gz_write(state, s, len);
363 gz_statep state;
369 state = (gz_statep)file;
370 strm = &(state->strm);
373 if (state->mode != GZ_WRITE || state->err != Z_OK)
377 if (state->size == 0 && gz_init(state) == -1)
378 return state->err;
381 if (state->seek) {
382 state->seek = 0;
383 if (gz_zero(state, state->skip) == -1)
384 return state->err;
389 be state->size bytes available after the current contents */
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;
397 for (len = 0; len < state->size; len++)
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)
417 state->x.pos += len;
418 if (strm->avail_in >= state->size) {
419 left = strm->avail_in - state->size;
420 strm->avail_in = state->size;
421 if (gz_comp(state, Z_NO_FLUSH) == -1)
422 return state->err;
423 memmove(state->in, state->in + state->size, left);
424 strm->next_in = state->in;
449 gz_statep state;
455 state = (gz_statep)file;
456 strm = &(state->strm);
463 if (state->mode != GZ_WRITE || state->err != Z_OK)
467 if (state->size == 0 && gz_init(state) == -1)
468 return state->error;
471 if (state->seek) {
472 state->seek = 0;
473 if (gz_zero(state, state->skip) == -1)
474 return state->error;
479 be state->size bytes available after the current contents */
481 strm->next_in = state->in;
483 next[state->size - 1] = 0;
497 snprintf(next, state->size, format, a1, a2, a3, a4, a5, a6, a7, a8, a9,
501 len = snprintf(next, state->size, format, a1, a2, a3, a4, a5, a6, a7, a8,
507 if (len == 0 || len >= state->size || next[state->size - 1] != 0)
512 state->x.pos += len;
513 if (strm->avail_in >= state->size) {
514 left = strm->avail_in - state->size;
515 strm->avail_in = state->size;
516 if (gz_comp(state, Z_NO_FLUSH) == -1)
517 return state->err;
518 memmove(state->in, state->in + state->size, left);
519 strm->next_in = state->in;
529 gz_statep state;
534 state = (gz_statep)file;
537 if (state->mode != GZ_WRITE || state->err != Z_OK)
545 if (state->seek) {
546 state->seek = 0;
547 if (gz_zero(state, state->skip) == -1)
548 return state->err;
552 (void)gz_comp(state, flush);
553 return state->err;
558 gz_statep state;
564 state = (gz_statep)file;
565 strm = &(state->strm);
568 if (state->mode != GZ_WRITE || state->err != Z_OK || state->direct)
572 if (level == state->level && strategy == state->strategy)
576 if (state->seek) {
577 state->seek = 0;
578 if (gz_zero(state, state->skip) == -1)
579 return state->err;
583 if (state->size) {
585 if (strm->avail_in && gz_comp(state, Z_BLOCK) == -1)
586 return state->err;
589 state->level = level;
590 state->strategy = strategy;
597 gz_statep state;
602 state = (gz_statep)file;
605 if (state->mode != GZ_WRITE)
609 if (state->seek) {
610 state->seek = 0;
611 if (gz_zero(state, state->skip) == -1)
612 ret = state->err;
616 if (gz_comp(state, Z_FINISH) == -1)
617 ret = state->err;
618 if (state->size) {
619 if (!state->direct) {
620 (void)deflateEnd(&(state->strm));
621 free(state->out);
623 free(state->in);
625 gz_error(state, Z_OK, NULL);
626 free(state->path);
627 if (close(state->fd) == -1)
629 free(state);