X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=libvirt%2Flibvirt_c_epilogue.c;h=497ae6d418e9c7529ba0a36cf7cc6f6a023c1442;hb=c338d3194fb5969c927ece7d4fd09569d54b203b;hp=a279b7e3a87b85d0241e6af4b557c6a7e080e08c;hpb=0f9e3596a93f7792fdc0eb7faccabd0d32493749;p=ocaml-libvirt.git diff --git a/libvirt/libvirt_c_epilogue.c b/libvirt/libvirt_c_epilogue.c index a279b7e..497ae6d 100644 --- a/libvirt/libvirt_c_epilogue.c +++ b/libvirt/libvirt_c_epilogue.c @@ -5,19 +5,22 @@ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. + * version 2 of the License, or (at your option) any later version, + * with the OCaml linking exception described in ../COPYING.LIB. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * - * Please see the file ../COPYING.LIB. + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* Please read libvirt/README file. */ -static char * +static const char * Optstring_val (value strv) { if (strv == Val_int (0)) /* None */ @@ -42,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) @@ -54,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. */ @@ -81,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 @@ -109,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 @@ -190,18 +224,12 @@ Val_virterror (virErrorPtr err) static void conn_finalize (value); static void dom_finalize (value); static void net_finalize (value); -#ifdef HAVE_VIRSTORAGEPOOLPTR static void pol_finalize (value); -#endif -#ifdef HAVE_VIRSTORAGEVOLPTR static void vol_finalize (value); -#endif -#ifdef HAVE_VIRJOBPTR -static void jb_finalize (value); -#endif +static void sec_finalize (value); static struct custom_operations conn_custom_operations = { - "conn_custom_operations", + (char *) "conn_custom_operations", conn_finalize, custom_compare_default, custom_hash_default, @@ -210,7 +238,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, @@ -220,7 +248,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, @@ -228,38 +256,32 @@ static struct custom_operations net_custom_operations = { custom_deserialize_default }; -#ifdef HAVE_VIRSTORAGEPOOLPTR static struct custom_operations pol_custom_operations = { - "pol_custom_operations", + (char *) "pol_custom_operations", pol_finalize, custom_compare_default, custom_hash_default, custom_serialize_default, custom_deserialize_default }; -#endif -#ifdef HAVE_VIRSTORAGEVOLPTR static struct custom_operations vol_custom_operations = { - "vol_custom_operations", + (char *) "vol_custom_operations", vol_finalize, custom_compare_default, custom_hash_default, custom_serialize_default, custom_deserialize_default }; -#endif -#ifdef HAVE_VIRJOBPTR -static struct custom_operations jb_custom_operations = { - "jb_custom_operations", - jb_finalize, +static struct custom_operations sec_custom_operations = { + (char *) "sec_custom_operations", + sec_finalize, custom_compare_default, custom_hash_default, custom_serialize_default, custom_deserialize_default }; -#endif static value Val_connect (virConnectPtr conn) @@ -294,7 +316,6 @@ Val_net (virNetworkPtr net) CAMLreturn (rv); } -#ifdef HAVE_VIRSTORAGEPOOLPTR static value Val_pol (virStoragePoolPtr pol) { @@ -305,9 +326,7 @@ Val_pol (virStoragePoolPtr pol) Pol_val (rv) = pol; CAMLreturn (rv); } -#endif -#ifdef HAVE_VIRSTORAGEVOLPTR static value Val_vol (virStorageVolPtr vol) { @@ -318,20 +337,17 @@ Val_vol (virStorageVolPtr vol) Vol_val (rv) = vol; CAMLreturn (rv); } -#endif -#ifdef HAVE_VIRJOBPTR static value -Val_jb (virJobPtr jb) +Val_sec (virSecretPtr sec) { CAMLparam0 (); CAMLlocal1 (rv); - rv = caml_alloc_custom (&jb_custom_operations, - sizeof (virJobPtr), 0, 1); - Jb_val (rv) = jb; + rv = caml_alloc_custom (&sec_custom_operations, + sizeof (virSecretPtr), 0, 1); + Sec_val (rv) = sec; CAMLreturn (rv); } -#endif /* This wraps up the (dom, conn) pair (Domain.t). */ static value @@ -361,7 +377,6 @@ Val_network (virNetworkPtr net, value connv) CAMLreturn (rv); } -#ifdef HAVE_VIRSTORAGEPOOLPTR /* This wraps up the (pol, conn) pair (Pool.t). */ static value Val_pool (virStoragePoolPtr pol, value connv) @@ -375,9 +390,7 @@ Val_pool (virStoragePoolPtr pol, value connv) Store_field (rv, 1, connv); CAMLreturn (rv); } -#endif -#ifdef HAVE_VIRSTORAGEVOLPTR /* This wraps up the (vol, conn) pair (Volume.t). */ static value Val_volume (virStorageVolPtr vol, value connv) @@ -391,23 +404,20 @@ Val_volume (virStorageVolPtr vol, value connv) Store_field (rv, 1, connv); CAMLreturn (rv); } -#endif -#ifdef HAVE_VIRJOBPTR -/* This wraps up the (jb, conn) pair (Job.t). */ +/* This wraps up the (sec, conn) pair (Secret.t). */ static value -Val_job (virJobPtr jb, value connv) +Val_secret (virSecretPtr sec, value connv) { CAMLparam1 (connv); CAMLlocal2 (rv, v); rv = caml_alloc_tuple (2); - v = Val_jb (jb); + v = Val_sec (sec); Store_field (rv, 0, v); Store_field (rv, 1, connv); CAMLreturn (rv); } -#endif static void conn_finalize (value connv) @@ -430,29 +440,23 @@ net_finalize (value netv) if (net) (void) virNetworkFree (net); } -#ifdef HAVE_VIRSTORAGEPOOLPTR static void pol_finalize (value polv) { virStoragePoolPtr pol = Pol_val (polv); if (pol) (void) virStoragePoolFree (pol); } -#endif -#ifdef HAVE_VIRSTORAGEVOLPTR static void vol_finalize (value volv) { virStorageVolPtr vol = Vol_val (volv); if (vol) (void) virStorageVolFree (vol); } -#endif -#ifdef HAVE_VIRJOBPTR static void -jb_finalize (value jbv) +sec_finalize (value secv) { - virJobPtr jb = Jb_val (jbv); - if (jb) (void) virJobFree (jb); + virSecretPtr sec = Sec_val (secv); + if (sec) (void) virSecretFree (sec); } -#endif