Perl bindings fix: Not enough memory was allocated for array params.
[libguestfs.git] / perl / Guestfs.xs
index d29d5a0..5ce5def 100644 (file)
@@ -68,7 +68,7 @@ XS_unpack_charPtrPtr (SV *arg) {
     croak ("array reference expected");
 
   av = (AV *)SvRV (arg);
-  ret = malloc (av_len (av) + 1 + 1);
+  ret = malloc ((av_len (av) + 1 + 1) * sizeof (char *));
   if (!ret)
     croak ("malloc failed");
 
@@ -88,6 +88,8 @@ XS_unpack_charPtrPtr (SV *arg) {
 
 MODULE = Sys::Guestfs  PACKAGE = Sys::Guestfs
 
+PROTOTYPES: ENABLE
+
 guestfs_h *
 _create ()
    CODE:
@@ -350,6 +352,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;
@@ -1697,3 +1709,57 @@ PREINIT:
  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
+