… | |
… | |
255 | XPUSHs (sv_2mortal (newSVpvn ("\02", 1))); /* 02 == MAGIC_undef */ |
255 | XPUSHs (sv_2mortal (newSVpvn ("\02", 1))); /* 02 == MAGIC_undef */ |
256 | else if (SvROK (sv) |
256 | else if (SvROK (sv) |
257 | || (SvTYPE(sv) != SVt_IV |
257 | || (SvTYPE(sv) != SVt_IV |
258 | && SvTYPE(sv) != SVt_NV |
258 | && SvTYPE(sv) != SVt_NV |
259 | && SvTYPE(sv) != SVt_PV |
259 | && SvTYPE(sv) != SVt_PV |
|
|
260 | && SvTYPE(sv) != SVt_PVIV |
|
|
261 | && SvTYPE(sv) != SVt_PVNV |
260 | && SvTYPE(sv) != SVt_PVMG)) /* mstore */ |
262 | && SvTYPE(sv) != SVt_PVMG)) /* mstore */ |
261 | { |
263 | { |
262 | int deref = !SvROK (sv); |
264 | int deref = !SvROK (sv); |
263 | |
265 | |
264 | if (!storable_mstore) |
266 | if (!storable_mstore) |
… | |
… | |
291 | } |
293 | } |
292 | else if (SvPOKp (sv) && IN_RANGE (SvPVX (sv)[0], MAGIC_LO, MAGIC_HI)) |
294 | 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 */ |
295 | XPUSHs (sv_2mortal (compress_sv (sv, MAGIC_C, MAGIC_U))); /* need to prefix only */ |
294 | else if (ix == 2) /* compress always */ |
296 | else if (ix == 2) /* compress always */ |
295 | XPUSHs (sv_2mortal (compress_sv (sv, MAGIC_C, -1))); |
297 | XPUSHs (sv_2mortal (compress_sv (sv, MAGIC_C, -1))); |
|
|
298 | else if (SvNIOK (sv)) /* don't compress */ |
|
|
299 | { |
|
|
300 | STRLEN len; |
|
|
301 | char *s = SvPV (sv, len); |
|
|
302 | XPUSHs (sv_2mortal (newSVpvn (s, len))); |
|
|
303 | } |
296 | else /* don't compress */ |
304 | else /* don't compress */ |
297 | XPUSHs (sv_2mortal (SvREFCNT_inc (sv))); |
305 | XPUSHs (sv_2mortal (newSVsv (sv))); |
298 | |
306 | |
299 | void |
307 | void |
300 | sthaw(sv) |
308 | sthaw(sv) |
301 | SV * sv |
309 | SV * sv |
302 | PROTOTYPE: $ |
310 | PROTOTYPE: $ |
… | |
… | |
356 | |
364 | |
357 | if (SvPVX (sv)[0] == MAGIC_R) |
365 | if (SvPVX (sv)[0] == MAGIC_R) |
358 | SvPVX (sv)[0] = MAGIC_R_deref; |
366 | SvPVX (sv)[0] = MAGIC_R_deref; |
359 | } |
367 | } |
360 | else |
368 | else |
361 | XPUSHs (POPs); /* this is a nop, hopefully */ |
369 | SETs (sv_2mortal (newSVsv (TOPs))); |
362 | |
370 | |
363 | break; |
371 | break; |
364 | |
372 | |
365 | default: |
373 | default: |
366 | croak ("Compress::LZF::sthaw(): invalid data, maybe you need a newer version of Compress::LZF?"); |
374 | croak ("Compress::LZF::sthaw(): invalid data, maybe you need a newer version of Compress::LZF?"); |
367 | } |
375 | } |
368 | } |
376 | } |
369 | else |
377 | else |
370 | XPUSHs (sv_2mortal (newSVsv (sv))); |
378 | XPUSHs (sv_2mortal (newSVsv (sv))); |
|
|
379 | |