ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/Compress-LZF/LZF.xs
(Generate patch)

Comparing Compress-LZF/LZF.xs (file contents):
Revision 1.23 by root, Fri Feb 16 22:11:17 2007 UTC vs.
Revision 1.24 by root, Mon Apr 16 20:05:33 2007 UTC

1#include "EXTERN.h" 1#include "EXTERN.h"
2#include "perl.h" 2#include "perl.h"
3#include "XSUB.h" 3#include "XSUB.h"
4
5/* try to be compatible with older perls */
6/* SvPV_nolen() macro first defined in 5.005_55 */
7/* this is slow, not threadsafe, but works */
8#include "patchlevel.h"
9#if (PATCHLEVEL == 4) || ((PATCHLEVEL == 5) && (SUBVERSION < 55))
10static STRLEN nolen_na;
11# define SvPV_nolen(sv) SvPV ((sv), nolen_na)
12#endif
13#if PATCHLEVEL < 6
14# define call_sv perl_call_sv
15#endif
16 4
17#define LZF_STANDALONE 1 5#define LZF_STANDALONE 1
18#define LZF_STATE_ARG 1 6#define LZF_STATE_ARG 1
19 7
20#include "lzf_c.c" 8#include "lzf_c.c"
46static SV * 34static SV *
47compress_sv (SV *data, char cprepend, int uprepend) 35compress_sv (SV *data, char cprepend, int uprepend)
48{ 36{
49 LZF_STATE *state; 37 LZF_STATE *state;
50 STRLEN usize, csize; 38 STRLEN usize, csize;
51 char *src = (char *)SvPV (data, usize); 39 char *src = (char *)SvPVbyte (data, usize);
52 40
53 if (usize) 41 if (usize)
54 { 42 {
55 SV *ret = NEWSV (0, usize + 1); 43 SV *ret = NEWSV (0, usize + 1);
56 unsigned char *dst; 44 unsigned char *dst;
140 128
141static SV * 129static SV *
142decompress_sv (SV *data, int skip) 130decompress_sv (SV *data, int skip)
143{ 131{
144 STRLEN usize, csize; 132 STRLEN usize, csize;
145 unsigned char *src = (unsigned char *)SvPV (data, csize) + skip; 133 unsigned char *src = (unsigned char *)SvPVbyte (data, csize) + skip;
146 134
147 if (csize) 135 if (csize)
148 { 136 {
149 void *dst; 137 void *dst;
150 SV *ret; 138 SV *ret;
232} 220}
233 221
234static void 222static void
235need_storable(void) 223need_storable(void)
236{ 224{
237#if PATCHLEVEL < 6
238 char req[8192];
239 sprintf (req, "require %s;", SvPV_nolen (serializer_package));
240 perl_eval_pv (req, 1);
241#else
242 load_module (PERL_LOADMOD_NOIMPORT, serializer_package, Nullsv); 225 load_module (PERL_LOADMOD_NOIMPORT, serializer_package, Nullsv);
243#endif
244 226
245 storable_mstore = GvCV (gv_fetchpv (SvPV_nolen (serializer_mstore ), TRUE, SVt_PVCV)); 227 storable_mstore = GvCV (gv_fetchpv (SvPVbyte_nolen (serializer_mstore ), TRUE, SVt_PVCV));
246 storable_mretrieve = GvCV (gv_fetchpv (SvPV_nolen (serializer_mretrieve), TRUE, SVt_PVCV)); 228 storable_mretrieve = GvCV (gv_fetchpv (SvPVbyte_nolen (serializer_mretrieve), TRUE, SVt_PVCV));
247} 229}
248 230
249MODULE = Compress::LZF PACKAGE = Compress::LZF 231MODULE = Compress::LZF PACKAGE = Compress::LZF
250 232
251BOOT: 233BOOT:
292 SvGETMAGIC (sv); 274 SvGETMAGIC (sv);
293 275
294 if (!SvOK (sv)) 276 if (!SvOK (sv))
295 XPUSHs (sv_2mortal (newSVpvn ("\02", 1))); /* 02 == MAGIC_undef */ 277 XPUSHs (sv_2mortal (newSVpvn ("\02", 1))); /* 02 == MAGIC_undef */
296 else if (SvROK (sv) 278 else if (SvROK (sv)
279 || SvUTF8 (sv)
297 || (SvTYPE(sv) != SVt_IV 280 || (SvTYPE(sv) != SVt_IV
298 && SvTYPE(sv) != SVt_NV 281 && SvTYPE(sv) != SVt_NV
299 && SvTYPE(sv) != SVt_PV 282 && SvTYPE(sv) != SVt_PV
300 && SvTYPE(sv) != SVt_PVIV 283 && SvTYPE(sv) != SVt_PVIV
301 && SvTYPE(sv) != SVt_PVNV 284 && SvTYPE(sv) != SVt_PVNV
302 && SvTYPE(sv) != SVt_PVMG)) /* mstore */ 285 && SvTYPE(sv) != SVt_PVMG)) /* mstore */
303 { 286 {
304 int deref = !SvROK (sv); 287 int deref = !SvROK (sv);
305 288
306 if (!storable_mstore) 289 if (!storable_mstore)
307 need_storable (); 290 need_storable ();
361{ 344{
362 STRLEN svlen; 345 STRLEN svlen;
363 int deref = 0; 346 int deref = 0;
364 347
365 SvGETMAGIC (sv); 348 SvGETMAGIC (sv);
366 if (SvPOK (sv) && IN_RANGE (SvPV (sv, svlen)[0], MAGIC_LO, MAGIC_HI)) 349 if (SvPOK (sv) && IN_RANGE (SvPVbyte (sv, svlen)[0], MAGIC_LO, MAGIC_HI))
367 { 350 {
368 redo: 351 redo:
369 352
370 switch (SvPVX (sv)[0]) 353 switch (SvPVX (sv)[0])
371 { 354 {

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines