📄 zlib.xs
字号:
if (RETVAL != Z_OK) break; } s->compressedBytes += cur_length + increment - prefix - s->stream.avail_out ; s->uncompressedBytes += SvCUR(buf) - s->stream.avail_in ; s->last_error = RETVAL ; if (RETVAL == Z_OK) { SvPOK_only(output); SvCUR_set(output, cur_length + increment - s->stream.avail_out) ; SvSETMAGIC(output); } OUTPUT: RETVAL voidDESTROY(s) Compress::Raw::Zlib::deflateStream s CODE: deflateEnd(&s->stream) ; if (s->dictionary) SvREFCNT_dec(s->dictionary) ;#ifndef SETP_BYTE if (s->deflateParams_out_buffer) Safefree(s->deflateParams_out_buffer);#endif Safefree(s) ;DualTypeflush(s, output, f=Z_FINISH) Compress::Raw::Zlib::deflateStream s SV * output int f uInt cur_length = NO_INIT uInt increment = NO_INIT uInt prefix = NO_INIT uLong bufinc = NO_INIT CODE: bufinc = s->bufsize; s->stream.avail_in = 0; /* should be zero already anyway */ /* retrieve the output buffer */ output = deRef_l(output, "flush") ;#ifdef UTF8_AVAILABLE if (DO_UTF8(output) && !sv_utf8_downgrade(output, 1)) croak("Wide character in Compress::Raw::Zlib::Deflate::flush input parameter");#endif if(! s->flags & FLAG_APPEND) { SvCUR_set(output, 0); /* sv_setpvn(output, "", 0); */ } prefix = cur_length = SvCUR(output) ; s->stream.next_out = (Bytef*) SvPVbyte_nolen(output) + cur_length; increment = SvLEN(output) - cur_length; s->stream.avail_out = increment;#ifdef SETP_BYTE /* Check for saved output from deflateParams */ if (s->deflateParams_out_valid) { *(s->stream.next_out) = s->deflateParams_out_byte; ++ s->stream.next_out; -- s->stream.avail_out ; s->deflateParams_out_valid = FALSE; }#else /* Check for saved output from deflateParams */ if (s->deflateParams_out_length) { uLong plen = s->deflateParams_out_length ; /* printf("Copy %d bytes saved data\n", plen); */ if (s->stream.avail_out < plen) { /* printf("GROW from %d to %d\n", s->stream.avail_out, SvLEN(output) + plen - s->stream.avail_out); */ Sv_Grow(output, SvLEN(output) + plen - s->stream.avail_out) ; } Copy(s->stream.next_out, s->deflateParams_out_buffer, plen, Bytef) ; cur_length = cur_length + plen; SvCUR_set(output, cur_length); s->stream.next_out += plen ; s->stream.avail_out = SvLEN(output) - cur_length ; increment = s->stream.avail_out; s->deflateParams_out_length = 0; }#endif for (;;) { if (s->stream.avail_out == 0) { /* consumed all the available output, so extend it */ Sv_Grow(output, SvLEN(output) + bufinc) ; cur_length += increment ; s->stream.next_out = (Bytef*) SvPVbyte_nolen(output) + cur_length ; increment = bufinc ; s->stream.avail_out = increment; bufinc *= 2 ; } RETVAL = deflate(&(s->stream), f); /* deflate has finished flushing only when it hasn't used up * all the available space in the output buffer: */ if (s->stream.avail_out != 0 || RETVAL != Z_OK ) break; } RETVAL = (RETVAL == Z_STREAM_END ? Z_OK : RETVAL) ; s->last_error = RETVAL ; s->compressedBytes += cur_length + increment - prefix - s->stream.avail_out ; if (RETVAL == Z_OK) { SvPOK_only(output); SvCUR_set(output, cur_length + increment - s->stream.avail_out) ; SvSETMAGIC(output); } OUTPUT: RETVALDualType_deflateParams(s, flags, level, strategy, bufsize) Compress::Raw::Zlib::deflateStream s int flags int level int strategy uLong bufsize CODE: /* printf("_deflateParams(Flags %d Level %d Strategy %d Bufsize %d)\n", flags, level, strategy, bufsize); printf("Before -- Level %d, Strategy %d, Bufsize %d\n", s->Level, s->Strategy, s->bufsize); */ if (flags & 1) s->Level = level ; if (flags & 2) s->Strategy = strategy ; if (flags & 4) { s->bufsize = bufsize; } /* printf("After -- Level %d, Strategy %d, Bufsize %d\n", s->Level, s->Strategy, s->bufsize);*/#ifdef SETP_BYTE s->stream.avail_in = 0; s->stream.next_out = &(s->deflateParams_out_byte) ; s->stream.avail_out = 1; RETVAL = deflateParams(&(s->stream), s->Level, s->Strategy); s->deflateParams_out_valid = (RETVAL == Z_OK && s->stream.avail_out == 0) ; /* printf("RETVAL %d, avail out %d, byte %c\n", RETVAL, s->stream.avail_out, s->deflateParams_out_byte); */#else /* printf("Level %d Strategy %d, Prev Len %d\n", s->Level, s->Strategy, s->deflateParams_out_length); */ s->stream.avail_in = 0; if (s->deflateParams_out_buffer == NULL) s->deflateParams_out_buffer = safemalloc(deflateParams_BUFFER_SIZE); s->stream.next_out = s->deflateParams_out_buffer ; s->stream.avail_out = deflateParams_BUFFER_SIZE; RETVAL = deflateParams(&(s->stream), s->Level, s->Strategy); s->deflateParams_out_length = deflateParams_BUFFER_SIZE - s->stream.avail_out; /* printf("RETVAL %d, length out %d, avail %d\n", RETVAL, s->deflateParams_out_length, s->stream.avail_out ); */#endif OUTPUT: RETVALintget_Level(s) Compress::Raw::Zlib::deflateStream s CODE: RETVAL = s->Level ; OUTPUT: RETVALintget_Strategy(s) Compress::Raw::Zlib::deflateStream s CODE: RETVAL = s->Strategy ; OUTPUT: RETVALuLongget_Bufsize(s) Compress::Raw::Zlib::deflateStream s CODE: RETVAL = s->bufsize ; OUTPUT: RETVALintstatus(s) Compress::Raw::Zlib::deflateStream s CODE: RETVAL = s->last_error ; OUTPUT: RETVALuLongcrc32(s) Compress::Raw::Zlib::deflateStream s CODE: RETVAL = s->crc32 ; OUTPUT: RETVALuLongdict_adler(s) Compress::Raw::Zlib::deflateStream s CODE: RETVAL = s->dict_adler ; OUTPUT: RETVALuLongadler32(s) Compress::Raw::Zlib::deflateStream s CODE: RETVAL = s->adler32 ; OUTPUT: RETVALuLongcompressedBytes(s) Compress::Raw::Zlib::deflateStream s CODE: RETVAL = s->compressedBytes; OUTPUT: RETVALuLonguncompressedBytes(s) Compress::Raw::Zlib::deflateStream s CODE: RETVAL = s->uncompressedBytes; OUTPUT: RETVALuLongtotal_in(s) Compress::Raw::Zlib::deflateStream s CODE: RETVAL = s->stream.total_in ; OUTPUT: RETVALuLongtotal_out(s) Compress::Raw::Zlib::deflateStream s CODE: RETVAL = s->stream.total_out ; OUTPUT: RETVALchar*msg(s) Compress::Raw::Zlib::deflateStream s CODE: RETVAL = s->stream.msg; OUTPUT: RETVALint deflateTune(s, good_length, max_lazy, nice_length, max_chain) Compress::Raw::Zlib::deflateStream s int good_length int max_lazy int nice_length int max_chain CODE:#ifndef AT_LEAST_ZLIB_1_2_2_3 good_length = good_length; max_lazy = max_lazy ; /* Silence -Wall */ nice_length = nice_length; max_chain = max_chain; /* Silence -Wall */ croak("deflateTune needs zlib 1.2.2.3 or better");#else RETVAL = deflateTune(&(s->stream), good_length, max_lazy, nice_length, max_chain);#endif OUTPUT: RETVAL MODULE = Compress::Raw::Zlib PACKAGE = Compress::Raw::Zlib::inflateStreamvoidDispStream(s, message=NULL) Compress::Raw::Zlib::inflateStream s char * messageDualTypeinflateReset(s) Compress::Raw::Zlib::inflateStream s CODE: RETVAL = inflateReset(&(s->stream)) ; if (RETVAL == Z_OK) { PostInitStream(s, s->flags, s->bufsize, s->WindowBits) ; } OUTPUT: RETVALDualType inflate (s, buf, output, eof=FALSE) Compress::Raw::Zlib::inflateStream s SV * buf SV * output bool eof uInt cur_length = 0; uInt prefix_length = 0; uInt increment = 0; STRLEN stmp = NO_INIT uLong bufinc = NO_INIT PREINIT:#ifdef UTF8_AVAILABLE bool out_utf8 = FALSE;#endif CODE: bufinc = s->bufsize; /* If the buffer is a reference, dereference it */ buf = deRef(buf, "inflate") ; if (s->flags & FLAG_CONSUME_INPUT && SvREADONLY(buf)) croak("Compress::Raw::Zlib::Inflate::inflate input parameter cannot be read-only when ConsumeInput is specified");#ifdef UTF8_AVAILABLE if (DO_UTF8(buf) && !sv_utf8_downgrade(buf, 1)) croak("Wide character in Compress::Raw::Zlib::Inflate::inflate input parameter");#endif /* initialise the input buffer */ s->stream.next_in = (Bytef*)SvPVbyte_force(buf, stmp) ; s->stream.avail_in = SvCUR(buf) ; /* and retrieve the output buffer */ output = deRef_l(output, "inflate") ;#ifdef UTF8_AVAILABLE if (DO_UTF8(output)) out_utf8 = TRUE ; if (DO_UTF8(output) && !sv_utf8_downgrade(output, 1)) croak("Wide character in Compress::Raw::Zlib::Inflate::inflate output parameter");#endif if((s->flags & FLAG_APPEND) != FLAG_APPEND) { SvCUR_set(output, 0); } if (SvLEN(output)) { prefix_length = cur_length = SvCUR(output) ; s->stream.next_out = (Bytef*) SvPVbyte_nolen(output) + cur_length; increment = SvLEN(output) - cur_length - 1; s->stream.avail_out = increment; } else { s->stream.avail_out = 0; } s->bytesInflated = 0; while (1) { if (s->stream.avail_out == 0 ) { /* out of space in the output buffer so make it bigger */ Sv_Grow(output, SvLEN(output) + bufinc) ; cur_length += increment ; s->stream.next_out = (Bytef*) SvPVbyte_nolen(output) + cur_length ; increment = bufinc ; s->stream.avail_out = increment; bufinc *= 2 ; } RETVAL = inflate(&(s->stream), Z_SYNC_FLUSH); if (RETVAL == Z_STREAM_ERROR || RETVAL == Z_MEM_ERROR || RETVAL == Z_DATA_ERROR || RETVAL == Z_STREAM_END ) break ; if (RETVAL == Z_BUF_ERROR) { if (s->stream.avail_out == 0) continue ; if (s->stream.avail_in == 0) { RETVAL = Z_OK ; break ; } } if (RETVAL == Z_NEED_DICT && s->dictionary) { s->dict_adler = s->stream.adler ; RETVAL = inflateSetDictionary(&(s->stream), (const Bytef*)SvPVbyte_nolen(s->dictionary), SvCUR(s->dictionary)); } if (RETVAL != Z_OK) break; }#ifdef NEED_DUMMY_BYTE_AT_END if (eof && RETVAL == Z_OK) { Bytef* nextIn = s->stream.next_in; uInt availIn = s->stream.avail_in; s->stream.next_in = (Bytef*) " "; s->stream.avail_in = 1; if (s->stream.avail_out == 0) { /* out of space in the output buffer so make it bigger */ Sv_Grow(output, SvLEN(output) + bufinc) ; cur_length += increment ; s->stream.next_out = (Bytef*) SvPVbyte_nolen(output) + cur_length ; increment = bufinc ; s->stream.avail_out = increment; bufinc *= 2 ; } RETVAL = inflate(&(s->stream), Z_SYNC_FLUSH); s->stream.next_in = nextIn ; s->stream.avail_in = availIn ; }#endif s->last_error = RETVAL ; if (RETVAL == Z_OK || RETVAL == Z_STREAM_END || RETVAL == Z_DATA_ERROR) { unsigned in ; s->bytesInflated = cur_length + increment - s->stream.avail_out - prefix_length; s->uncompressedBytes += s->bytesInflated ; s->compressedBytes += SvCUR(buf) - s->stream.avail_in ; SvPOK_only(output); SvCUR_set(output, prefix_length + s->bytesInflated) ; *SvEND(output) = '\0';#ifdef UTF8_AVAILABLE if (out_utf8) sv_utf8_upgrade(output);#endif SvSETMAGIC(output); if (s->flags & FLAG_CRC32 ) s->crc32 = crc32(s->crc32, (const Bytef*)SvPVbyte_nolen(output)+prefix_length, SvCUR(output)-prefix_length) ; if (s->flags & FLAG_ADLER32) s->adler32 = adler32(s->adler32, (const Bytef*)SvPVbyte_nolen(output)+prefix_length, SvCUR(output)-prefix_length) ; /* fix the input buffer */ if (s->flags & FLAG_CONSUME_INPUT) { 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: RETVALuLonginflateCount(s) Compress::Raw::Zlib::inflateStream s CODE: RETVAL = s->bytesInflated; OUTPUT: RETVALuLongcompressedBytes(s) Compress::Raw::Zlib::inflateStream s CODE: RETVAL = s->compressedBytes; OUTPUT: RETVALuLonguncompressedBytes(s) Compress::Raw::Zlib::inflateStream s
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -