X-Git-Url: http://git.annexia.org/?p=libguestfs.git;a=blobdiff_plain;f=perl%2FGuestfs.xs;h=f19b9d09720e20772ad0a871dd9a856a4b4eaf25;hp=fe2c81c9bb756f900e8e60edcaefa5cb4ee54d6e;hb=e118c14b9552de311cbc1734e03a3226b484c1e8;hpb=79cdf81e2fb717ea4372a55170d16800cdbddf23 diff --git a/perl/Guestfs.xs b/perl/Guestfs.xs index fe2c81c..f19b9d0 100644 --- a/perl/Guestfs.xs +++ b/perl/Guestfs.xs @@ -64,12 +64,13 @@ XS_unpack_charPtrPtr (SV *arg) { AV *av; I32 i; - if (!arg || !SvOK (arg) || !SvROK (arg) || SvTYPE (SvRV (arg)) != SVt_PVAV) { + if (!arg || !SvOK (arg) || !SvROK (arg) || SvTYPE (SvRV (arg)) != SVt_PVAV) croak ("array reference expected"); - } av = (AV *)SvRV (arg); - ret = (char **)malloc (av_len (av) + 1 + 1); + ret = malloc (av_len (av) + 1 + 1); + if (!ret) + croak ("malloc failed"); for (i = 0; i <= av_len (av); i++) { SV **elem = av_fetch (av, i, 0); @@ -1468,3 +1469,145 @@ PREINIT: if (r == -1) croak ("mount_vfs: %s", guestfs_last_error (g)); +SV * +debug (g, subcmd, extraargs) + guestfs_h *g; + char *subcmd; + char **extraargs; +PREINIT: + char *result; + CODE: + result = guestfs_debug (g, subcmd, extraargs); + free (extraargs); + if (result == NULL) + croak ("debug: %s", guestfs_last_error (g)); + RETVAL = newSVpv (result, 0); + free (result); + OUTPUT: + RETVAL + +void +lvremove (g, device) + guestfs_h *g; + char *device; +PREINIT: + int r; + PPCODE: + r = guestfs_lvremove (g, device); + if (r == -1) + croak ("lvremove: %s", guestfs_last_error (g)); + +void +vgremove (g, vgname) + guestfs_h *g; + char *vgname; +PREINIT: + int r; + PPCODE: + r = guestfs_vgremove (g, vgname); + if (r == -1) + croak ("vgremove: %s", guestfs_last_error (g)); + +void +pvremove (g, device) + guestfs_h *g; + char *device; +PREINIT: + int r; + PPCODE: + r = guestfs_pvremove (g, device); + if (r == -1) + croak ("pvremove: %s", guestfs_last_error (g)); + +void +set_e2label (g, device, label) + guestfs_h *g; + char *device; + char *label; +PREINIT: + int r; + PPCODE: + r = guestfs_set_e2label (g, device, label); + if (r == -1) + croak ("set_e2label: %s", guestfs_last_error (g)); + +SV * +get_e2label (g, device) + guestfs_h *g; + char *device; +PREINIT: + char *label; + CODE: + label = guestfs_get_e2label (g, device); + if (label == NULL) + croak ("get_e2label: %s", guestfs_last_error (g)); + RETVAL = newSVpv (label, 0); + free (label); + OUTPUT: + RETVAL + +void +set_e2uuid (g, device, uuid) + guestfs_h *g; + char *device; + char *uuid; +PREINIT: + int r; + PPCODE: + r = guestfs_set_e2uuid (g, device, uuid); + if (r == -1) + croak ("set_e2uuid: %s", guestfs_last_error (g)); + +SV * +get_e2uuid (g, device) + guestfs_h *g; + char *device; +PREINIT: + char *uuid; + CODE: + uuid = guestfs_get_e2uuid (g, device); + if (uuid == NULL) + croak ("get_e2uuid: %s", guestfs_last_error (g)); + RETVAL = newSVpv (uuid, 0); + free (uuid); + OUTPUT: + RETVAL + +SV * +fsck (g, fstype, device) + guestfs_h *g; + char *fstype; + char *device; +PREINIT: + int status; + CODE: + status = guestfs_fsck (g, fstype, device); + if (status == -1) + croak ("fsck: %s", guestfs_last_error (g)); + RETVAL = newSViv (status); + OUTPUT: + RETVAL + +void +zero (g, device) + guestfs_h *g; + char *device; +PREINIT: + int r; + PPCODE: + r = guestfs_zero (g, device); + if (r == -1) + croak ("zero: %s", guestfs_last_error (g)); + +void +grub_install (g, root, device) + guestfs_h *g; + char *root; + char *device; +PREINIT: + int r; + PPCODE: + r = guestfs_grub_install (g, root, device); + if (r == -1) + croak ("grub_install: %s", guestfs_last_error (g)); +