X-Git-Url: http://git.annexia.org/?p=libguestfs.git;a=blobdiff_plain;f=perl%2FGuestfs.xs;h=ff7ca9e1abc14582b97498e0eeec05d65f77c413;hp=657a0ba1e9c35f86780ab3d69effd77f88aa54ff;hb=5cd39c83e23eb300d1bdfa806902a31b409ff420;hpb=43db06ea892cc157324a6b837ca430607441c509 diff --git a/perl/Guestfs.xs b/perl/Guestfs.xs index 657a0ba..ff7ca9e 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) * sizeof (char *)); + if (!ret) + croak ("malloc failed"); for (i = 0; i <= av_len (av); i++) { SV **elem = av_fetch (av, i, 0); @@ -87,6 +88,8 @@ XS_unpack_charPtrPtr (SV *arg) { MODULE = Sys::Guestfs PACKAGE = Sys::Guestfs +PROTOTYPES: ENABLE + guestfs_h * _create () CODE: @@ -216,6 +219,30 @@ PREINIT: RETVAL void +set_append (g, append) + guestfs_h *g; + char *append; +PREINIT: + int r; + PPCODE: + r = guestfs_set_append (g, append); + if (r == -1) + croak ("set_append: %s", guestfs_last_error (g)); + +SV * +get_append (g) + guestfs_h *g; +PREINIT: + const char *append; + CODE: + append = guestfs_get_append (g); + if (append == NULL) + croak ("get_append: %s", guestfs_last_error (g)); + RETVAL = newSVpv (append, 0); + OUTPUT: + RETVAL + +void set_autosync (g, autosync) guestfs_h *g; int autosync; @@ -349,6 +376,16 @@ PREINIT: croak ("set_ready: %s", guestfs_last_error (g)); void +end_busy (g) + guestfs_h *g; +PREINIT: + int r; + PPCODE: + r = guestfs_end_busy (g); + if (r == -1) + croak ("end_busy: %s", guestfs_last_error (g)); + +void mount (g, device, mountpoint) guestfs_h *g; char *device; @@ -1429,3 +1466,407 @@ PREINIT: if (r == -1) croak ("tgz_out: %s", guestfs_last_error (g)); +void +mount_ro (g, device, mountpoint) + guestfs_h *g; + char *device; + char *mountpoint; +PREINIT: + int r; + PPCODE: + r = guestfs_mount_ro (g, device, mountpoint); + if (r == -1) + croak ("mount_ro: %s", guestfs_last_error (g)); + +void +mount_options (g, options, device, mountpoint) + guestfs_h *g; + char *options; + char *device; + char *mountpoint; +PREINIT: + int r; + PPCODE: + r = guestfs_mount_options (g, options, device, mountpoint); + if (r == -1) + croak ("mount_options: %s", guestfs_last_error (g)); + +void +mount_vfs (g, options, vfstype, device, mountpoint) + guestfs_h *g; + char *options; + char *vfstype; + char *device; + char *mountpoint; +PREINIT: + int r; + PPCODE: + r = guestfs_mount_vfs (g, options, vfstype, device, mountpoint); + 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)); + +void +cp (g, src, dest) + guestfs_h *g; + char *src; + char *dest; +PREINIT: + int r; + PPCODE: + r = guestfs_cp (g, src, dest); + if (r == -1) + croak ("cp: %s", guestfs_last_error (g)); + +void +cp_a (g, src, dest) + guestfs_h *g; + char *src; + char *dest; +PREINIT: + int r; + PPCODE: + r = guestfs_cp_a (g, src, dest); + if (r == -1) + croak ("cp_a: %s", guestfs_last_error (g)); + +void +mv (g, src, dest) + guestfs_h *g; + char *src; + char *dest; +PREINIT: + int r; + PPCODE: + r = guestfs_mv (g, src, dest); + if (r == -1) + croak ("mv: %s", guestfs_last_error (g)); + +void +drop_caches (g, whattodrop) + guestfs_h *g; + int whattodrop; +PREINIT: + int r; + PPCODE: + r = guestfs_drop_caches (g, whattodrop); + if (r == -1) + croak ("drop_caches: %s", guestfs_last_error (g)); + +SV * +dmesg (g) + guestfs_h *g; +PREINIT: + char *kmsgs; + CODE: + kmsgs = guestfs_dmesg (g); + if (kmsgs == NULL) + croak ("dmesg: %s", guestfs_last_error (g)); + RETVAL = newSVpv (kmsgs, 0); + free (kmsgs); + OUTPUT: + RETVAL + +void +ping_daemon (g) + guestfs_h *g; +PREINIT: + int r; + PPCODE: + r = guestfs_ping_daemon (g); + if (r == -1) + croak ("ping_daemon: %s", guestfs_last_error (g)); + +SV * +equal (g, file1, file2) + guestfs_h *g; + char *file1; + char *file2; +PREINIT: + int equality; + CODE: + equality = guestfs_equal (g, file1, file2); + if (equality == -1) + croak ("equal: %s", guestfs_last_error (g)); + RETVAL = newSViv (equality); + OUTPUT: + RETVAL + +void +strings (g, path) + guestfs_h *g; + char *path; +PREINIT: + char **stringsout; + int i, n; + PPCODE: + stringsout = guestfs_strings (g, path); + if (stringsout == NULL) + croak ("strings: %s", guestfs_last_error (g)); + for (n = 0; stringsout[n] != NULL; ++n) /**/; + EXTEND (SP, n); + for (i = 0; i < n; ++i) { + PUSHs (sv_2mortal (newSVpv (stringsout[i], 0))); + free (stringsout[i]); + } + free (stringsout); + +void +strings_e (g, encoding, path) + guestfs_h *g; + char *encoding; + char *path; +PREINIT: + char **stringsout; + int i, n; + PPCODE: + stringsout = guestfs_strings_e (g, encoding, path); + if (stringsout == NULL) + croak ("strings_e: %s", guestfs_last_error (g)); + for (n = 0; stringsout[n] != NULL; ++n) /**/; + EXTEND (SP, n); + for (i = 0; i < n; ++i) { + PUSHs (sv_2mortal (newSVpv (stringsout[i], 0))); + free (stringsout[i]); + } + free (stringsout); + +SV * +hexdump (g, path) + guestfs_h *g; + char *path; +PREINIT: + char *dump; + CODE: + dump = guestfs_hexdump (g, path); + if (dump == NULL) + croak ("hexdump: %s", guestfs_last_error (g)); + RETVAL = newSVpv (dump, 0); + free (dump); + OUTPUT: + RETVAL + +void +zerofree (g, device) + guestfs_h *g; + char *device; +PREINIT: + int r; + PPCODE: + r = guestfs_zerofree (g, device); + if (r == -1) + croak ("zerofree: %s", guestfs_last_error (g)); + +void +pvresize (g, device) + guestfs_h *g; + char *device; +PREINIT: + int r; + PPCODE: + r = guestfs_pvresize (g, device); + if (r == -1) + croak ("pvresize: %s", guestfs_last_error (g)); + +void +sfdisk_N (g, device, n, cyls, heads, sectors, line) + guestfs_h *g; + char *device; + int n; + int cyls; + int heads; + int sectors; + char *line; +PREINIT: + int r; + PPCODE: + r = guestfs_sfdisk_N (g, device, n, cyls, heads, sectors, line); + if (r == -1) + croak ("sfdisk_N: %s", guestfs_last_error (g)); + +SV * +sfdisk_l (g, device) + guestfs_h *g; + char *device; +PREINIT: + char *partitions; + CODE: + partitions = guestfs_sfdisk_l (g, device); + if (partitions == NULL) + croak ("sfdisk_l: %s", guestfs_last_error (g)); + RETVAL = newSVpv (partitions, 0); + free (partitions); + OUTPUT: + RETVAL + +SV * +sfdisk_kernel_geometry (g, device) + guestfs_h *g; + char *device; +PREINIT: + char *partitions; + CODE: + partitions = guestfs_sfdisk_kernel_geometry (g, device); + if (partitions == NULL) + croak ("sfdisk_kernel_geometry: %s", guestfs_last_error (g)); + RETVAL = newSVpv (partitions, 0); + free (partitions); + OUTPUT: + RETVAL + +SV * +sfdisk_disk_geometry (g, device) + guestfs_h *g; + char *device; +PREINIT: + char *partitions; + CODE: + partitions = guestfs_sfdisk_disk_geometry (g, device); + if (partitions == NULL) + croak ("sfdisk_disk_geometry: %s", guestfs_last_error (g)); + RETVAL = newSVpv (partitions, 0); + free (partitions); + OUTPUT: + RETVAL +