X-Git-Url: http://git.annexia.org/?p=libguestfs.git;a=blobdiff_plain;f=perl%2FGuestfs.xs;h=e1cd84a345dfe3bcfc03b060324e81f9dc0a10cc;hp=0f90affdcf03065d20c2230dff381ef232200b85;hb=5186251f8f681f2ebb028423bb49a748861fd11e;hpb=babc0846cc911b01a58a7385d30ad25889b7175a diff --git a/perl/Guestfs.xs b/perl/Guestfs.xs index 0f90aff..e1cd84a 100644 --- a/perl/Guestfs.xs +++ b/perl/Guestfs.xs @@ -356,7 +356,7 @@ PREINIT: (void) hv_store (hv, "pe_start", 8, my_newSVull (valout->val[i].pe_start), 0); (void) hv_store (hv, "pv_mda_count", 12, my_newSVll (valout->val[i].pv_mda_count), 0); (void) hv_store (hv, "pv_mda_free", 11, my_newSVull (valout->val[i].pv_mda_free), 0); - PUSHs (sv_2mortal ((SV *) hv)); + PUSHs (sv_2mortal (newRV ((SV *) hv))); } guestfs_free_lvm_pv_list (valout); @@ -388,7 +388,7 @@ PREINIT: (void) hv_store (hv, "pe_start", 8, my_newSVull (valout->val[i].pe_start), 0); (void) hv_store (hv, "pv_mda_count", 12, my_newSVll (valout->val[i].pv_mda_count), 0); (void) hv_store (hv, "pv_mda_free", 11, my_newSVull (valout->val[i].pv_mda_free), 0); - PUSHs (sv_2mortal ((SV *) hv)); + PUSHs (sv_2mortal (newRV ((SV *) hv))); } guestfs_free_lvm_pv_list (valout); @@ -426,7 +426,7 @@ PREINIT: (void) hv_store (hv, "vg_tags", 7, newSVpv (valout->val[i].vg_tags, 0), 0); (void) hv_store (hv, "vg_mda_count", 12, my_newSVll (valout->val[i].vg_mda_count), 0); (void) hv_store (hv, "vg_mda_free", 11, my_newSVull (valout->val[i].vg_mda_free), 0); - PUSHs (sv_2mortal ((SV *) hv)); + PUSHs (sv_2mortal (newRV ((SV *) hv))); } guestfs_free_lvm_vg_list (valout); @@ -463,7 +463,7 @@ PREINIT: (void) hv_store (hv, "vg_tags", 7, newSVpv (valout->val[i].vg_tags, 0), 0); (void) hv_store (hv, "vg_mda_count", 12, my_newSVll (valout->val[i].vg_mda_count), 0); (void) hv_store (hv, "vg_mda_free", 11, my_newSVull (valout->val[i].vg_mda_free), 0); - PUSHs (sv_2mortal ((SV *) hv)); + PUSHs (sv_2mortal (newRV ((SV *) hv))); } guestfs_free_lvm_vg_list (valout); @@ -498,7 +498,7 @@ PREINIT: (void) hv_store (hv, "lv_tags", 7, newSVpv (valout->val[i].lv_tags, 0), 0); (void) hv_store (hv, "mirror_log", 10, newSVpv (valout->val[i].mirror_log, 0), 0); (void) hv_store (hv, "modules", 7, newSVpv (valout->val[i].modules, 0), 0); - PUSHs (sv_2mortal ((SV *) hv)); + PUSHs (sv_2mortal (newRV ((SV *) hv))); } guestfs_free_lvm_lv_list (valout); @@ -532,7 +532,7 @@ PREINIT: (void) hv_store (hv, "lv_tags", 7, newSVpv (valout->val[i].lv_tags, 0), 0); (void) hv_store (hv, "mirror_log", 10, newSVpv (valout->val[i].mirror_log, 0), 0); (void) hv_store (hv, "modules", 7, newSVpv (valout->val[i].modules, 0), 0); - PUSHs (sv_2mortal ((SV *) hv)); + PUSHs (sv_2mortal (newRV ((SV *) hv))); } guestfs_free_lvm_lv_list (valout); @@ -724,6 +724,17 @@ PREINIT: croak ("add_cdrom: %s", guestfs_last_error (g)); void +add_drive_ro (g, filename) + guestfs_h *g; + char *filename; +PREINIT: + int r; + PPCODE: + r = guestfs_add_drive_ro (g, filename); + if (r == -1) + croak ("add_drive_ro: %s", guestfs_last_error (g)); + +void config (g, qemuparam, qemuvalue) guestfs_h *g; char *qemuparam; @@ -951,6 +962,30 @@ PREINIT: croak ("end_busy: %s", guestfs_last_error (g)); void +set_memsize (g, memsize) + guestfs_h *g; + int memsize; +PREINIT: + int r; + PPCODE: + r = guestfs_set_memsize (g, memsize); + if (r == -1) + croak ("set_memsize: %s", guestfs_last_error (g)); + +SV * +get_memsize (g) + guestfs_h *g; +PREINIT: + int memsize; + CODE: + memsize = guestfs_get_memsize (g); + if (memsize == -1) + croak ("get_memsize: %s", guestfs_last_error (g)); + RETVAL = newSViv (memsize); + OUTPUT: + RETVAL + +void mount (g, device, mountpoint) guestfs_h *g; char *device; @@ -1150,7 +1185,7 @@ PREINIT: (void) hv_store (hv, "pe_start", 8, my_newSVull (physvols->val[i].pe_start), 0); (void) hv_store (hv, "pv_mda_count", 12, my_newSVll (physvols->val[i].pv_mda_count), 0); (void) hv_store (hv, "pv_mda_free", 11, my_newSVull (physvols->val[i].pv_mda_free), 0); - PUSHs (sv_2mortal ((SV *) hv)); + PUSHs (sv_2mortal (newRV ((SV *) hv))); } guestfs_free_lvm_pv_list (physvols); @@ -1187,7 +1222,7 @@ PREINIT: (void) hv_store (hv, "vg_tags", 7, newSVpv (volgroups->val[i].vg_tags, 0), 0); (void) hv_store (hv, "vg_mda_count", 12, my_newSVll (volgroups->val[i].vg_mda_count), 0); (void) hv_store (hv, "vg_mda_free", 11, my_newSVull (volgroups->val[i].vg_mda_free), 0); - PUSHs (sv_2mortal ((SV *) hv)); + PUSHs (sv_2mortal (newRV ((SV *) hv))); } guestfs_free_lvm_vg_list (volgroups); @@ -1221,7 +1256,7 @@ PREINIT: (void) hv_store (hv, "lv_tags", 7, newSVpv (logvols->val[i].lv_tags, 0), 0); (void) hv_store (hv, "mirror_log", 10, newSVpv (logvols->val[i].mirror_log, 0), 0); (void) hv_store (hv, "modules", 7, newSVpv (logvols->val[i].modules, 0), 0); - PUSHs (sv_2mortal ((SV *) hv)); + PUSHs (sv_2mortal (newRV ((SV *) hv))); } guestfs_free_lvm_lv_list (logvols); @@ -2375,10 +2410,10 @@ PREINIT: croak ("pvresize: %s", guestfs_last_error (g)); void -sfdisk_N (g, device, n, cyls, heads, sectors, line) +sfdisk_N (g, device, partnum, cyls, heads, sectors, line) guestfs_h *g; char *device; - int n; + int partnum; int cyls; int heads; int sectors; @@ -2386,7 +2421,7 @@ sfdisk_N (g, device, n, cyls, heads, sectors, line) PREINIT: int r; PPCODE: - r = guestfs_sfdisk_N (g, device, n, cyls, heads, sectors, line); + r = guestfs_sfdisk_N (g, device, partnum, cyls, heads, sectors, line); if (r == -1) croak ("sfdisk_N: %s", guestfs_last_error (g)); @@ -2512,3 +2547,448 @@ PREINIT: if (r == -1) croak ("e2fsck_f: %s", guestfs_last_error (g)); +void +sleep (g, secs) + guestfs_h *g; + int secs; +PREINIT: + int r; + PPCODE: + r = guestfs_sleep (g, secs); + if (r == -1) + croak ("sleep: %s", guestfs_last_error (g)); + +SV * +ntfs_3g_probe (g, rw, device) + guestfs_h *g; + int rw; + char *device; +PREINIT: + int status; + CODE: + status = guestfs_ntfs_3g_probe (g, rw, device); + if (status == -1) + croak ("ntfs_3g_probe: %s", guestfs_last_error (g)); + RETVAL = newSViv (status); + OUTPUT: + RETVAL + +SV * +sh (g, command) + guestfs_h *g; + char *command; +PREINIT: + char *output; + CODE: + output = guestfs_sh (g, command); + if (output == NULL) + croak ("sh: %s", guestfs_last_error (g)); + RETVAL = newSVpv (output, 0); + free (output); + OUTPUT: + RETVAL + +void +sh_lines (g, command) + guestfs_h *g; + char *command; +PREINIT: + char **lines; + int i, n; + PPCODE: + lines = guestfs_sh_lines (g, command); + if (lines == NULL) + croak ("sh_lines: %s", guestfs_last_error (g)); + for (n = 0; lines[n] != NULL; ++n) /**/; + EXTEND (SP, n); + for (i = 0; i < n; ++i) { + PUSHs (sv_2mortal (newSVpv (lines[i], 0))); + free (lines[i]); + } + free (lines); + +void +glob_expand (g, pattern) + guestfs_h *g; + char *pattern; +PREINIT: + char **paths; + int i, n; + PPCODE: + paths = guestfs_glob_expand (g, pattern); + if (paths == NULL) + croak ("glob_expand: %s", guestfs_last_error (g)); + for (n = 0; paths[n] != NULL; ++n) /**/; + EXTEND (SP, n); + for (i = 0; i < n; ++i) { + PUSHs (sv_2mortal (newSVpv (paths[i], 0))); + free (paths[i]); + } + free (paths); + +void +scrub_device (g, device) + guestfs_h *g; + char *device; +PREINIT: + int r; + PPCODE: + r = guestfs_scrub_device (g, device); + if (r == -1) + croak ("scrub_device: %s", guestfs_last_error (g)); + +void +scrub_file (g, file) + guestfs_h *g; + char *file; +PREINIT: + int r; + PPCODE: + r = guestfs_scrub_file (g, file); + if (r == -1) + croak ("scrub_file: %s", guestfs_last_error (g)); + +void +scrub_freespace (g, dir) + guestfs_h *g; + char *dir; +PREINIT: + int r; + PPCODE: + r = guestfs_scrub_freespace (g, dir); + if (r == -1) + croak ("scrub_freespace: %s", guestfs_last_error (g)); + +SV * +mkdtemp (g, template) + guestfs_h *g; + char *template; +PREINIT: + char *dir; + CODE: + dir = guestfs_mkdtemp (g, template); + if (dir == NULL) + croak ("mkdtemp: %s", guestfs_last_error (g)); + RETVAL = newSVpv (dir, 0); + free (dir); + OUTPUT: + RETVAL + +SV * +wc_l (g, path) + guestfs_h *g; + char *path; +PREINIT: + int lines; + CODE: + lines = guestfs_wc_l (g, path); + if (lines == -1) + croak ("wc_l: %s", guestfs_last_error (g)); + RETVAL = newSViv (lines); + OUTPUT: + RETVAL + +SV * +wc_w (g, path) + guestfs_h *g; + char *path; +PREINIT: + int words; + CODE: + words = guestfs_wc_w (g, path); + if (words == -1) + croak ("wc_w: %s", guestfs_last_error (g)); + RETVAL = newSViv (words); + OUTPUT: + RETVAL + +SV * +wc_c (g, path) + guestfs_h *g; + char *path; +PREINIT: + int chars; + CODE: + chars = guestfs_wc_c (g, path); + if (chars == -1) + croak ("wc_c: %s", guestfs_last_error (g)); + RETVAL = newSViv (chars); + OUTPUT: + RETVAL + +void +head (g, path) + guestfs_h *g; + char *path; +PREINIT: + char **lines; + int i, n; + PPCODE: + lines = guestfs_head (g, path); + if (lines == NULL) + croak ("head: %s", guestfs_last_error (g)); + for (n = 0; lines[n] != NULL; ++n) /**/; + EXTEND (SP, n); + for (i = 0; i < n; ++i) { + PUSHs (sv_2mortal (newSVpv (lines[i], 0))); + free (lines[i]); + } + free (lines); + +void +head_n (g, nrlines, path) + guestfs_h *g; + int nrlines; + char *path; +PREINIT: + char **lines; + int i, n; + PPCODE: + lines = guestfs_head_n (g, nrlines, path); + if (lines == NULL) + croak ("head_n: %s", guestfs_last_error (g)); + for (n = 0; lines[n] != NULL; ++n) /**/; + EXTEND (SP, n); + for (i = 0; i < n; ++i) { + PUSHs (sv_2mortal (newSVpv (lines[i], 0))); + free (lines[i]); + } + free (lines); + +void +tail (g, path) + guestfs_h *g; + char *path; +PREINIT: + char **lines; + int i, n; + PPCODE: + lines = guestfs_tail (g, path); + if (lines == NULL) + croak ("tail: %s", guestfs_last_error (g)); + for (n = 0; lines[n] != NULL; ++n) /**/; + EXTEND (SP, n); + for (i = 0; i < n; ++i) { + PUSHs (sv_2mortal (newSVpv (lines[i], 0))); + free (lines[i]); + } + free (lines); + +void +tail_n (g, nrlines, path) + guestfs_h *g; + int nrlines; + char *path; +PREINIT: + char **lines; + int i, n; + PPCODE: + lines = guestfs_tail_n (g, nrlines, path); + if (lines == NULL) + croak ("tail_n: %s", guestfs_last_error (g)); + for (n = 0; lines[n] != NULL; ++n) /**/; + EXTEND (SP, n); + for (i = 0; i < n; ++i) { + PUSHs (sv_2mortal (newSVpv (lines[i], 0))); + free (lines[i]); + } + free (lines); + +SV * +df (g) + guestfs_h *g; +PREINIT: + char *output; + CODE: + output = guestfs_df (g); + if (output == NULL) + croak ("df: %s", guestfs_last_error (g)); + RETVAL = newSVpv (output, 0); + free (output); + OUTPUT: + RETVAL + +SV * +df_h (g) + guestfs_h *g; +PREINIT: + char *output; + CODE: + output = guestfs_df_h (g); + if (output == NULL) + croak ("df_h: %s", guestfs_last_error (g)); + RETVAL = newSVpv (output, 0); + free (output); + OUTPUT: + RETVAL + +SV * +du (g, path) + guestfs_h *g; + char *path; +PREINIT: + int64_t sizekb; + CODE: + sizekb = guestfs_du (g, path); + if (sizekb == -1) + croak ("du: %s", guestfs_last_error (g)); + RETVAL = my_newSVll (sizekb); + OUTPUT: + RETVAL + +void +initrd_list (g, path) + guestfs_h *g; + char *path; +PREINIT: + char **filenames; + int i, n; + PPCODE: + filenames = guestfs_initrd_list (g, path); + if (filenames == NULL) + croak ("initrd_list: %s", guestfs_last_error (g)); + for (n = 0; filenames[n] != NULL; ++n) /**/; + EXTEND (SP, n); + for (i = 0; i < n; ++i) { + PUSHs (sv_2mortal (newSVpv (filenames[i], 0))); + free (filenames[i]); + } + free (filenames); + +void +mount_loop (g, file, mountpoint) + guestfs_h *g; + char *file; + char *mountpoint; +PREINIT: + int r; + PPCODE: + r = guestfs_mount_loop (g, file, mountpoint); + if (r == -1) + croak ("mount_loop: %s", guestfs_last_error (g)); + +void +mkswap (g, device) + guestfs_h *g; + char *device; +PREINIT: + int r; + PPCODE: + r = guestfs_mkswap (g, device); + if (r == -1) + croak ("mkswap: %s", guestfs_last_error (g)); + +void +mkswap_L (g, label, device) + guestfs_h *g; + char *label; + char *device; +PREINIT: + int r; + PPCODE: + r = guestfs_mkswap_L (g, label, device); + if (r == -1) + croak ("mkswap_L: %s", guestfs_last_error (g)); + +void +mkswap_U (g, uuid, device) + guestfs_h *g; + char *uuid; + char *device; +PREINIT: + int r; + PPCODE: + r = guestfs_mkswap_U (g, uuid, device); + if (r == -1) + croak ("mkswap_U: %s", guestfs_last_error (g)); + +void +mknod (g, mode, devmajor, devminor, path) + guestfs_h *g; + int mode; + int devmajor; + int devminor; + char *path; +PREINIT: + int r; + PPCODE: + r = guestfs_mknod (g, mode, devmajor, devminor, path); + if (r == -1) + croak ("mknod: %s", guestfs_last_error (g)); + +void +mkfifo (g, mode, path) + guestfs_h *g; + int mode; + char *path; +PREINIT: + int r; + PPCODE: + r = guestfs_mkfifo (g, mode, path); + if (r == -1) + croak ("mkfifo: %s", guestfs_last_error (g)); + +void +mknod_b (g, mode, devmajor, devminor, path) + guestfs_h *g; + int mode; + int devmajor; + int devminor; + char *path; +PREINIT: + int r; + PPCODE: + r = guestfs_mknod_b (g, mode, devmajor, devminor, path); + if (r == -1) + croak ("mknod_b: %s", guestfs_last_error (g)); + +void +mknod_c (g, mode, devmajor, devminor, path) + guestfs_h *g; + int mode; + int devmajor; + int devminor; + char *path; +PREINIT: + int r; + PPCODE: + r = guestfs_mknod_c (g, mode, devmajor, devminor, path); + if (r == -1) + croak ("mknod_c: %s", guestfs_last_error (g)); + +SV * +umask (g, mask) + guestfs_h *g; + int mask; +PREINIT: + int oldmask; + CODE: + oldmask = guestfs_umask (g, mask); + if (oldmask == -1) + croak ("umask: %s", guestfs_last_error (g)); + RETVAL = newSViv (oldmask); + OUTPUT: + RETVAL + +void +readdir (g, dir) + guestfs_h *g; + char *dir; +PREINIT: + struct guestfs_dirent_list *entries; + int i; + HV *hv; + PPCODE: + entries = guestfs_readdir (g, dir); + if (entries == NULL) + croak ("readdir: %s", guestfs_last_error (g)); + EXTEND (SP, entries->len); + for (i = 0; i < entries->len; ++i) { + hv = newHV (); + (void) hv_store (hv, "ino", 3, my_newSVull (entries->val[i].ino), 0); + (void) hv_store (hv, "ftyp", 4, newSVpv (&entries->val[i].ftyp, 1), 0); + (void) hv_store (hv, "name", 4, newSVpv (entries->val[i].name, 0), 0); + PUSHs (newRV (sv_2mortal ((SV *) hv))); + } + guestfs_free_dirent_list (entries); +