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.25 by root, Wed Jan 9 20:41:18 2008 UTC vs.
Revision 1.29 by root, Wed Dec 17 00:36:09 2008 UTC

218 else 218 else
219 return newSVpvn ("", 0); 219 return newSVpvn ("", 0);
220} 220}
221 221
222static void 222static void
223need_storable(void) 223need_storable (void)
224{ 224{
225 load_module (PERL_LOADMOD_NOIMPORT, serializer_package, Nullsv); 225 eval_sv (sv_2mortal (Perl_newSVpvf ("require %s", SvPVbyte_nolen (serializer_package))), G_VOID | G_DISCARD);
226 226
227 storable_mstore = GvCV (gv_fetchpv (SvPVbyte_nolen (serializer_mstore ), TRUE, SVt_PVCV)); 227 storable_mstore = (CV *)SvREFCNT_inc (GvCV (gv_fetchpv (SvPVbyte_nolen (serializer_mstore ), TRUE, SVt_PVCV)));
228 storable_mretrieve = GvCV (gv_fetchpv (SvPVbyte_nolen (serializer_mretrieve), TRUE, SVt_PVCV)); 228 storable_mretrieve = (CV *)SvREFCNT_inc (GvCV (gv_fetchpv (SvPVbyte_nolen (serializer_mretrieve), TRUE, SVt_PVCV)));
229} 229}
230 230
231MODULE = Compress::LZF PACKAGE = Compress::LZF 231MODULE = Compress::LZF PACKAGE = Compress::LZF
232 232
233BOOT: 233BOOT:
243 PROTOTYPE: $$$ 243 PROTOTYPE: $$$
244 PPCODE: 244 PPCODE:
245 SvSetSV (serializer_package , package ); 245 SvSetSV (serializer_package , package );
246 SvSetSV (serializer_mstore , mstore ); 246 SvSetSV (serializer_mstore , mstore );
247 SvSetSV (serializer_mretrieve, mretrieve); 247 SvSetSV (serializer_mretrieve, mretrieve);
248 storable_mstore = 248 SvREFCNT_dec (storable_mstore ); storable_mstore = 0;
249 storable_mretrieve = 0; 249 SvREFCNT_dec (storable_mretrieve); storable_mretrieve = 0;
250 250
251void 251void
252compress(data) 252compress(data)
253 SV * data 253 SV * data
254 PROTOTYPE: $ 254 PROTOTYPE: $
283 && SvTYPE(sv) != SVt_PVIV 283 && SvTYPE(sv) != SVt_PVIV
284 && SvTYPE(sv) != SVt_PVNV 284 && SvTYPE(sv) != SVt_PVNV
285 && SvTYPE(sv) != SVt_PVMG)) /* mstore */ 285 && SvTYPE(sv) != SVt_PVMG)) /* mstore */
286 { 286 {
287 int deref = !SvROK (sv); 287 int deref = !SvROK (sv);
288 char *pv;
288 289
289 if (!storable_mstore) 290 if (!storable_mstore)
290 { 291 {
291 PUTBACK; 292 PUTBACK;
292 need_storable (); 293 need_storable ();
299 PUSHMARK (SP); 300 PUSHMARK (SP);
300 XPUSHs (sv); 301 XPUSHs (sv);
301 PUTBACK; 302 PUTBACK;
302 303
303 if (1 != call_sv ((SV *)storable_mstore, G_SCALAR)) 304 if (1 != call_sv ((SV *)storable_mstore, G_SCALAR))
304 croak ("Storable::mstore didn't return a single scalar"); 305 croak ("%s didn't return a single scalar", SvPVbyte_nolen (serializer_mstore));
305 306
306 SPAGAIN; 307 SPAGAIN;
307 308
308 sv = POPs; 309 sv = POPs;
310 pv = SvPV_nolen (sv);
309 311
310 if (SvPVX (sv)[0] == MAGIC_R) 312 if (*pv == MAGIC_R)
311 { 313 {
312 if (deref) 314 if (deref)
313 SvPVX (sv)[0] = MAGIC_R_deref; 315 *pv = MAGIC_R_deref;
314 } 316 }
315 else 317 else
316 { 318 {
317 char pfx[2]; 319 char pfx[2];
318 320
378 PUSHMARK (SP); 380 PUSHMARK (SP);
379 XPUSHs (sv); 381 XPUSHs (sv);
380 PUTBACK; 382 PUTBACK;
381 383
382 if (1 != call_sv ((SV *)storable_mretrieve, G_SCALAR)) 384 if (1 != call_sv ((SV *)storable_mretrieve, G_SCALAR))
383 croak ("Storable::mstore didn't return a single scalar"); 385 croak ("%s didn't return a single scalar", SvPVbyte_nolen (serializer_mretrieve));
384 386
385 SPAGAIN; 387 SPAGAIN;
386 388
387 if (deref) 389 if (deref)
388 SETs (sv_2mortal (SvREFCNT_inc (SvRV (TOPs)))); 390 SETs (sv_2mortal (SvREFCNT_inc (SvRV (TOPs))));
426 PUSHMARK (SP); 428 PUSHMARK (SP);
427 XPUSHs (sv); 429 XPUSHs (sv);
428 PUTBACK; 430 PUTBACK;
429 431
430 if (1 != call_sv ((SV *)storable_mretrieve, G_SCALAR)) 432 if (1 != call_sv ((SV *)storable_mretrieve, G_SCALAR))
431 croak ("Storable::mstore didn't return a single scalar"); 433 croak ("%s didn't return a single scalar", SvPVbyte_nolen (serializer_mretrieve));
432 434
433 SPAGAIN; 435 SPAGAIN;
434 436
435 if (deref) 437 if (deref)
436 { 438 {

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines