X-Git-Url: http://git.annexia.org/?p=libguestfs.git;a=blobdiff_plain;f=perl%2Ftypemap;h=d978e601e07e6acc70c9b9fc63fa80a0bb59f9f2;hp=421e73a263f8b3b02d3426decfb40990e0fc2a7d;hb=4accf3197235300029d04d0ab637b66eaaf9f8df;hpb=1ee6da96efe8340a7d3904a865d80cd59d9d3fde diff --git a/perl/typemap b/perl/typemap index 421e73a..d978e60 100644 --- a/perl/typemap +++ b/perl/typemap @@ -2,16 +2,22 @@ TYPEMAP char * T_PV const char * T_PV guestfs_h * O_OBJECT_guestfs_h +int64_t T_IV INPUT O_OBJECT_guestfs_h - if (sv_isobject ($arg) && SvTYPE (SvRV ($arg)) == SVt_PVMG) - $var = ($type) SvIV ((SV *) SvRV ($arg)); - else { - warn (\"${Package}::$func_name(): $var is not a blessed SV reference\"); - XSRETURN_UNDEF; + if (sv_isobject ($arg) && sv_derived_from ($arg, \"Sys::Guestfs\") && + SvTYPE ($arg) == SVt_RV && + SvTYPE (SvRV ($arg)) == SVt_PVHV) { + HV *hv = (HV *) SvRV ($arg); + SV **svp = hv_fetch (hv, \"_g\", 2, 0); + if (svp == NULL) + croak (\"${Package}::$func_name(): called on a closed handle\"); + $var = ($type) SvIV (*svp); + } else { + croak (\"${Package}::$func_name(): $var is not a blessed HV reference\"); } OUTPUT O_OBJECT_guestfs_h - sv_setref_pv ($arg, "Sys::Guestfs", (void *) $var); + sv_setiv ($arg, PTR2IV ($var));