📄 zlib.xs
字号:
CODE: RETVAL = s->uncompressedBytes; OUTPUT: RETVALDualType inflateSync (s, buf) Compress::Raw::Zlib::inflateStream s SV * buf CODE: /* If the buffer is a reference, dereference it */ buf = deRef(buf, "inflateSync") ;#ifdef UTF8_AVAILABLE if (DO_UTF8(buf) && !sv_utf8_downgrade(buf, 1)) croak("Wide character in Compress::Raw::Zlib::Inflate::inflateSync");#endif /* initialise the input buffer */ s->stream.next_in = (Bytef*)SvPVbyte_nolen(buf) ; s->stream.avail_in = SvCUR(buf) ; /* inflateSync doesn't create any output */ s->stream.next_out = (Bytef*) NULL; s->stream.avail_out = 0; RETVAL = inflateSync(&(s->stream)); s->last_error = RETVAL ; /* fix the input buffer */ { unsigned in = s->stream.avail_in ; SvCUR_set(buf, in) ; if (in) Move(s->stream.next_in, SvPVbyte_nolen(buf), in, char) ; *SvEND(buf) = '\0'; SvSETMAGIC(buf); } OUTPUT: RETVALvoidDESTROY(s) Compress::Raw::Zlib::inflateStream s CODE: inflateEnd(&s->stream) ; if (s->dictionary) SvREFCNT_dec(s->dictionary) ;#ifndef SETP_BYTE if (s->deflateParams_out_buffer) Safefree(s->deflateParams_out_buffer);#endif#ifdef MAGIC_APPEND if (s->window) Safefree(s->window);#endif Safefree(s) ;uLongstatus(s) Compress::Raw::Zlib::inflateStream s CODE: RETVAL = s->last_error ; OUTPUT: RETVALuLongcrc32(s) Compress::Raw::Zlib::inflateStream s CODE: RETVAL = s->crc32 ; OUTPUT: RETVALuLongdict_adler(s) Compress::Raw::Zlib::inflateStream s CODE: RETVAL = s->dict_adler ; OUTPUT: RETVALuLongtotal_in(s) Compress::Raw::Zlib::inflateStream s CODE: RETVAL = s->stream.total_in ; OUTPUT: RETVALuLongadler32(s) Compress::Raw::Zlib::inflateStream s CODE: RETVAL = s->adler32 ; OUTPUT: RETVALuLongtotal_out(s) Compress::Raw::Zlib::inflateStream s CODE: RETVAL = s->stream.total_out ; OUTPUT: RETVALchar*msg(s) Compress::Raw::Zlib::inflateStream s CODE: RETVAL = s->stream.msg; OUTPUT: RETVALuLongget_Bufsize(s) Compress::Raw::Zlib::inflateStream s CODE: RETVAL = s->bufsize ; OUTPUT: RETVALboolset_Append(s, mode) Compress::Raw::Zlib::inflateStream s bool mode CODE: RETVAL = ((s->flags & FLAG_APPEND) == FLAG_APPEND); if (mode) s->flags |= FLAG_APPEND ; else s->flags &= ~FLAG_APPEND ; OUTPUT: RETVALMODULE = Compress::Raw::Zlib PACKAGE = Compress::Raw::Zlib::inflateScanStreamvoidDESTROY(s) Compress::Raw::Zlib::inflateScanStream s CODE: inflateEnd(&s->stream) ; if (s->dictionary) SvREFCNT_dec(s->dictionary) ;#ifndef SETP_BYTE if (s->deflateParams_out_buffer) Safefree(s->deflateParams_out_buffer);#endif#ifdef MAGIC_APPEND if (s->window) Safefree(s->window);#endif Safefree(s) ;voidDispStream(s, message=NULL) Compress::Raw::Zlib::inflateScanStream s char * messageDualTypeinflateReset(s) Compress::Raw::Zlib::inflateScanStream s CODE: RETVAL = inflateReset(&(s->stream)) ; if (RETVAL == Z_OK) { PostInitStream(s, s->flags, s->bufsize, s->WindowBits) ; } OUTPUT: RETVALDualType scan(s, buf, out=NULL, eof=FALSE) Compress::Raw::Zlib::inflateScanStream s SV * buf SV * out bool eof bool eof_mode = FALSE; int start_len = NO_INIT STRLEN stmp = NO_INIT CODE: /* If the input buffer is a reference, dereference it */#ifndef MAGIC_APPEND buf = buf; croak("scan needs zlib 1.2.1 or better");#else buf = deRef(buf, "inflateScan") ;#ifdef UTF8_AVAILABLE if (DO_UTF8(buf) && !sv_utf8_downgrade(buf, 1)) croak("Wide character in Compress::Raw::Zlib::InflateScan::scan input parameter");#endif /* initialise the input buffer */ s->stream.next_in = (Bytef*)SvPVbyte_force(buf, stmp) ; s->stream.avail_in = SvCUR(buf) ; start_len = s->stream.avail_in ; s->bytesInflated = 0 ; do { if (s->stream.avail_in == 0) { RETVAL = Z_OK ; break ; } /* set up output to next available section of sliding window */ s->stream.avail_out = WINDOW_SIZE - s->window_have; s->stream.next_out = s->window + s->window_have; /* DispStream(s, "before inflate\n"); */ /* inflate and check for errors */ RETVAL = inflate(&(s->stream), Z_BLOCK); if (start_len > 1 && ! eof_mode) s->window_lastByte = *(s->stream.next_in - 1 ) ; if (RETVAL == Z_STREAM_ERROR || RETVAL == Z_MEM_ERROR || RETVAL == Z_DATA_ERROR ) break ; if (s->flags & FLAG_CRC32 ) s->crc32 = crc32(s->crc32, s->window + s->window_have, WINDOW_SIZE - s->window_have - s->stream.avail_out); if (s->flags & FLAG_ADLER32) s->adler32 = adler32(s->adler32, s->window + s->window_have, WINDOW_SIZE - s->window_have - s->stream.avail_out); s->uncompressedBytes = s->bytesInflated += WINDOW_SIZE - s->window_have - s->stream.avail_out; if (s->stream.avail_out) s->window_have = WINDOW_SIZE - s->stream.avail_out; else { s->window_have = 0; s->window_full = 1; } /* process end of block */ if (s->stream.data_type & 128) { if (s->stream.data_type & 64) { s->window_left = s->stream.data_type & 0x1f; } else { s->window_lastbit = s->stream.data_type & 0x1f; s->lastBlockOffset = s->stream.total_in; } } } while (RETVAL != Z_STREAM_END); s->last_error = RETVAL ; s->window_lastoff = s->stream.total_in ; s->compressedBytes += SvCUR(buf) - s->stream.avail_in ; if (RETVAL == Z_STREAM_END) { s->matchedEndBlock = 1 ; /* save the location of the end of the compressed data */ s->window_end = SvCUR(buf) - s->stream.avail_in - 1 ; s->window_endOffset = s->stream.total_in ; if (s->window_left) { -- s->window_endOffset ; } /* if window wrapped, build dictionary from window by rotating */ if (s->window_full) { rotate(s->window, WINDOW_SIZE, s->window_have); s->window_have = WINDOW_SIZE; } /* if (s->flags & FLAG_CONSUME_INPUT) { */ if (1) { unsigned in = s->stream.avail_in ; SvCUR_set(buf, in) ; if (in) Move(s->stream.next_in, SvPVbyte_nolen(buf), in, char) ; *SvEND(buf) = '\0'; SvSETMAGIC(buf); } }#endif OUTPUT: RETVALuLonggetEndOffset(s) Compress::Raw::Zlib::inflateScanStream s CODE:#ifndef MAGIC_APPEND croak("getEndOffset needs zlib 1.2.1 or better");#else RETVAL = s->window_endOffset;#endif OUTPUT: RETVALuLonginflateCount(s) Compress::Raw::Zlib::inflateScanStream s CODE:#ifndef MAGIC_APPEND croak("inflateCount needs zlib 1.2.1 or better");#else RETVAL = s->bytesInflated;#endif OUTPUT: RETVALuLongcompressedBytes(s) Compress::Raw::Zlib::inflateScanStream s CODE: RETVAL = s->compressedBytes; OUTPUT: RETVALuLonguncompressedBytes(s) Compress::Raw::Zlib::inflateScanStream s CODE: RETVAL = s->uncompressedBytes; OUTPUT: RETVALuLonggetLastBlockOffset(s) Compress::Raw::Zlib::inflateScanStream s CODE:#ifndef MAGIC_APPEND croak("getLastBlockOffset needs zlib 1.2.1 or better");#else RETVAL = s->lastBlockOffset - (s->window_lastbit != 0);#endif OUTPUT: RETVALuLonggetLastBufferOffset(s) Compress::Raw::Zlib::inflateScanStream s CODE:#ifndef MAGIC_APPEND croak("getLastBufferOffset needs zlib 1.2.1 or better");#else RETVAL = s->window_lastoff;#endif OUTPUT: RETVALvoidresetLastBlockByte(s, byte) Compress::Raw::Zlib::inflateScanStream s unsigned char* byte CODE:#ifndef MAGIC_APPEND croak("resetLastBlockByte needs zlib 1.2.1 or better");#else if (byte != NULL) *byte = *byte ^ (1 << ((8 - s->window_lastbit) & 7));#endifvoid_createDeflateStream(inf_s, flags,level, method, windowBits, memLevel, strategy, bufsize) Compress::Raw::Zlib::inflateScanStream inf_s int flags int level int method int windowBits int memLevel int strategy uLong bufsize PPCODE: {#ifndef MAGIC_APPEND flags = flags; level = level ; method = method; windowBits = windowBits; memLevel = memLevel; strategy = strategy; bufsize= bufsize; croak("_createDeflateStream needs zlib 1.2.1 or better");#else int err ; deflateStream s ; if (trace) warn("in _createDeflateStream(level=%d, method=%d, windowBits=%d, memLevel=%d, strategy=%d, bufsize=%lu\n", level, method, windowBits, memLevel, strategy, bufsize) ; if ((s = InitStream() )) { s->Level = level; s->Method = method; s->WindowBits = windowBits; s->MemLevel = memLevel; s->Strategy = strategy; err = deflateInit2(&(s->stream), level, method, windowBits, memLevel, strategy); if (err == Z_OK) { err = deflateSetDictionary(&(s->stream), inf_s->window, inf_s->window_have); s->dict_adler = s->stream.adler ; } if (err != Z_OK) { Safefree(s) ; s = NULL ; } else { PostInitStream(s, flags, bufsize, windowBits) ; s->crc32 = inf_s->crc32; s->adler32 = inf_s->adler32; s->stream.adler = inf_s->stream.adler ; /* s->stream.total_out = inf_s->bytesInflated ; */ s->stream.total_in = inf_s->stream.total_out ; if (inf_s->window_left) { /* printf("** window_left %d, window_lastByte %d\n", inf_s->window_left, inf_s->window_lastByte); */ deflatePrime(&(s->stream), 8 - inf_s->window_left, inf_s->window_lastByte); } } } else err = Z_MEM_ERROR ; XPUSHs(sv_setref_pv(sv_newmortal(), "Compress::Raw::Zlib::deflateStream", (void*)s)); if (GIMME == G_ARRAY) { SV * sv = sv_2mortal(newSViv(err)) ; setDUALstatus(sv, err); XPUSHs(sv) ; }#endif }DualTypestatus(s) Compress::Raw::Zlib::inflateScanStream s CODE: RETVAL = s->last_error ; OUTPUT: RETVALuLongcrc32(s) Compress::Raw::Zlib::inflateScanStream s CODE: RETVAL = s->crc32 ; OUTPUT: RETVALuLongadler32(s) Compress::Raw::Zlib::inflateScanStream s CODE: RETVAL = s->adler32 ; OUTPUT: RETVAL
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -