--- Compress-LZF/LZF.xs 2002/09/05 04:44:55 1.14 +++ Compress-LZF/LZF.xs 2004/08/03 15:04:05 1.18 @@ -14,6 +14,9 @@ # define call_sv perl_call_sv #endif +#define HLOG 15 +#define ULTRA_FAST 0 + #include "lzf_c.c" #include "lzf_d.c" @@ -257,6 +260,8 @@ || (SvTYPE(sv) != SVt_IV && SvTYPE(sv) != SVt_NV && SvTYPE(sv) != SVt_PV + && SvTYPE(sv) != SVt_PVIV + && SvTYPE(sv) != SVt_PVNV && SvTYPE(sv) != SVt_PVMG)) /* mstore */ { int deref = !SvROK (sv); @@ -293,8 +298,14 @@ XPUSHs (sv_2mortal (compress_sv (sv, MAGIC_C, MAGIC_U))); /* need to prefix only */ else if (ix == 2) /* compress always */ XPUSHs (sv_2mortal (compress_sv (sv, MAGIC_C, -1))); + else if (SvNIOK (sv)) /* don't compress */ + { + STRLEN len; + char *s = SvPV (sv, len); + XPUSHs (sv_2mortal (newSVpvn (s, len))); + } else /* don't compress */ - XPUSHs (sv_2mortal (SvREFCNT_inc (sv))); + XPUSHs (sv_2mortal (newSVsv (sv))); void sthaw(sv) @@ -358,7 +369,7 @@ SvPVX (sv)[0] = MAGIC_R_deref; } else - XPUSHs (POPs); /* this is a nop, hopefully */ + SETs (sv_2mortal (newSVsv (TOPs))); break; @@ -368,3 +379,4 @@ } else XPUSHs (sv_2mortal (newSVsv (sv))); +