… | |
… | |
12 | #endif |
12 | #endif |
13 | #if PATCHLEVEL < 6 |
13 | #if PATCHLEVEL < 6 |
14 | # define call_sv perl_call_sv |
14 | # define call_sv perl_call_sv |
15 | #endif |
15 | #endif |
16 | |
16 | |
|
|
17 | #define HLOG 15 |
|
|
18 | #define ULTRA_FAST 0 |
|
|
19 | |
17 | #include "lzf_c.c" |
20 | #include "lzf_c.c" |
18 | #include "lzf_d.c" |
21 | #include "lzf_d.c" |
19 | |
22 | |
20 | /* we re-use the storable header for our purposes */ |
23 | /* we re-use the storable header for our purposes */ |
21 | #define MAGIC_LO 0 |
24 | #define MAGIC_LO 0 |
… | |
… | |
255 | XPUSHs (sv_2mortal (newSVpvn ("\02", 1))); /* 02 == MAGIC_undef */ |
258 | XPUSHs (sv_2mortal (newSVpvn ("\02", 1))); /* 02 == MAGIC_undef */ |
256 | else if (SvROK (sv) |
259 | else if (SvROK (sv) |
257 | || (SvTYPE(sv) != SVt_IV |
260 | || (SvTYPE(sv) != SVt_IV |
258 | && SvTYPE(sv) != SVt_NV |
261 | && SvTYPE(sv) != SVt_NV |
259 | && SvTYPE(sv) != SVt_PV |
262 | && SvTYPE(sv) != SVt_PV |
|
|
263 | && SvTYPE(sv) != SVt_PVIV |
|
|
264 | && SvTYPE(sv) != SVt_PVNV |
260 | && SvTYPE(sv) != SVt_PVMG)) /* mstore */ |
265 | && SvTYPE(sv) != SVt_PVMG)) /* mstore */ |
261 | { |
266 | { |
262 | int deref = !SvROK (sv); |
267 | int deref = !SvROK (sv); |
263 | |
268 | |
264 | if (!storable_mstore) |
269 | if (!storable_mstore) |
… | |
… | |
291 | } |
296 | } |
292 | else if (SvPOKp (sv) && IN_RANGE (SvPVX (sv)[0], MAGIC_LO, MAGIC_HI)) |
297 | else if (SvPOKp (sv) && IN_RANGE (SvPVX (sv)[0], MAGIC_LO, MAGIC_HI)) |
293 | XPUSHs (sv_2mortal (compress_sv (sv, MAGIC_C, MAGIC_U))); /* need to prefix only */ |
298 | XPUSHs (sv_2mortal (compress_sv (sv, MAGIC_C, MAGIC_U))); /* need to prefix only */ |
294 | else if (ix == 2) /* compress always */ |
299 | else if (ix == 2) /* compress always */ |
295 | XPUSHs (sv_2mortal (compress_sv (sv, MAGIC_C, -1))); |
300 | XPUSHs (sv_2mortal (compress_sv (sv, MAGIC_C, -1))); |
|
|
301 | else if (SvNIOK (sv)) /* don't compress */ |
|
|
302 | { |
|
|
303 | STRLEN len; |
|
|
304 | char *s = SvPV (sv, len); |
|
|
305 | XPUSHs (sv_2mortal (newSVpvn (s, len))); |
|
|
306 | } |
296 | else /* don't compress */ |
307 | else /* don't compress */ |
297 | XPUSHs (sv_2mortal (SvREFCNT_inc (sv))); |
308 | XPUSHs (sv_2mortal (newSVsv (sv))); |
298 | |
309 | |
299 | void |
310 | void |
300 | sthaw(sv) |
311 | sthaw(sv) |
301 | SV * sv |
312 | SV * sv |
302 | PROTOTYPE: $ |
313 | PROTOTYPE: $ |
… | |
… | |
356 | |
367 | |
357 | if (SvPVX (sv)[0] == MAGIC_R) |
368 | if (SvPVX (sv)[0] == MAGIC_R) |
358 | SvPVX (sv)[0] = MAGIC_R_deref; |
369 | SvPVX (sv)[0] = MAGIC_R_deref; |
359 | } |
370 | } |
360 | else |
371 | else |
361 | XPUSHs (POPs); /* this is a nop, hopefully */ |
372 | SETs (sv_2mortal (newSVsv (TOPs))); |
362 | |
373 | |
363 | break; |
374 | break; |
364 | |
375 | |
365 | default: |
376 | default: |
366 | croak ("Compress::LZF::sthaw(): invalid data, maybe you need a newer version of Compress::LZF?"); |
377 | croak ("Compress::LZF::sthaw(): invalid data, maybe you need a newer version of Compress::LZF?"); |
367 | } |
378 | } |
368 | } |
379 | } |
369 | else |
380 | else |
370 | XPUSHs (sv_2mortal (newSVsv (sv))); |
381 | XPUSHs (sv_2mortal (newSVsv (sv))); |
|
|
382 | |