ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/server/cfperl.xs
(Generate patch)

Comparing deliantra/server/server/cfperl.xs (file contents):
Revision 1.27 by root, Tue Aug 29 17:32:19 2006 UTC vs.
Revision 1.28 by root, Wed Aug 30 06:06:27 2006 UTC

466 av_store ((AV *)av, idx, SvREFCNT_inc ((SV *)ext->self)); 466 av_store ((AV *)av, idx, SvREFCNT_inc ((SV *)ext->self));
467 fprintf (fp, "oid %d\n", idx); 467 fprintf (fp, "oid %d\n", idx);
468 } 468 }
469} 469}
470 470
471object_thawer::object_thawer (FILE *fp, const char *filename) 471object_thawer::object_thawer (const char *filename)
472{ 472{
473 this->fp = fp;
474 av = 0; 473 av = 0;
474 fp = 0;
475 475
476 if (!filename) 476 if (!filename)
477 return; 477 return;
478 478
479 dSP; 479 fp = fopen (filename, "r");
480 ENTER; 480 if (!fp)
481 SAVETMPS;
482 PUSHMARK (SP);
483 XPUSHs (sv_2mortal (newSVpv (filename, 0)));
484 PUTBACK;
485
486 if (0 < call_pv ("cf::object_thawer_load", G_SCALAR | G_EVAL))
487 { 481 {
488 SPAGAIN; 482 LOG (llevError, "object_thawer: unable to open '%s': %s.\n", filename, strerror (errno));
489 SV *sv = POPs; 483 return;
490 if (SvROK (sv))
491 av = SvREFCNT_inc (SvRV (sv));
492 } 484 }
493 485
486 if (perl)
487 {
488 dSP;
489 ENTER;
490 SAVETMPS;
491 PUSHMARK (SP);
492 XPUSHs (sv_2mortal (newSVpv (filename, 0)));
493 PUTBACK;
494
495 if (0 < call_pv ("cf::object_thawer_load", G_SCALAR | G_EVAL))
496 {
497 SPAGAIN;
498 SV *sv = POPs;
499 if (SvROK (sv))
500 av = SvREFCNT_inc (SvRV (sv));
501 }
502
494 FREETMPS; 503 FREETMPS;
495 LEAVE; 504 LEAVE;
505 }
496} 506}
497 507
498void object_thawer::get (data_type type, void *obj, attachable_base *ext, int oid) 508void object_thawer::get (data_type type, void *obj, attachable_base *ext, int oid)
499{ 509{
500 if (!av || oid < 0) // this is actually an error of sorts 510 if (!av || oid < 0) // this is actually an error of sorts
517 reattach (type, obj); 527 reattach (type, obj);
518} 528}
519 529
520object_thawer::~object_thawer () 530object_thawer::~object_thawer ()
521{ 531{
532 if (fp) fclose (fp);
522 if (av) SvREFCNT_dec ((AV *)av); 533 if (av) SvREFCNT_dec ((AV *)av);
523} 534}
524 535
525///////////////////////////////////////////////////////////////////////////// 536/////////////////////////////////////////////////////////////////////////////
526 537

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines