X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=libvirt%2Flibvirt_c_epilogue.c;h=cea975a1aef49ef8223b0161cc1f9c1ddcc7f814;hb=c27cacae2abac36e2ae89e3e354ec7b0ba8a70dc;hp=4649724d2331bb53cc0e90e13348601e9663270c;hpb=d7e0e6112db9411b0d7aaa8cbf5ce85c27e7d52d;p=ocaml-libvirt.git diff --git a/libvirt/libvirt_c_epilogue.c b/libvirt/libvirt_c_epilogue.c index 4649724..cea975a 100644 --- a/libvirt/libvirt_c_epilogue.c +++ b/libvirt/libvirt_c_epilogue.c @@ -45,6 +45,22 @@ Val_opt (void *ptr, Val_ptr_t Val_ptr) CAMLreturn (optv); } +static value +Val_opt_const (const void *ptr, Val_const_ptr_t Val_ptr) +{ + CAMLparam0 (); + CAMLlocal2 (optv, ptrv); + + if (ptr) { /* Some ptr */ + optv = caml_alloc (1, 0); + ptrv = Val_ptr (ptr); + Store_field (optv, 0, ptrv); + } else /* None */ + optv = Val_int (0); + + CAMLreturn (optv); +} + #if 0 static value option_default (value option, value deflt) @@ -57,14 +73,14 @@ option_default (value option, value deflt) #endif static void -_raise_virterror (virConnectPtr conn, const char *fn) +_raise_virterror (const char *fn) { CAMLparam0 (); CAMLlocal1 (rv); virErrorPtr errp; struct _virError err; - errp = conn ? virConnGetLastError (conn) : virGetLastError (); + errp = virGetLastError (); if (!errp) { /* Fake a _virError structure. */ @@ -84,19 +100,34 @@ _raise_virterror (virConnectPtr conn, const char *fn) (void) caml__frame; } -/* Raise an error if a function is not supported. */ -static void -not_supported (const char *fn) +static int +_list_length (value listv) +{ + CAMLparam1 (listv); + int len = 0; + + for (; listv != Val_emptylist; listv = Field (listv, 1), ++len) {} + + CAMLreturnT (int, len); +} + +static value +Val_virconnectcredential (const virConnectCredentialPtr cred) { CAMLparam0 (); - CAMLlocal1 (fnv); + CAMLlocal1 (rv); - fnv = caml_copy_string (fn); - caml_raise_with_arg (*caml_named_value ("ocaml_libvirt_not_supported"), fnv); + rv = caml_alloc (4, 0); + Store_field (rv, 0, Val_int (cred->type - 1)); + Store_field (rv, 1, caml_copy_string (cred->prompt)); + Store_field (rv, 2, + Val_opt_const (cred->challenge, + (Val_const_ptr_t) caml_copy_string)); + Store_field (rv, 3, + Val_opt_const (cred->defresult, + (Val_const_ptr_t) caml_copy_string)); - /*NOTREACHED*/ - /* Suppresses a compiler warning. */ - (void) caml__frame; + CAMLreturn (rv); } /* Convert the virErrorNumber, virErrorDomain and virErrorLevel enums @@ -112,8 +143,8 @@ not_supported (const char *fn) * to convert it into VIR_*_UNKNOWN (code). */ -#define MAX_VIR_CODE 50 /* VIR_ERR_NO_STORAGE_VOL */ -#define MAX_VIR_DOMAIN 17 /* VIR_FROM_STORAGE */ +#define MAX_VIR_CODE 101 /* VIR_ERR_NO_NWFILTER_BINDING */ +#define MAX_VIR_DOMAIN 67 /* VIR_FROM_RESCTRL */ #define MAX_VIR_LEVEL VIR_ERR_ERROR static inline value @@ -197,7 +228,7 @@ static void pol_finalize (value); static void vol_finalize (value); static struct custom_operations conn_custom_operations = { - "conn_custom_operations", + (char *) "conn_custom_operations", conn_finalize, custom_compare_default, custom_hash_default, @@ -206,7 +237,7 @@ static struct custom_operations conn_custom_operations = { }; static struct custom_operations dom_custom_operations = { - "dom_custom_operations", + (char *) "dom_custom_operations", dom_finalize, custom_compare_default, custom_hash_default, @@ -216,7 +247,7 @@ static struct custom_operations dom_custom_operations = { }; static struct custom_operations net_custom_operations = { - "net_custom_operations", + (char *) "net_custom_operations", net_finalize, custom_compare_default, custom_hash_default, @@ -225,7 +256,7 @@ static struct custom_operations net_custom_operations = { }; static struct custom_operations pol_custom_operations = { - "pol_custom_operations", + (char *) "pol_custom_operations", pol_finalize, custom_compare_default, custom_hash_default, @@ -234,7 +265,7 @@ static struct custom_operations pol_custom_operations = { }; static struct custom_operations vol_custom_operations = { - "vol_custom_operations", + (char *) "vol_custom_operations", vol_finalize, custom_compare_default, custom_hash_default,