From bdde4e09d21edff02ea5093b7f6eccbf166b272f Mon Sep 17 00:00:00 2001 From: Mark Adler <madler@alumni.caltech.edu> Date: Fri, 9 Sep 2011 23:08:07 -0700 Subject: zlib 0.92 --- gzio.c | 284 ++++++++++++++++++++++++++++++++--------------------------------- 1 file changed, 142 insertions(+), 142 deletions(-) (limited to 'gzio.c') diff --git a/gzio.c b/gzio.c index 7a3d05a..d323fbc 100644 --- a/gzio.c +++ b/gzio.c @@ -3,7 +3,7 @@ * For conditions of distribution and use, see copyright notice in zlib.h */ -/* $Id: gzio.c,v 1.7 1995/05/02 12:22:08 jloup Exp $ */ +/* $Id: gzio.c,v 1.8 1995/05/03 17:27:09 jloup Exp $ */ #include <stdio.h> @@ -68,13 +68,13 @@ local int destroy (s) if (s->stream.state != NULL) { if (s->mode == 'w') { - err = deflateEnd(&(s->stream)); + err = deflateEnd(&(s->stream)); } else if (s->mode == 'r') { - err = inflateEnd(&(s->stream)); + err = inflateEnd(&(s->stream)); } } if (s->file != NULL && fclose(s->file)) { - err = Z_ERRNO; + err = Z_ERRNO; } if (s->z_err < 0) err = s->z_err; zcfree((voidp)0, s); @@ -115,34 +115,34 @@ local gzFile gz_open (path, mode, fd) s->path = (char*)ALLOC(strlen(path)+1); if (s->path == NULL) { - return destroy(s), (gzFile)Z_NULL; + return destroy(s), (gzFile)Z_NULL; } strcpy(s->path, path); /* do this early for debugging */ s->mode = '\0'; do { - if (*p == 'r') s->mode = 'r'; - if (*p == 'w') s->mode = 'w'; + if (*p == 'r') s->mode = 'r'; + if (*p == 'w') s->mode = 'w'; } while (*p++); if (s->mode == '\0') return destroy(s), (gzFile)Z_NULL; if (s->mode == 'w') { - err = deflateInit2(&(s->stream), Z_DEFAULT_COMPRESSION, - DEFLATED, -MAX_WBITS, DEF_MEM_LEVEL, 0); - /* windowBits is passed < 0 to suppress zlib header */ + err = deflateInit2(&(s->stream), Z_DEFAULT_COMPRESSION, + DEFLATED, -MAX_WBITS, DEF_MEM_LEVEL, 0); + /* windowBits is passed < 0 to suppress zlib header */ - s->stream.next_out = s->outbuf = ALLOC(Z_BUFSIZE); + s->stream.next_out = s->outbuf = ALLOC(Z_BUFSIZE); - if (err != Z_OK || s->outbuf == Z_NULL) { - return destroy(s), (gzFile)Z_NULL; - } + if (err != Z_OK || s->outbuf == Z_NULL) { + return destroy(s), (gzFile)Z_NULL; + } } else { - err = inflateInit2(&(s->stream), -MAX_WBITS); - s->stream.next_in = s->inbuf = ALLOC(Z_BUFSIZE); + err = inflateInit2(&(s->stream), -MAX_WBITS); + s->stream.next_in = s->inbuf = ALLOC(Z_BUFSIZE); - if (err != Z_OK || s->inbuf == Z_NULL) { - return destroy(s), (gzFile)Z_NULL; - } + if (err != Z_OK || s->inbuf == Z_NULL) { + return destroy(s), (gzFile)Z_NULL; + } } s->stream.avail_out = Z_BUFSIZE; @@ -150,55 +150,55 @@ local gzFile gz_open (path, mode, fd) s->file = fd < 0 ? FOPEN(path, mode) : fdopen(fd, mode); if (s->file == NULL) { - return destroy(s), (gzFile)Z_NULL; + return destroy(s), (gzFile)Z_NULL; } if (s->mode == 'w') { - /* Write a very simple .gz header: - */ - fprintf(s->file, "%c%c%c%c%c%c%c%c%c%c", GZ_MAGIC_1, GZ_MAGIC_2, - DEFLATED, 0 /*flags*/, 0,0,0,0 /*time*/, 0 /*xflags*/, OS_CODE); + /* Write a very simple .gz header: + */ + fprintf(s->file, "%c%c%c%c%c%c%c%c%c%c", GZ_MAGIC_1, GZ_MAGIC_2, + DEFLATED, 0 /*flags*/, 0,0,0,0 /*time*/, 0 /*xflags*/, OS_CODE); } else { - /* Check and skip the header: + /* Check and skip the header: */ - Byte c1 = 0, c2 = 0; - Byte method = 0; - Byte flags = 0; - Byte xflags = 0; - Byte time[4]; - Byte osCode; - int c; - - s->stream.avail_in = fread(s->inbuf, 1, 2, s->file); - if (s->stream.avail_in != 2 || s->inbuf[0] != GZ_MAGIC_1 - || s->inbuf[1] != GZ_MAGIC_2) { - s->transparent = 1; - return (gzFile)s; - } - s->stream.avail_in = 0; - fscanf(s->file,"%c%c%4c%c%c", &method, &flags, time, &xflags, &osCode); - - if (method != DEFLATED || feof(s->file) || (flags & RESERVED) != 0) { - s->z_err = Z_DATA_ERROR; - return (gzFile)s; - } - if ((flags & EXTRA_FIELD) != 0) { /* skip the extra field */ - long len; - fscanf(s->file, "%c%c", &c1, &c2); - len = c1 + ((long)c2<<8); - fseek(s->file, len, SEEK_CUR); - } - if ((flags & ORIG_NAME) != 0) { /* skip the original file name */ - while ((c = getc(s->file)) != 0 && c != EOF) ; - } - if ((flags & COMMENT) != 0) { /* skip the .gz file comment */ - while ((c = getc(s->file)) != 0 && c != EOF) ; - } - if ((flags & HEAD_CRC) != 0) { /* skip the header crc */ - fscanf(s->file, "%c%c", &c1, &c2); - } - if (feof(s->file)) { - s->z_err = Z_DATA_ERROR; - } + Byte c1 = 0, c2 = 0; + Byte method = 0; + Byte flags = 0; + Byte xflags = 0; + Byte time[4]; + Byte osCode; + int c; + + s->stream.avail_in = fread(s->inbuf, 1, 2, s->file); + if (s->stream.avail_in != 2 || s->inbuf[0] != GZ_MAGIC_1 + || s->inbuf[1] != GZ_MAGIC_2) { + s->transparent = 1; + return (gzFile)s; + } + s->stream.avail_in = 0; + fscanf(s->file,"%c%c%4c%c%c", &method, &flags, time, &xflags, &osCode); + + if (method != DEFLATED || feof(s->file) || (flags & RESERVED) != 0) { + s->z_err = Z_DATA_ERROR; + return (gzFile)s; + } + if ((flags & EXTRA_FIELD) != 0) { /* skip the extra field */ + long len; + fscanf(s->file, "%c%c", &c1, &c2); + len = c1 + ((long)c2<<8); + fseek(s->file, len, SEEK_CUR); + } + if ((flags & ORIG_NAME) != 0) { /* skip the original file name */ + while ((c = getc(s->file)) != 0 && c != EOF) ; + } + if ((flags & COMMENT) != 0) { /* skip the .gz file comment */ + while ((c = getc(s->file)) != 0 && c != EOF) ; + } + if ((flags & HEAD_CRC) != 0) { /* skip the header crc */ + fscanf(s->file, "%c%c", &c1, &c2); + } + if (feof(s->file)) { + s->z_err = Z_DATA_ERROR; + } } return (gzFile)s; } @@ -240,16 +240,16 @@ int gzread (file, buf, len) if (s == NULL || s->mode != 'r') return Z_STREAM_ERROR; if (s->transparent) { - unsigned n = 0; - Byte *b = (Byte*)buf; - /* Copy the first two (non-magic) bytes if not done already */ - while (s->stream.avail_in > 0 && len > 0) { - *b++ = *s->stream.next_in++; - s->stream.avail_in--; - len--; n++; - } - if (len == 0) return n; - return n + fread(b, 1, len, s->file); + unsigned n = 0; + Byte *b = (Byte*)buf; + /* Copy the first two (non-magic) bytes if not done already */ + while (s->stream.avail_in > 0 && len > 0) { + *b++ = *s->stream.next_in++; + s->stream.avail_in--; + len--; n++; + } + if (len == 0) return n; + return n + fread(b, 1, len, s->file); } if (s->z_err == Z_DATA_ERROR) return -1; /* bad .gz file */ if (s->z_err == Z_STREAM_END) return 0; /* don't read crc as data */ @@ -259,24 +259,24 @@ int gzread (file, buf, len) while (s->stream.avail_out != 0) { - if (s->stream.avail_in == 0 && !s->z_eof) { - - errno = 0; - s->stream.avail_in = - fread(s->inbuf, 1, Z_BUFSIZE, s->file); - if (s->stream.avail_in == 0) { - s->z_eof = 1; - } else if (s->stream.avail_in == (uInt)EOF) { - s->stream.avail_in = 0; - s->z_eof = 1; - s->z_err = Z_ERRNO; - break; - } - s->stream.next_in = s->inbuf; - } - s->z_err = inflate(&(s->stream), Z_NO_FLUSH); - - if (s->z_err == Z_STREAM_END || + if (s->stream.avail_in == 0 && !s->z_eof) { + + errno = 0; + s->stream.avail_in = + fread(s->inbuf, 1, Z_BUFSIZE, s->file); + if (s->stream.avail_in == 0) { + s->z_eof = 1; + } else if (s->stream.avail_in == (uInt)EOF) { + s->stream.avail_in = 0; + s->z_eof = 1; + s->z_err = Z_ERRNO; + break; + } + s->stream.next_in = s->inbuf; + } + s->z_err = inflate(&(s->stream), Z_NO_FLUSH); + + if (s->z_err == Z_STREAM_END || s->z_err != Z_OK || s->z_eof) break; } len -= s->stream.avail_out; @@ -302,18 +302,18 @@ int gzwrite (file, buf, len) while (s->stream.avail_in != 0) { - if (s->stream.avail_out == 0) { + if (s->stream.avail_out == 0) { - s->stream.next_out = s->outbuf; - if (fwrite(s->outbuf, 1, Z_BUFSIZE, s->file) != Z_BUFSIZE) { - s->z_err = Z_ERRNO; - break; - } - s->stream.avail_out = Z_BUFSIZE; - } - s->z_err = deflate(&(s->stream), Z_NO_FLUSH); + s->stream.next_out = s->outbuf; + if (fwrite(s->outbuf, 1, Z_BUFSIZE, s->file) != Z_BUFSIZE) { + s->z_err = Z_ERRNO; + break; + } + s->stream.avail_out = Z_BUFSIZE; + } + s->z_err = deflate(&(s->stream), Z_NO_FLUSH); - if (s->z_err != Z_OK) break; + if (s->z_err != Z_OK) break; } s->crc = crc32(s->crc, buf, len); @@ -339,25 +339,25 @@ int gzflush (file, flush) s->stream.avail_in = 0; /* should be zero already anyway */ for (;;) { - len = Z_BUFSIZE - s->stream.avail_out; - - if (len != 0) { - if (fwrite(s->outbuf, 1, len, s->file) != len) { - s->z_err = Z_ERRNO; - return Z_ERRNO; - } - s->stream.next_out = s->outbuf; - s->stream.avail_out = Z_BUFSIZE; - } - if (done) break; - s->z_err = deflate(&(s->stream), flush); + len = Z_BUFSIZE - s->stream.avail_out; + + if (len != 0) { + if (fwrite(s->outbuf, 1, len, s->file) != len) { + s->z_err = Z_ERRNO; + return Z_ERRNO; + } + s->stream.next_out = s->outbuf; + s->stream.avail_out = Z_BUFSIZE; + } + if (done) break; + s->z_err = deflate(&(s->stream), flush); /* deflate has finished flushing only when it hasn't used up * all the available space in the output buffer: */ done = (s->stream.avail_out != 0 || s->z_err == Z_STREAM_END); - if (s->z_err != Z_OK && s->z_err != Z_STREAM_END) break; + if (s->z_err != Z_OK && s->z_err != Z_STREAM_END) break; } return s->z_err == Z_STREAM_END ? Z_OK : s->z_err; } @@ -371,8 +371,8 @@ local void putLong (file, x) { int n; for (n = 0; n < 4; n++) { - fputc((int)(x & 0xff), file); - x >>= 8; + fputc((int)(x & 0xff), file); + x >>= 8; } } @@ -386,8 +386,8 @@ local uLong getLong (buf) Byte *p = buf+4; do { - x <<= 8; - x |= *--p; + x <<= 8; + x |= *--p; } while (p != buf); return x; } @@ -406,31 +406,31 @@ int gzclose (file) if (s == NULL) return Z_STREAM_ERROR; if (s->mode == 'w') { - err = gzflush (file, Z_FINISH); - if (err != Z_OK) return destroy(file); + err = gzflush (file, Z_FINISH); + if (err != Z_OK) return destroy(file); - putLong (s->file, s->crc); - putLong (s->file, s->stream.total_in); + putLong (s->file, s->crc); + putLong (s->file, s->stream.total_in); } else if (s->mode == 'r' && s->z_err == Z_STREAM_END) { - /* slide CRC and original size if they are at the end of inbuf */ - if ((n = s->stream.avail_in) < 8 && !s->z_eof) { - Byte *p = s->inbuf; - Byte *q = s->stream.next_in; - while (n--) { *p++ = *q++; }; - - n = s->stream.avail_in; - n += fread(p, 1, 8, s->file); - s->stream.next_in = s->inbuf; - } - /* check CRC and original size */ - if (n < 8 || - getLong(s->stream.next_in) != s->crc || - getLong(s->stream.next_in + 4) != s->stream.total_out) { - - s->z_err = Z_DATA_ERROR; - } + /* slide CRC and original size if they are at the end of inbuf */ + if ((n = s->stream.avail_in) < 8 && !s->z_eof) { + Byte *p = s->inbuf; + Byte *q = s->stream.next_in; + while (n--) { *p++ = *q++; }; + + n = s->stream.avail_in; + n += fread(p, 1, 8, s->file); + s->stream.next_in = s->inbuf; + } + /* check CRC and original size */ + if (n < 8 || + getLong(s->stream.next_in) != s->crc || + getLong(s->stream.next_in + 4) != s->stream.total_out) { + + s->z_err = Z_DATA_ERROR; + } } return destroy(file); } @@ -450,8 +450,8 @@ char* gzerror (file, errnum) gz_stream *s = (gz_stream*)file; if (s == NULL) { - *errnum = Z_STREAM_ERROR; - return z_errmsg[1-Z_STREAM_ERROR]; + *errnum = Z_STREAM_ERROR; + return z_errmsg[1-Z_STREAM_ERROR]; } *errnum = s->z_err; if (*errnum == Z_OK) return ""; -- cgit v1.2.3-55-g6feb