⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zlib.xs

📁 source of perl for linux application,
💻 XS
📖 第 1 页 / 共 4 页
字号:
        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 + -