コード例 #1
0
ファイル: guestfs-c.c プロジェクト: hedongzhang/libguestfs
/* Guestfs.set_event_callback */
value
ocaml_guestfs_set_event_callback (value gv, value closure, value events)
{
  CAMLparam3 (gv, closure, events);
  char key[64];
  int eh;
  uint64_t event_bitmask;

  guestfs_h *g = Guestfs_val (gv);

  event_bitmask = event_bitmask_of_event_list (events);

  value *root = guestfs_int_safe_malloc (g, sizeof *root);
  *root = closure;

  eh = guestfs_set_event_callback (g, event_callback_wrapper,
                                   event_bitmask, 0, root);

  if (eh == -1) {
    free (root);
    ocaml_guestfs_raise_error (g, "set_event_callback");
  }

  caml_register_generational_global_root (root);

  snprintf (key, sizeof key, "_ocaml_event_%d", eh);
  guestfs_set_private (g, key, root);

  CAMLreturn (Val_int (eh));
}
コード例 #2
0
ファイル: guestfs_c.c プロジェクト: gaowanlong/libguestfs
/* Guestfs.set_event_callback */
CAMLprim value
ocaml_guestfs_set_event_callback (value gv, value closure, value events)
{
  CAMLparam3 (gv, closure, events);
  char key[64];
  int eh;
  uint64_t event_bitmask;

  guestfs_h *g = Guestfs_val (gv);

  event_bitmask = event_bitmask_of_event_list (events);

  value *root = guestfs_safe_malloc (g, sizeof *root);
  *root = closure;

  eh = guestfs_set_event_callback (g, event_callback_wrapper,
                                   event_bitmask, 0, root);

  if (eh == -1) {
    free (root);
    ocaml_guestfs_raise_error (g, "set_event_callback");
  }

  /* XXX This global root is generational, but we cannot rely on every
   * user having the OCaml 3.11 version which supports this.
   */
  caml_register_global_root (root);

  snprintf (key, sizeof key, "_ocaml_event_%d", eh);
  guestfs_set_private (g, key, root);

  CAMLreturn (Val_int (eh));
}
コード例 #3
0
ファイル: perl_edit-c.c プロジェクト: FengYang/libguestfs
value
virt_customize_edit_file_perl (value verbosev, value gv, value filev,
                               value exprv)
{
  CAMLparam4 (verbosev, gv, filev, exprv);
  int r;
  guestfs_h *g = Guestfs_val (gv);

  r = edit_file_perl (g, String_val (filev), String_val (exprv), NULL,
                      Bool_val (verbosev));
  if (r == -1)
    ocaml_guestfs_raise_error (g, "edit_file_perl");

  CAMLreturn (Val_unit);
}