📄 zlib.diff
字号:
} s->stream.avail_in--; return *(s->stream.next_in)++;--- 257,273 ---- local int get_byte(s) gz_stream *s; {! if (s->z_eof) return -1; if (s->stream.avail_in == 0) {! SetLastError(NO_ERROR);! if (!ReadFile(s->file, s->inbuf, Z_BUFSIZE, &s->stream.avail_in, NULL)) {! s->z_err = Z_ERRNO;! }! if (s->stream.avail_in == 0) {! s->z_eof = 1;! return -1;! }! s->stream.next_in = s->inbuf; } s->stream.avail_in--; return *(s->stream.next_in)++;****************** 270,291 **** /* Check the gzip magic header */ for (len = 0; len < 2; len++) {! c = get_byte(s);! if (c != gz_magic[len]) {! if (len != 0) s->stream.avail_in++, s->stream.next_in--;! if (c != EOF) {! s->stream.avail_in++, s->stream.next_in--;! s->transparent = 1;! }! s->z_err = s->stream.avail_in != 0 ? Z_OK : Z_STREAM_END;! return;! } } method = get_byte(s); flags = get_byte(s); if (method != Z_DEFLATED || (flags & RESERVED) != 0) {! s->z_err = Z_DATA_ERROR;! return; } /* Discard time, xflags and OS code: */--- 292,313 ---- /* Check the gzip magic header */ for (len = 0; len < 2; len++) {! c = get_byte(s);! if (c != gz_magic[len]) {! if (len != 0) s->stream.avail_in++, s->stream.next_in--;! if (c != -1) {! s->stream.avail_in++, s->stream.next_in--;! s->transparent = 1;! }! s->z_err = s->stream.avail_in != 0 ? Z_OK : Z_STREAM_END;! return;! } } method = get_byte(s); flags = get_byte(s); if (method != Z_DEFLATED || (flags & RESERVED) != 0) {! s->z_err = Z_DATA_ERROR;! return; } /* Discard time, xflags and OS code: */****************** 292,310 **** for (len = 0; len < 6; len++) (void)get_byte(s); if ((flags & EXTRA_FIELD) != 0) { /* skip the extra field */! len = (uInt)get_byte(s);! len += ((uInt)get_byte(s))<<8;! /* len is garbage if EOF but the loop below will quit anyway */! while (len-- != 0 && get_byte(s) != EOF) ; } if ((flags & ORIG_NAME) != 0) { /* skip the original file name */! while ((c = get_byte(s)) != 0 && c != EOF) ; } if ((flags & COMMENT) != 0) { /* skip the .gz file comment */! while ((c = get_byte(s)) != 0 && c != EOF) ; } if ((flags & HEAD_CRC) != 0) { /* skip the header crc */! for (len = 0; len < 2; len++) (void)get_byte(s); } s->z_err = s->z_eof ? Z_DATA_ERROR : Z_OK; }--- 314,332 ---- for (len = 0; len < 6; len++) (void)get_byte(s); if ((flags & EXTRA_FIELD) != 0) { /* skip the extra field */! len = (uInt)get_byte(s);! len += ((uInt)get_byte(s))<<8;! /* len is garbage if EOF but the loop below will quit anyway */! while (len-- != 0 && get_byte(s) != -1) ; } if ((flags & ORIG_NAME) != 0) { /* skip the original file name */! while ((c = get_byte(s)) != 0 && c != -1) ; } if ((flags & COMMENT) != 0) { /* skip the .gz file comment */! while ((c = get_byte(s)) != 0 && c != -1) ; } if ((flags & HEAD_CRC) != 0) { /* skip the header crc */! for (len = 0; len < 2; len++) (void)get_byte(s); } s->z_err = s->z_eof ? Z_DATA_ERROR : Z_OK; }****************** 323,343 **** TRYFREE(s->msg); if (s->stream.state != NULL) {! if (s->mode == 'w') { #ifdef NO_DEFLATE! err = Z_STREAM_ERROR; #else! err = deflateEnd(&(s->stream)); #endif! } else if (s->mode == 'r') {! err = inflateEnd(&(s->stream));! }! }! if (s->file != NULL && fclose(s->file)) {! #ifdef ESPIPE! if (errno != ESPIPE) /* fclose is broken for pipes in HP/UX */! #endif! err = Z_ERRNO; } if (s->z_err < 0) err = s->z_err; --- 345,362 ---- TRYFREE(s->msg); if (s->stream.state != NULL) {! if (s->mode == 'w') { #ifdef NO_DEFLATE! err = Z_STREAM_ERROR; #else! err = deflateEnd(&(s->stream)); #endif! } else if (s->mode == 'r') {! err = inflateEnd(&(s->stream));! }! }! if (s->file != NULL && !CloseHandle(s->file)) {! err = Z_ERRNO; } if (s->z_err < 0) err = s->z_err; ****************** 360,365 ****--- 379,385 ---- gz_stream *s = (gz_stream*)file; Bytef *start = (Bytef*)buf; /* starting point for crc computation */ Byte *next_out; /* == stream.next_out but not forced far (for MSDOS) */+ DWORD size; if (s == NULL || s->mode != 'r') return Z_STREAM_ERROR; ****************** 372,440 **** while (s->stream.avail_out != 0) { ! if (s->transparent) {! /* Copy first the lookahead bytes: */! uInt n = s->stream.avail_in;! if (n > s->stream.avail_out) n = s->stream.avail_out;! if (n > 0) {! zmemcpy(s->stream.next_out, s->stream.next_in, n);! next_out += n;! s->stream.next_out = next_out;! s->stream.next_in += n;! s->stream.avail_out -= n;! s->stream.avail_in -= n;! }! if (s->stream.avail_out > 0) {! s->stream.avail_out -= fread(next_out, 1, s->stream.avail_out,! s->file);! }! len -= s->stream.avail_out;! s->stream.total_in += (uLong)len;! s->stream.total_out += (uLong)len; if (len == 0) s->z_eof = 1;! return (int)len;! } 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;- if (ferror(s->file)) {- 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) {! /* Check CRC and original size */! s->crc = crc32(s->crc, start, (uInt)(s->stream.next_out - start));! start = s->stream.next_out;! ! if (getLong(s) != s->crc) {! s->z_err = Z_DATA_ERROR;! } else {! (void)getLong(s); /* The uncompressed length returned by above getlong() may * be different from s->stream.total_out) in case of! * concatenated .gz files. Check for such files:! */! check_header(s);! if (s->z_err == Z_OK) {! uLong total_in = s->stream.total_in;! uLong total_out = s->stream.total_out;! ! inflateReset(&(s->stream));! s->stream.total_in = total_in;! s->stream.total_out = total_out;! s->crc = crc32(0L, Z_NULL, 0);! }! }! }! if (s->z_err != Z_OK || s->z_eof) break; } s->crc = crc32(s->crc, start, (uInt)(s->stream.next_out - start)); --- 392,461 ---- while (s->stream.avail_out != 0) { ! if (s->transparent) {! /* Copy first the lookahead bytes: */! uInt n = s->stream.avail_in;! if (n > s->stream.avail_out) n = s->stream.avail_out;! if (n > 0) {! zmemcpy(s->stream.next_out, s->stream.next_in, n);! next_out += n;! s->stream.next_out = next_out;! s->stream.next_in += n;! s->stream.avail_out -= n;! s->stream.avail_in -= n;! }! if (s->stream.avail_out > 0) {! if (ReadFile(s->file, next_out, s->stream.avail_out, &size, NULL)) {! s->stream.avail_out -= size;! }! }! len -= s->stream.avail_out;! s->stream.total_in += (uLong)len;! s->stream.total_out += (uLong)len; if (len == 0) s->z_eof = 1;! return (int)len;! } if (s->stream.avail_in == 0 && !s->z_eof) { ! SetLastError(NO_ERROR);! if (!ReadFile(s->file, s->inbuf, Z_BUFSIZE, &s->stream.avail_in, NULL)) {! s->z_eof = 1;! s->z_err = Z_ERRNO;! break;! } if (s->stream.avail_in == 0) { s->z_eof = 1; } s->stream.next_in = s->inbuf; } s->z_err = inflate(&(s->stream), Z_NO_FLUSH); ! if (s->z_err == Z_STREAM_END) {! /* Check CRC and original size */! s->crc = crc32(s->crc, start, (uInt)(s->stream.next_out - start));! start = s->stream.next_out;! ! if (getLong(s) != s->crc) {! s->z_err = Z_DATA_ERROR;! } else {! (void)getLong(s); /* The uncompressed length returned by above getlong() may * be different from s->stream.total_out) in case of! * concatenated .gz files. Check for such files:! */! check_header(s);! if (s->z_err == Z_OK) {! uLong total_in = s->stream.total_in;! uLong total_out = s->stream.total_out;! ! inflateReset(&(s->stream));! s->stream.total_in = total_in;! s->stream.total_out = total_out;! s->crc = crc32(0L, Z_NULL, 0);! }! }! }! if (s->z_err != Z_OK || s->z_eof) break; } s->crc = crc32(s->crc, start, (uInt)(s->stream.next_out - start)); ****************** 489,494 ****--- 510,516 ---- unsigned len; { gz_stream *s = (gz_stream*)file;+ DWORD size; if (s == NULL || s->mode != 'w') return Z_STREAM_ERROR; ****************** 500,506 **** 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; }--- 522,528 ---- if (s->stream.avail_out == 0) { s->stream.next_out = s->outbuf;! if (!WriteFile(s->file, s->outbuf, Z_BUFSIZE, &size, NULL) || size != Z_BUFSIZE) { s->z_err = Z_ERRNO; break; }****************** 527,540 **** char buf[Z_PRINTF_BUFSIZE]; va_list va; int len; va_start(va, format);! #ifdef HAS_vsnprintf! (void)vsnprintf(buf, sizeof(buf), format, va);! #else! (void)vsprintf(buf, format, va);! #endif va_end(va); len = strlen(buf); /* some *sprintf don't return the nb of bytes written */ if (len <= 0) return 0; --- 549,574 ---- char buf[Z_PRINTF_BUFSIZE]; va_list va; int len;+ TCHAR form[Z_PRINTF_BUFSIZE];+ TCHAR tbuf[Z_PRINTF_BUFSIZE];+ int n; va_start(va, format);! MultiByteToWideChar(CP_ACP, 0, format, -1, form, Z_PRINTF_BUFSIZE);! len = lstrlen(form);! for ( n = 0; n < len; n++ ) {! if ( TEXT('%') == form[n] ) {! n++;! if ( TEXT('c') == form[n] ) {! form[n] = TEXT('C');! } else if ( TEXT('s') == form[n] ) {! form[n] = TEXT('S');! }! }! }! (void)vswprintf(tbuf, form, va); va_end(va);+ WideCharToMultiByte(CP_ACP, 0, tbuf, -1, buf, Z_PRINTF_BUFSIZE, NULL, NULL); len = strlen(buf); /* some *sprintf don't return the nb of bytes written */ if (len <= 0) return 0; ****************** 543,553 **** #else /* not ANSI C */ int ZEXPORTVA gzprintf (file, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10,! a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) gzFile file; const char *format; int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10,! a11, a12, a13, a14, a15, a16, a17, a18, a19, a20; { char buf[Z_PRINTF_BUFSIZE]; int len;--- 577,587 ---- #else /* not ANSI C */ int ZEXPORTVA gzprintf (file, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10,! a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) gzFile file; const char *format; int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10,! a11, a12, a13, a14, a15, a16, a17, a18, a19, a20; { char buf[Z_PRINTF_BUFSIZE]; int len;****************** 554,563 **** #ifdef HAS_snprintf snprintf(buf, sizeof(buf), format, a1, a2, a3, a4, a5, a6, a7, a8,! a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20); #else sprintf(buf, format, a1, a2, a3, a4, a5, a6, a7, a8,! a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20); #endif len = strlen(buf); /* old sprintf doesn't return the nb of bytes written */ if (len <= 0) return 0;--- 588,597 ---- #ifdef HAS_snprintf snprintf(buf, sizeof(buf), format, a1, a2, a3, a4, a5, a6, a7, a8,! a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20); #else sprintf(buf, format, a1, a2, a3, a4, a5, a6, a7, a8,! a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20); #endif len = strlen(buf); /* old sprintf doesn't return the nb of bytes written */ if (len <= 0) return 0;****************** 604,609 ****--- 638,644 ---- uInt len; int done = 0; gz_stream *s = (gz_stream*)file;+ DWORD size; if (s == NULL || s->mode != 'w') return Z_STREAM_ERROR; ****************** 613,619 **** len = Z_BUFSIZE - s->stream.avail_out;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -