Lines Matching +full:- +full:state

1 /* gzlib.c -- zlib functions common to reading and writing gzip files
2 * Copyright (C) 2004-2024 Mark Adler
13 #if defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0
22 /* Map the Windows error number in ERROR to a locale-dependent error message
47 && msgbuf[chars - 2] == '\r' && msgbuf[chars - 1] == '\n') { in gz_strwinerror()
48 chars -= 2; in gz_strwinerror()
52 if (chars > sizeof (buf) - 1) { in gz_strwinerror()
53 chars = sizeof (buf) - 1; in gz_strwinerror()
70 /* Reset gzip file state */
71 local void gz_reset(gz_statep state) { in gz_reset() argument
72 state->x.have = 0; /* no output data available */ in gz_reset()
73 if (state->mode == GZ_READ) { /* for reading ... */ in gz_reset()
74 state->eof = 0; /* not at end of file */ in gz_reset()
75 state->past = 0; /* have not read past end yet */ in gz_reset()
76 state->how = LOOK; /* look for gzip header */ in gz_reset()
79 state->reset = 0; /* no deflateReset pending */ in gz_reset()
80 state->seek = 0; /* no seek request pending */ in gz_reset()
81 gz_error(state, Z_OK, NULL); /* clear error */ in gz_reset()
82 state->x.pos = 0; /* no uncompressed data yet */ in gz_reset()
83 state->strm.avail_in = 0; /* no input data yet */ in gz_reset()
88 gz_statep state; in gz_open() local
103 state = (gz_statep)malloc(sizeof(gz_state)); in gz_open()
104 if (state == NULL) in gz_open()
106 state->size = 0; /* no buffers allocated yet */ in gz_open()
107 state->want = GZBUFSIZE; /* requested buffer size */ in gz_open()
108 state->msg = NULL; /* no error message yet */ in gz_open()
111 state->mode = GZ_NONE; in gz_open()
112 state->level = Z_DEFAULT_COMPRESSION; in gz_open()
113 state->strategy = Z_DEFAULT_STRATEGY; in gz_open()
114 state->direct = 0; in gz_open()
117 state->level = *mode - '0'; in gz_open()
121 state->mode = GZ_READ; in gz_open()
125 state->mode = GZ_WRITE; in gz_open()
128 state->mode = GZ_APPEND; in gz_open()
132 free(state); in gz_open()
134 case 'b': /* ignore -- will request binary anyway */ in gz_open()
147 state->strategy = Z_FILTERED; in gz_open()
150 state->strategy = Z_HUFFMAN_ONLY; in gz_open()
153 state->strategy = Z_RLE; in gz_open()
156 state->strategy = Z_FIXED; in gz_open()
159 state->direct = 1; in gz_open()
168 if (state->mode == GZ_NONE) { in gz_open()
169 free(state); in gz_open()
174 if (state->mode == GZ_READ) { in gz_open()
175 if (state->direct) { in gz_open()
176 free(state); in gz_open()
179 state->direct = 1; /* for empty file */ in gz_open()
184 if (fd == -2) { in gz_open()
186 if (len == (z_size_t)-1) in gz_open()
192 state->path = (char *)malloc(len + 1); in gz_open()
193 if (state->path == NULL) { in gz_open()
194 free(state); in gz_open()
198 if (fd == -2) in gz_open()
200 wcstombs(state->path, path, len + 1); in gz_open()
202 *(state->path) = 0; in gz_open()
206 (void)snprintf(state->path, len + 1, "%s", (const char *)path); in gz_open()
208 strcpy(state->path, path); in gz_open()
222 (state->mode == GZ_READ ? in gz_open()
228 (state->mode == GZ_WRITE ? in gz_open()
233 state->fd = fd > -1 ? fd : ( in gz_open()
235 fd == -2 ? _wopen(path, oflag, 0666) : in gz_open()
238 if (state->fd == -1) { in gz_open()
239 free(state->path); in gz_open()
240 free(state); in gz_open()
243 if (state->mode == GZ_APPEND) { in gz_open()
244 LSEEK(state->fd, 0, SEEK_END); /* so gzoffset() is correct */ in gz_open()
245 state->mode = GZ_WRITE; /* simplify later checks */ in gz_open()
249 if (state->mode == GZ_READ) { in gz_open()
250 state->start = LSEEK(state->fd, 0, SEEK_CUR); in gz_open()
251 if (state->start == -1) state->start = 0; in gz_open()
255 gz_reset(state); in gz_open()
258 return (gzFile)state; in gz_open()
261 /* -- see zlib.h -- */
263 return gz_open(path, -1, mode); in gzopen()
266 /* -- see zlib.h -- */
268 return gz_open(path, -1, mode); in gzopen64()
271 /* -- see zlib.h -- */
276 if (fd == -1 || (path = (char *)malloc(7 + 3 * sizeof(int))) == NULL) in gzdopen()
288 /* -- see zlib.h -- */
291 return gz_open(path, -2, mode); in gzopen_w()
295 /* -- see zlib.h -- */
297 gz_statep state; in gzbuffer() local
301 return -1; in gzbuffer()
302 state = (gz_statep)file; in gzbuffer()
303 if (state->mode != GZ_READ && state->mode != GZ_WRITE) in gzbuffer()
304 return -1; in gzbuffer()
307 if (state->size != 0) in gzbuffer()
308 return -1; in gzbuffer()
312 return -1; /* need to be able to double it */ in gzbuffer()
315 state->want = size; in gzbuffer()
319 /* -- see zlib.h -- */
321 gz_statep state; in gzrewind() local
325 return -1; in gzrewind()
326 state = (gz_statep)file; in gzrewind()
329 if (state->mode != GZ_READ || in gzrewind()
330 (state->err != Z_OK && state->err != Z_BUF_ERROR)) in gzrewind()
331 return -1; in gzrewind()
334 if (LSEEK(state->fd, state->start, SEEK_SET) == -1) in gzrewind()
335 return -1; in gzrewind()
336 gz_reset(state); in gzrewind()
340 /* -- see zlib.h -- */
344 gz_statep state; in gzseek64() local
348 return -1; in gzseek64()
349 state = (gz_statep)file; in gzseek64()
350 if (state->mode != GZ_READ && state->mode != GZ_WRITE) in gzseek64()
351 return -1; in gzseek64()
354 if (state->err != Z_OK && state->err != Z_BUF_ERROR) in gzseek64()
355 return -1; in gzseek64()
359 return -1; in gzseek64()
363 offset -= state->x.pos; in gzseek64()
364 else if (state->seek) in gzseek64()
365 offset += state->skip; in gzseek64()
366 state->seek = 0; in gzseek64()
369 if (state->mode == GZ_READ && state->how == COPY && in gzseek64()
370 state->x.pos + offset >= 0) { in gzseek64()
371 ret = LSEEK(state->fd, offset - (z_off64_t)state->x.have, SEEK_CUR); in gzseek64()
372 if (ret == -1) in gzseek64()
373 return -1; in gzseek64()
374 state->x.have = 0; in gzseek64()
375 state->eof = 0; in gzseek64()
376 state->past = 0; in gzseek64()
377 state->seek = 0; in gzseek64()
378 gz_error(state, Z_OK, NULL); in gzseek64()
379 state->strm.avail_in = 0; in gzseek64()
380 state->x.pos += offset; in gzseek64()
381 return state->x.pos; in gzseek64()
386 if (state->mode != GZ_READ) /* writing -- can't go backwards */ in gzseek64()
387 return -1; in gzseek64()
388 offset += state->x.pos; in gzseek64()
390 return -1; in gzseek64()
391 if (gzrewind(file) == -1) /* rewind, then skip to offset */ in gzseek64()
392 return -1; in gzseek64()
396 if (state->mode == GZ_READ) { in gzseek64()
397 n = GT_OFF(state->x.have) || (z_off64_t)state->x.have > offset ? in gzseek64()
398 (unsigned)offset : state->x.have; in gzseek64()
399 state->x.have -= n; in gzseek64()
400 state->x.next += n; in gzseek64()
401 state->x.pos += n; in gzseek64()
402 offset -= n; in gzseek64()
407 state->seek = 1; in gzseek64()
408 state->skip = offset; in gzseek64()
410 return state->x.pos + offset; in gzseek64()
413 /* -- see zlib.h -- */
418 return ret == (z_off_t)ret ? (z_off_t)ret : -1; in gzseek()
421 /* -- see zlib.h -- */
423 gz_statep state; in gztell64() local
427 return -1; in gztell64()
428 state = (gz_statep)file; in gztell64()
429 if (state->mode != GZ_READ && state->mode != GZ_WRITE) in gztell64()
430 return -1; in gztell64()
433 return state->x.pos + (state->seek ? state->skip : 0); in gztell64()
436 /* -- see zlib.h -- */
441 return ret == (z_off_t)ret ? (z_off_t)ret : -1; in gztell()
444 /* -- see zlib.h -- */
447 gz_statep state; in gzoffset64() local
451 return -1; in gzoffset64()
452 state = (gz_statep)file; in gzoffset64()
453 if (state->mode != GZ_READ && state->mode != GZ_WRITE) in gzoffset64()
454 return -1; in gzoffset64()
457 offset = LSEEK(state->fd, 0, SEEK_CUR); in gzoffset64()
458 if (offset == -1) in gzoffset64()
459 return -1; in gzoffset64()
460 if (state->mode == GZ_READ) /* reading */ in gzoffset64()
461 offset -= state->strm.avail_in; /* don't count buffered input */ in gzoffset64()
465 /* -- see zlib.h -- */
470 return ret == (z_off_t)ret ? (z_off_t)ret : -1; in gzoffset()
473 /* -- see zlib.h -- */
475 gz_statep state; in gzeof() local
480 state = (gz_statep)file; in gzeof()
481 if (state->mode != GZ_READ && state->mode != GZ_WRITE) in gzeof()
484 /* return end-of-file state */ in gzeof()
485 return state->mode == GZ_READ ? state->past : 0; in gzeof()
488 /* -- see zlib.h -- */
490 gz_statep state; in gzerror() local
495 state = (gz_statep)file; in gzerror()
496 if (state->mode != GZ_READ && state->mode != GZ_WRITE) in gzerror()
501 *errnum = state->err; in gzerror()
502 return state->err == Z_MEM_ERROR ? "out of memory" : in gzerror()
503 (state->msg == NULL ? "" : state->msg); in gzerror()
506 /* -- see zlib.h -- */
508 gz_statep state; in gzclearerr() local
513 state = (gz_statep)file; in gzclearerr()
514 if (state->mode != GZ_READ && state->mode != GZ_WRITE) in gzclearerr()
517 /* clear error and end-of-file */ in gzclearerr()
518 if (state->mode == GZ_READ) { in gzclearerr()
519 state->eof = 0; in gzclearerr()
520 state->past = 0; in gzclearerr()
522 gz_error(state, Z_OK, NULL); in gzclearerr()
525 /* Create an error message in allocated memory and set state->err and
526 state->msg accordingly. Free any previous error message already there. Do
531 void ZLIB_INTERNAL gz_error(gz_statep state, int err, const char *msg) { in gz_error() argument
533 if (state->msg != NULL) { in gz_error()
534 if (state->err != Z_MEM_ERROR) in gz_error()
535 free(state->msg); in gz_error()
536 state->msg = NULL; in gz_error()
539 /* if fatal, set state->x.have to 0 so that the gzgetc() macro fails */ in gz_error()
541 state->x.have = 0; in gz_error()
544 state->err = err; in gz_error()
553 if ((state->msg = (char *)malloc(strlen(state->path) + strlen(msg) + 3)) == in gz_error()
555 state->err = Z_MEM_ERROR; in gz_error()
559 (void)snprintf(state->msg, strlen(state->path) + strlen(msg) + 3, in gz_error()
560 "%s%s%s", state->path, ": ", msg); in gz_error()
562 strcpy(state->msg, state->path); in gz_error()
563 strcat(state->msg, ": "); in gz_error()
564 strcat(state->msg, msg); in gz_error()
569 available) -- we need to do this to cover cases where 2's complement not
570 used, since C standard permits 1's complement and sign-bit representations,
571 otherwise we could just use ((unsigned)-1) >> 1 */