Lines Matching refs:s
78 local int get_byte OF((gz_stream *s));
79 local void check_header OF((gz_stream *s));
80 local int destroy OF((gz_stream *s));
82 local uLong getLong OF((gz_stream *s));
102 gz_stream *s; local
108 s = (gz_stream *)ALLOC(sizeof(gz_stream));
109 if (!s) return Z_NULL;
111 s->stream.zalloc = (alloc_func)0;
112 s->stream.zfree = (free_func)0;
113 s->stream.opaque = (voidpf)0;
114 s->stream.next_in = s->inbuf = Z_NULL;
115 s->stream.next_out = s->outbuf = Z_NULL;
116 s->stream.avail_in = s->stream.avail_out = 0;
117 s->file = NULL;
118 s->z_err = Z_OK;
119 s->z_eof = 0;
120 s->in = 0;
121 s->out = 0;
122 s->back = EOF;
123 s->crc = crc32(0L, Z_NULL, 0);
124 s->msg = NULL;
125 s->transparent = 0;
127 s->path = (char*)ALLOC(strlen(path)+1);
128 if (s->path == NULL) {
129 return destroy(s), (gzFile)Z_NULL;
131 strcpy(s->path, path); /* do this early for debugging */
133 s->mode = '\0';
135 if (*p == 'r') s->mode = 'r';
136 if (*p == 'w' || *p == 'a') s->mode = 'w';
149 if (s->mode == '\0') return destroy(s), (gzFile)Z_NULL;
151 if (s->mode == 'w') {
155 err = deflateInit2(&(s->stream), level,
159 s->stream.next_out = s->outbuf = (Byte*)ALLOC(Z_BUFSIZE);
161 if (err != Z_OK || s->outbuf == Z_NULL) {
162 return destroy(s), (gzFile)Z_NULL;
165 s->stream.next_in = s->inbuf = (Byte*)ALLOC(Z_BUFSIZE);
167 err = inflateInit2(&(s->stream), -MAX_WBITS);
174 if (err != Z_OK || s->inbuf == Z_NULL) {
175 return destroy(s), (gzFile)Z_NULL;
178 s->stream.avail_out = Z_BUFSIZE;
181 s->file = fd < 0 ? F_OPEN(path, fmode) : (FILE*)fdopen(fd, fmode);
183 if (s->file == NULL) {
184 return destroy(s), (gzFile)Z_NULL;
186 if (s->mode == 'w') {
189 fprintf(s->file, "%c%c%c%c%c%c%c%c%c%c", gz_magic[0], gz_magic[1],
191 s->start = 10L;
198 check_header(s); /* skip the .gz header */
199 s->start = ftell(s->file) - s->stream.avail_in;
202 return (gzFile)s;
239 gz_stream *s = (gz_stream*)file; local
241 if (s == NULL || s->mode != 'w') return Z_STREAM_ERROR;
244 if (s->stream.avail_out == 0) {
246 s->stream.next_out = s->outbuf;
247 if (fwrite(s->outbuf, 1, Z_BUFSIZE, s->file) != Z_BUFSIZE) {
248 s->z_err = Z_ERRNO;
250 s->stream.avail_out = Z_BUFSIZE;
253 return deflateParams (&(s->stream), level, strategy);
261 local int get_byte(s) in get_byte() argument
262 gz_stream *s; in get_byte()
264 if (s->z_eof) return EOF;
265 if (s->stream.avail_in == 0) {
267 s->stream.avail_in = (uInt)fread(s->inbuf, 1, Z_BUFSIZE, s->file);
268 if (s->stream.avail_in == 0) {
269 s->z_eof = 1;
270 if (ferror(s->file)) s->z_err = Z_ERRNO;
273 s->stream.next_in = s->inbuf;
275 s->stream.avail_in--;
276 return *(s->stream.next_in)++;
288 local void check_header(s) in check_header() argument
289 gz_stream *s; in check_header()
299 len = s->stream.avail_in;
301 if (len) s->inbuf[0] = s->stream.next_in[0];
303 len = (uInt)fread(s->inbuf + len, 1, Z_BUFSIZE >> len, s->file);
304 if (len == 0 && ferror(s->file)) s->z_err = Z_ERRNO;
305 s->stream.avail_in += len;
306 s->stream.next_in = s->inbuf;
307 if (s->stream.avail_in < 2) {
308 s->transparent = s->stream.avail_in;
314 if (s->stream.next_in[0] != gz_magic[0] ||
315 s->stream.next_in[1] != gz_magic[1]) {
316 s->transparent = 1;
319 s->stream.avail_in -= 2;
320 s->stream.next_in += 2;
323 method = get_byte(s);
324 flags = get_byte(s);
326 s->z_err = Z_DATA_ERROR;
331 for (len = 0; len < 6; len++) (void)get_byte(s);
334 len = (uInt)get_byte(s);
335 len += ((uInt)get_byte(s))<<8;
337 while (len-- != 0 && get_byte(s) != EOF) ;
340 while ((c = get_byte(s)) != 0 && c != EOF) ;
343 while ((c = get_byte(s)) != 0 && c != EOF) ;
346 for (len = 0; len < 2; len++) (void)get_byte(s);
348 s->z_err = s->z_eof ? Z_DATA_ERROR : Z_OK;
355 local int destroy (s) in destroy() argument
356 gz_stream *s; in destroy()
360 if (!s) return Z_STREAM_ERROR;
362 TRYFREE(s->msg);
364 if (s->stream.state != NULL) {
365 if (s->mode == 'w') {
369 err = deflateEnd(&(s->stream));
371 } else if (s->mode == 'r') {
372 err = inflateEnd(&(s->stream));
375 if (s->file != NULL && fclose(s->file)) {
381 if (s->z_err < 0) err = s->z_err;
383 TRYFREE(s->inbuf);
384 TRYFREE(s->outbuf);
385 TRYFREE(s->path);
386 TRYFREE(s);
399 gz_stream *s = (gz_stream*)file; local
403 if (s == NULL || s->mode != 'r') return Z_STREAM_ERROR;
405 if (s->z_err == Z_DATA_ERROR || s->z_err == Z_ERRNO) return -1;
406 if (s->z_err == Z_STREAM_END) return 0; /* EOF */
409 s->stream.next_out = (Bytef*)buf;
410 s->stream.avail_out = len;
412 if (s->stream.avail_out && s->back != EOF) {
413 *next_out++ = s->back;
414 s->stream.next_out++;
415 s->stream.avail_out--;
416 s->back = EOF;
417 s->out++;
419 if (s->last) {
420 s->z_err = Z_STREAM_END;
425 while (s->stream.avail_out != 0) {
427 if (s->transparent) {
429 uInt n = s->stream.avail_in;
430 if (n > s->stream.avail_out) n = s->stream.avail_out;
432 zmemcpy(s->stream.next_out, s->stream.next_in, n);
434 s->stream.next_out = next_out;
435 s->stream.next_in += n;
436 s->stream.avail_out -= n;
437 s->stream.avail_in -= n;
439 if (s->stream.avail_out > 0) {
440 s->stream.avail_out -=
441 (uInt)fread(next_out, 1, s->stream.avail_out, s->file);
443 len -= s->stream.avail_out;
444 s->in += len;
445 s->out += len;
446 if (len == 0) s->z_eof = 1;
449 if (s->stream.avail_in == 0 && !s->z_eof) {
452 s->stream.avail_in = (uInt)fread(s->inbuf, 1, Z_BUFSIZE, s->file);
453 if (s->stream.avail_in == 0) {
454 s->z_eof = 1;
455 if (ferror(s->file)) {
456 s->z_err = Z_ERRNO;
460 s->stream.next_in = s->inbuf;
462 s->in += s->stream.avail_in;
463 s->out += s->stream.avail_out;
464 s->z_err = inflate(&(s->stream), Z_NO_FLUSH);
465 s->in -= s->stream.avail_in;
466 s->out -= s->stream.avail_out;
468 if (s->z_err == Z_STREAM_END) {
470 s->crc = crc32(s->crc, start, (uInt)(s->stream.next_out - start));
471 start = s->stream.next_out;
473 if (getLong(s) != s->crc) {
474 s->z_err = Z_DATA_ERROR;
476 (void)getLong(s);
481 check_header(s);
482 if (s->z_err == Z_OK) {
483 inflateReset(&(s->stream));
484 s->crc = crc32(0L, Z_NULL, 0);
488 if (s->z_err != Z_OK || s->z_eof) break;
490 s->crc = crc32(s->crc, start, (uInt)(s->stream.next_out - start));
492 if (len == s->stream.avail_out &&
493 (s->z_err == Z_DATA_ERROR || s->z_err == Z_ERRNO))
495 return (int)(len - s->stream.avail_out);
519 gz_stream *s = (gz_stream*)file; local
521 if (s == NULL || s->mode != 'r' || c == EOF || s->back != EOF) return EOF;
522 s->back = c;
523 s->out--;
524 s->last = (s->z_err == Z_STREAM_END);
525 if (s->last) s->z_err = Z_OK;
526 s->z_eof = 0;
564 gz_stream *s = (gz_stream*)file; local
566 if (s == NULL || s->mode != 'w') return Z_STREAM_ERROR;
568 s->stream.next_in = (Bytef*)buf;
569 s->stream.avail_in = len;
571 while (s->stream.avail_in != 0) {
573 if (s->stream.avail_out == 0) {
575 s->stream.next_out = s->outbuf;
576 if (fwrite(s->outbuf, 1, Z_BUFSIZE, s->file) != Z_BUFSIZE) {
577 s->z_err = Z_ERRNO;
580 s->stream.avail_out = Z_BUFSIZE;
582 s->in += s->stream.avail_in;
583 s->out += s->stream.avail_out;
584 s->z_err = deflate(&(s->stream), Z_NO_FLUSH);
585 s->in -= s->stream.avail_in;
586 s->out -= s->stream.avail_out;
587 if (s->z_err != Z_OK) break;
589 s->crc = crc32(s->crc, (const Bytef *)buf, len);
591 return (int)(len - s->stream.avail_in);
693 int ZEXPORT gzputs(file, s) in gzputs() argument
695 const char *s;
697 return gzwrite(file, (char*)s, (unsigned)strlen(s));
711 gz_stream *s = (gz_stream*)file; local
713 if (s == NULL || s->mode != 'w') return Z_STREAM_ERROR;
715 s->stream.avail_in = 0; /* should be zero already anyway */
718 len = Z_BUFSIZE - s->stream.avail_out;
721 if ((uInt)fwrite(s->outbuf, 1, len, s->file) != len) {
722 s->z_err = Z_ERRNO;
725 s->stream.next_out = s->outbuf;
726 s->stream.avail_out = Z_BUFSIZE;
729 s->out += s->stream.avail_out;
730 s->z_err = deflate(&(s->stream), flush);
731 s->out -= s->stream.avail_out;
734 if (len == 0 && s->z_err == Z_BUF_ERROR) s->z_err = Z_OK;
739 done = (s->stream.avail_out != 0 || s->z_err == Z_STREAM_END);
741 if (s->z_err != Z_OK && s->z_err != Z_STREAM_END) break;
743 return s->z_err == Z_STREAM_END ? Z_OK : s->z_err;
750 gz_stream *s = (gz_stream*)file; local
754 fflush(s->file);
755 return s->z_err == Z_STREAM_END ? Z_OK : s->z_err;
772 gz_stream *s = (gz_stream*)file; local
774 if (s == NULL || whence == SEEK_END ||
775 s->z_err == Z_ERRNO || s->z_err == Z_DATA_ERROR) {
779 if (s->mode == 'w') {
784 offset -= s->in;
789 if (s->inbuf == Z_NULL) {
790 s->inbuf = (Byte*)ALLOC(Z_BUFSIZE); /* for seeking */
791 if (s->inbuf == Z_NULL) return -1L;
792 zmemzero(s->inbuf, Z_BUFSIZE);
798 size = gzwrite(file, s->inbuf, size);
803 return s->in;
810 offset += s->out;
814 if (s->transparent) {
816 s->back = EOF;
817 s->stream.avail_in = 0;
818 s->stream.next_in = s->inbuf;
819 if (fseek(s->file, offset, SEEK_SET) < 0) return -1L;
821 s->in = s->out = offset;
826 if (offset >= s->out) {
827 offset -= s->out;
833 if (offset != 0 && s->outbuf == Z_NULL) {
834 s->outbuf = (Byte*)ALLOC(Z_BUFSIZE);
835 if (s->outbuf == Z_NULL) return -1L;
837 if (offset && s->back != EOF) {
838 s->back = EOF;
839 s->out++;
841 if (s->last) s->z_err = Z_STREAM_END;
847 size = gzread(file, s->outbuf, (uInt)size);
851 return s->out;
860 gz_stream *s = (gz_stream*)file; local
862 if (s == NULL || s->mode != 'r') return -1;
864 s->z_err = Z_OK;
865 s->z_eof = 0;
866 s->back = EOF;
867 s->stream.avail_in = 0;
868 s->stream.next_in = s->inbuf;
869 s->crc = crc32(0L, Z_NULL, 0);
870 if (!s->transparent) (void)inflateReset(&s->stream);
871 s->in = 0;
872 s->out = 0;
873 return fseek(s->file, s->start, SEEK_SET);
894 gz_stream *s = (gz_stream*)file; local
900 if (s == NULL || s->mode != 'r') return 0;
901 if (s->z_eof) return 1;
902 return s->z_err == Z_STREAM_END;
911 gz_stream *s = (gz_stream*)file; local
913 if (s == NULL || s->mode != 'r') return 0;
914 return s->transparent;
935 local uLong getLong (s) in getLong() argument
936 gz_stream *s; in getLong()
938 uLong x = (uLong)get_byte(s);
941 x += ((uLong)get_byte(s))<<8;
942 x += ((uLong)get_byte(s))<<16;
943 c = get_byte(s);
944 if (c == EOF) s->z_err = Z_DATA_ERROR;
956 gz_stream *s = (gz_stream*)file; local
958 if (s == NULL) return Z_STREAM_ERROR;
960 if (s->mode == 'w') {
967 putLong (s->file, s->crc);
968 putLong (s->file, (uLong)(s->in & 0xffffffff));
992 gz_stream *s = (gz_stream*)file; local
994 if (s == NULL) {
998 *errnum = s->z_err;
1001 m = (char*)(*errnum == Z_ERRNO ? zstrerror(errno) : s->stream.msg);
1003 if (m == NULL || *m == '\0') m = (char*)ERR_MSG(s->z_err);
1005 TRYFREE(s->msg);
1006 s->msg = (char*)ALLOC(strlen(s->path) + strlen(m) + 3);
1007 if (s->msg == Z_NULL) return (const char*)ERR_MSG(Z_MEM_ERROR);
1008 strcpy(s->msg, s->path);
1009 strcat(s->msg, ": ");
1010 strcat(s->msg, m);
1011 return (const char*)s->msg;
1020 gz_stream *s = (gz_stream*)file; local
1022 if (s == NULL) return;
1023 if (s->z_err != Z_STREAM_END) s->z_err = Z_OK;
1024 s->z_eof = 0;
1025 clearerr(s->file);