X-Git-Url: http://git.annexia.org/?p=libguestfs.git;a=blobdiff_plain;f=perl%2Ftypemap;h=d978e601e07e6acc70c9b9fc63fa80a0bb59f9f2;hp=97788d303412c4df659facf711ab8cfdd88d51ee;hb=4accf3197235300029d04d0ab637b66eaaf9f8df;hpb=2f1a50d81671810256dce0852e6b1e0810ac44af diff --git a/perl/typemap b/perl/typemap index 97788d3..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));