X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;ds=sidebyside;f=ocaml%2Fguestfs_c.c;h=71f416ab64c718054cf3d8730fcf3a728c941e48;hb=92876a49db8ffbdf3a44d3680c6a8930b4db5cd5;hp=f7d8dff8929072f4f9039a16934390fb9ad71d98;hpb=79125c4dea9c69d08b522ed7c85f26dc6ee1bcb3;p=libguestfs.git diff --git a/ocaml/guestfs_c.c b/ocaml/guestfs_c.c index f7d8dff..71f416a 100644 --- a/ocaml/guestfs_c.c +++ b/ocaml/guestfs_c.c @@ -136,11 +136,7 @@ ocaml_guestfs_close (value gv) CAMLreturn (Val_unit); } -/* Copy string array value. - * The return value is only 'safe' provided we don't allocate anything - * further on the OCaml heap (ie. cannot trigger the OCaml GC) because - * that could move the strings around. - */ +/* Copy string array value. */ char ** ocaml_guestfs_strings_val (guestfs_h *g, value sv) { @@ -150,7 +146,7 @@ ocaml_guestfs_strings_val (guestfs_h *g, value sv) r = guestfs_safe_malloc (g, sizeof (char *) * (Wosize_val (sv) + 1)); for (i = 0; i < Wosize_val (sv); ++i) - r[i] = String_val (Field (sv, i)); + r[i] = guestfs_safe_strdup (g, String_val (Field (sv, i))); r[i] = NULL; CAMLreturnT (char **, r); @@ -160,8 +156,9 @@ ocaml_guestfs_strings_val (guestfs_h *g, value sv) void ocaml_guestfs_free_strings (char **argv) { - /* Don't free the actual strings - they are String_vals on - * the OCaml heap. - */ + unsigned int i; + + for (i = 0; argv[i] != NULL; ++i) + free (argv[i]); free (argv); }