Compress-Raw-Zlib
view release on metacpan or search on metacpan
#ifdef UTF8_AVAILABLE
if (DO_UTF8(sv) && !sv_utf8_downgrade(sv, 1))
croak("Wide character in Compress::Raw::Zlib::crc32");
#endif
buf = (Byte*)SvPVbyte(sv, len) ;
if (offset > len)
croak("Offset out of range in Compress::Raw::Zlib::crc32");
if (items < 2)
crc = CRZ_crcInitial;
else if (SvOK(ST(1)))
crc = SvUV(ST(1)) ;
else
crc = CRZ_crcInitial;
uLong
crc32_combine(crc1, crc2, len2)
uLong crc1
uLong crc2
z_off_t len2
CODE:
#ifndef AT_LEAST_ZLIB_1_2_2_1
crc1 = crc1; crc2 = crc2 ; len2 = len2; /* Silence -Wall */
croak("crc32_combine needs zlib 1.2.3 or better");
#else
RETVAL = CRZ_crc32_combine(crc1, crc2, len2);
#endif
OUTPUT:
RETVAL
uLong
adler32_combine(adler1, adler2, len2)
uLong adler1
uLong adler2
z_off_t len2
CODE:
#ifndef AT_LEAST_ZLIB_1_2_2_1
adler1 = adler1; adler2 = adler2 ; len2 = len2; /* Silence -Wall */
croak("adler32_combine needs zlib 1.2.3 or better");
#else
RETVAL = CRZ_adler32_combine(adler1, adler2, len2);
#endif
OUTPUT:
RETVAL
MODULE = Compress::Raw::Zlib PACKAGE = Compress::Raw::Zlib
void
_deflateInit(flags,level, method, windowBits, memLevel, strategy, bufsize, dictionary)
int flags
int level
int method
int windowBits
int memLevel
int strategy
uLong bufsize
SV* dictionary
PPCODE:
int err ;
deflateStream s ;
if (trace)
warn("in _deflateInit(level=%d, method=%d, windowBits=%d, memLevel=%d, strategy=%d, bufsize=%ld dictionary=%p)\n",
level, method, windowBits, memLevel, strategy, bufsize, dictionary) ;
if ((s = InitStream() )) {
s->Level = level;
s->Method = method;
s->WindowBits = windowBits;
s->MemLevel = memLevel;
s->Strategy = strategy;
err = CRZ_deflateInit2(&(s->stream), level,
method, windowBits, memLevel, strategy);
if (trace) {
warn(" _deflateInit2 returned %d (state %p)\n", err, s);
DispStream(s, "INIT");
}
/* Check if a dictionary has been specified */
SvGETMAGIC(dictionary);
if (err == Z_OK && SvPOK(dictionary) && SvCUR(dictionary)) {
#ifdef UTF8_AVAILABLE
if (DO_UTF8(dictionary) && !sv_utf8_downgrade(dictionary, 1))
croak("Wide character in Compress::Raw::Zlib::Deflate::new dicrionary parameter");
#endif
err = CRZ_deflateSetDictionary(&(s->stream), (const Bytef*) SvPVX(dictionary), SvCUR(dictionary)) ;
if (trace)
warn("deflateSetDictionary returned %d\n", err);
s->dict_adler = s->stream.adler ;
}
if (err != Z_OK) {
Safefree(s) ;
s = NULL ;
}
else
PostInitStream(s, flags, bufsize, windowBits) ;
}
else
err = Z_MEM_ERROR ;
{
SV* obj = sv_setref_pv(sv_newmortal(),
"Compress::Raw::Zlib::deflateStream", (void*)s);
XPUSHs(obj);
}
if (GIMME_V == G_ARRAY) {
SV * sv = sv_2mortal(newSViv(err)) ;
setDUALstatus(sv, err);
XPUSHs(sv) ;
}
void
_inflateInit(flags, windowBits, bufsize, dictionary)
int flags
int windowBits
uLong bufsize
SV * dictionary
ALIAS:
_inflateScanInit = 1
PPCODE:
int err = Z_OK ;
inflateStream s ;
#ifndef MAGIC_APPEND
if (ix == 1)
croak("inflateScanInit needs zlib 1.2.1 or better");
#endif
if (trace)
warn("in _inflateInit(windowBits=%d, bufsize=%lu, dictionary=%lu\n",
windowBits, bufsize, (unsigned long)SvCUR(dictionary)) ;
if ((s = InitStream() )) {
s->WindowBits = windowBits;
err = CRZ_inflateInit2(&(s->stream), windowBits);
if (err != Z_OK) {
Safefree(s) ;
s = NULL ;
}
else if (sv_len(dictionary)) {
#ifdef AT_LEAST_ZLIB_1_2_2_1
/* Zlib 1.2.2.1 or better allows a dictionary with raw inflate */
if (s->WindowBits < 0) {
STRLEN dlen;
const Bytef* b = (const Bytef*)SvPVbyte(dictionary, dlen);
err = CRZ_inflateSetDictionary(&(s->stream),
b, dlen);
if (err != Z_OK) {
Safefree(s) ;
s = NULL ;
}
}
else
#endif
/* Dictionary specified - take a copy for use in inflate */
s->dictionary = newSVsv(dictionary) ;
}
if (s) {
PostInitStream(s, flags, bufsize, windowBits) ;
#ifdef MAGIC_APPEND
if (ix == 1)
{
s->window = (unsigned char *)safemalloc(WINDOW_SIZE);
}
#endif
}
}
else
err = Z_MEM_ERROR ;
{
SV* obj = sv_setref_pv(sv_newmortal(),
ix == 1
? "Compress::Raw::Zlib::inflateScanStream"
: "Compress::Raw::Zlib::inflateStream",
(void*)s);
XPUSHs(obj);
}
if (GIMME_V == G_ARRAY) {
SV * sv = sv_2mortal(newSViv(err)) ;
RETVAL = s->compressedBytes;
OUTPUT:
RETVAL
uLong
uncompressedBytes(s)
Compress::Raw::Zlib::inflateScanStream s
CODE:
RETVAL = s->uncompressedBytes;
OUTPUT:
RETVAL
uLong
getLastBlockOffset(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:
RETVAL
uLong
getLastBufferOffset(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:
RETVAL
void
resetLastBlockByte(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));
#endif
void
_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 = CRZ_deflateInit2(&(s->stream), level,
method, windowBits, memLevel, strategy);
if (err == Z_OK) {
err = CRZ_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); */
CRZ_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_V == G_ARRAY) {
SV * sv = sv_2mortal(newSViv(err)) ;
setDUALstatus(sv, err);
XPUSHs(sv) ;
}
( run in 1.564 second using v1.01-cache-2.11-cpan-71847e10f99 )