X-Git-Url: http://git.annexia.org/?p=libguestfs.git;a=blobdiff_plain;f=perl%2Ftypemap;fp=perl%2Ftypemap;h=d978e601e07e6acc70c9b9fc63fa80a0bb59f9f2;hp=752ca0d79719d99e16b890342b28385f4899a580;hb=eb566f7dc7974b42ac65729a2e5e5bcee329a0a9;hpb=dbfd93b72f99ebdded394541a48177c415db8cbf diff --git a/perl/typemap b/perl/typemap index 752ca0d..d978e60 100644 --- a/perl/typemap +++ b/perl/typemap @@ -6,13 +6,18 @@ 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));