static void ml_rsvg_size_callback(gint *w, gint *h, gpointer user_data) { value *cb = user_data; value r; r = callback2_exn(*cb, Val_int(*w), Val_int(*h)); if(Is_exception_result(r)) return; *w = Int_val(Field(r, 0)); *h = Int_val(Field(r, 1)); }
char * range_compress(const char ** c_nodes, const char* c_separator) { CAMLparam0(); CAMLlocal3(caml_result, caml_nodes, caml_separator); caml_nodes = copy_string_array(c_nodes); caml_separator = caml_copy_string(c_separator); caml_result = callback2_exn(*cb_range_compress, caml_nodes, caml_separator); if (range_set_exception(caml_result)) CAMLreturn(NULL); else CAMLreturn(strdup(String_val(caml_result))); }