Hi,

I simply want to interface a C function with OCaml.

OCaml source:
type s_img = int * int * string array
external load_img : string -> s_img = "caml_load_img"

C source:
value caml_load(s_img *img)
{
  CAMLparam0 ();
  CAMLlocal1 (v);
  unsigned char **nimg;

  /*
  ** Dynamic allocation (and initialization) of nimg with malloc (NULL-terminated).
  ** The dimensions are `` nimg[img->height + 1][img->width] ''
  */

  v = alloc_tuple(3);
  Store_field(v, 0, Val_int(img->height));
  Store_field(v, 1, Val_int(img->width));
  Store_field(v, 2, caml_copy_string_array(nimg));

  /* Some calls to the free function */

  CAMLreturn (v);
}

value        caml_load_img(value filename)
{
  CAMLparam1 (filename);
  char        *s = String_val(filename);
  s_img      *img;

  /* Allocation of the s_img structure with C functions */

  CAMLreturn (caml_load(img));
}

The source code is working on Debian but does not on NetBSD (release 3.0.1) where the GC raise Out_memory ! I am using on both architectures the version 3.08.3 of OCaml.

Thanks.

--
Damien `Dam' Lefortier
Hwær cwom mearg? Hwær cwom mago?
            -- The Wanderer v. 92a
EPITA Promo 2010