Use -safe-string and fix the library.
[ocaml-libvirt.git] / libvirt / libvirt_c_epilogue.c
index 78bd23e..fa592c9 100644 (file)
@@ -5,7 +5,8 @@
  * 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
@@ -56,14 +57,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. */
@@ -83,21 +84,6 @@ _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)
-{
-  CAMLparam0 ();
-  CAMLlocal1 (fnv);
-
-  fnv = caml_copy_string (fn);
-  caml_raise_with_arg (*caml_named_value ("ocaml_libvirt_not_supported"), fnv);
-
-  /*NOTREACHED*/
-  /* Suppresses a compiler warning. */
-  (void) caml__frame;
-}
-
 /* Convert the virErrorNumber, virErrorDomain and virErrorLevel enums
  * into values (longs because they are variants in OCaml).
  *
@@ -170,47 +156,21 @@ Val_virterror (virErrorPtr err)
   CAMLparam0 ();
   CAMLlocal3 (rv, connv, optv);
 
-  rv = caml_alloc (12, 0);
+  rv = caml_alloc (9, 0);
   Store_field (rv, 0, Val_err_number (err->code));
   Store_field (rv, 1, Val_err_domain (err->domain));
   Store_field (rv, 2,
               Val_opt (err->message, (Val_ptr_t) caml_copy_string));
   Store_field (rv, 3, Val_err_level (err->level));
 
-  /* conn, dom and net fields, all optional */
-  if (err->conn) {
-    connv = Val_connect_no_finalize (err->conn);
-    optv = caml_alloc (1, 0);
-    Store_field (optv, 0, connv);
-    Store_field (rv, 4, optv); /* Some conn */
-
-    if (err->dom) {
-      optv = caml_alloc (1, 0);
-      Store_field (optv, 0, Val_domain_no_finalize (err->dom, connv));
-      Store_field (rv, 5, optv); /* Some (dom, conn) */
-    }
-    else
-      Store_field (rv, 5, Val_int (0)); /* None */
-    if (err->net) {
-      optv = caml_alloc (1, 0);
-      Store_field (optv, 0, Val_network_no_finalize (err->net, connv));
-      Store_field (rv, 11, optv); /* Some (net, conn) */
-    } else
-      Store_field (rv, 11, Val_int (0)); /* None */
-  } else {
-    Store_field (rv, 4, Val_int (0)); /* None */
-    Store_field (rv, 5, Val_int (0)); /* None */
-    Store_field (rv, 11, Val_int (0)); /* None */
-  }
-
-  Store_field (rv, 6,
+  Store_field (rv, 4,
               Val_opt (err->str1, (Val_ptr_t) caml_copy_string));
-  Store_field (rv, 7,
+  Store_field (rv, 5,
               Val_opt (err->str2, (Val_ptr_t) caml_copy_string));
-  Store_field (rv, 8,
+  Store_field (rv, 6,
               Val_opt (err->str3, (Val_ptr_t) caml_copy_string));
-  Store_field (rv, 9, caml_copy_int32 (err->int1));
-  Store_field (rv, 10, caml_copy_int32 (err->int2));
+  Store_field (rv, 7, caml_copy_int32 (err->int1));
+  Store_field (rv, 8, caml_copy_int32 (err->int2));
 
   CAMLreturn (rv);
 }
@@ -218,15 +178,8 @@ 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 struct custom_operations conn_custom_operations = {
   "conn_custom_operations",
@@ -256,7 +209,6 @@ static struct custom_operations net_custom_operations = {
   custom_deserialize_default
 };
 
-#ifdef HAVE_VIRSTORAGEPOOLPTR
 static struct custom_operations pol_custom_operations = {
   "pol_custom_operations",
   pol_finalize,
@@ -265,9 +217,7 @@ static struct custom_operations pol_custom_operations = {
   custom_serialize_default,
   custom_deserialize_default
 };
-#endif
 
-#ifdef HAVE_VIRSTORAGEVOLPTR
 static struct custom_operations vol_custom_operations = {
   "vol_custom_operations",
   vol_finalize,
@@ -276,18 +226,6 @@ static struct custom_operations vol_custom_operations = {
   custom_serialize_default,
   custom_deserialize_default
 };
-#endif
-
-#ifdef HAVE_VIRJOBPTR
-static struct custom_operations jb_custom_operations = {
-  "jb_custom_operations",
-  jb_finalize,
-  custom_compare_default,
-  custom_hash_default,
-  custom_serialize_default,
-  custom_deserialize_default
-};
-#endif
 
 static value
 Val_connect (virConnectPtr conn)
@@ -322,7 +260,6 @@ Val_net (virNetworkPtr net)
   CAMLreturn (rv);
 }
 
-#ifdef HAVE_VIRSTORAGEPOOLPTR
 static value
 Val_pol (virStoragePoolPtr pol)
 {
@@ -333,9 +270,7 @@ Val_pol (virStoragePoolPtr pol)
   Pol_val (rv) = pol;
   CAMLreturn (rv);
 }
-#endif
 
-#ifdef HAVE_VIRSTORAGEVOLPTR
 static value
 Val_vol (virStorageVolPtr vol)
 {
@@ -346,53 +281,6 @@ Val_vol (virStorageVolPtr vol)
   Vol_val (rv) = vol;
   CAMLreturn (rv);
 }
-#endif
-
-#ifdef HAVE_VIRJOBPTR
-static value
-Val_jb (virJobPtr jb)
-{
-  CAMLparam0 ();
-  CAMLlocal1 (rv);
-  rv = caml_alloc_custom (&jb_custom_operations,
-                         sizeof (virJobPtr), 0, 1);
-  Jb_val (rv) = jb;
-  CAMLreturn (rv);
-}
-#endif
-
-/* No-finalize versions of Val_connect, Val_dom, Val_net ONLY for use
- * by virterror wrappers.
- */
-static value
-Val_connect_no_finalize (virConnectPtr conn)
-{
-  CAMLparam0 ();
-  CAMLlocal1 (rv);
-  rv = caml_alloc (1, Abstract_tag);
-  Store_field (rv, 0, (value) conn);
-  CAMLreturn (rv);
-}
-
-static value
-Val_dom_no_finalize (virDomainPtr dom)
-{
-  CAMLparam0 ();
-  CAMLlocal1 (rv);
-  rv = caml_alloc (1, Abstract_tag);
-  Store_field (rv, 0, (value) dom);
-  CAMLreturn (rv);
-}
-
-static value
-Val_net_no_finalize (virNetworkPtr net)
-{
-  CAMLparam0 ();
-  CAMLlocal1 (rv);
-  rv = caml_alloc (1, Abstract_tag);
-  Store_field (rv, 0, (value) net);
-  CAMLreturn (rv);
-}
 
 /* This wraps up the (dom, conn) pair (Domain.t). */
 static value
@@ -422,7 +310,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)
@@ -436,9 +323,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)
@@ -452,52 +337,6 @@ 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). */
-static value
-Val_job (virJobPtr jb, value connv)
-{
-  CAMLparam1 (connv);
-  CAMLlocal2 (rv, v);
-
-  rv = caml_alloc_tuple (2);
-  v = Val_jb (jb);
-  Store_field (rv, 0, v);
-  Store_field (rv, 1, connv);
-  CAMLreturn (rv);
-}
-#endif
-
-/* No-finalize versions of Val_domain, Val_network ONLY for use by
- * virterror wrappers.
- */
-static value
-Val_domain_no_finalize (virDomainPtr dom, value connv)
-{
-  CAMLparam1 (connv);
-  CAMLlocal2 (rv, v);
-
-  rv = caml_alloc_tuple (2);
-  v = Val_dom_no_finalize (dom);
-  Store_field (rv, 0, v);
-  Store_field (rv, 1, connv);
-  CAMLreturn (rv);
-}
-
-static value
-Val_network_no_finalize (virNetworkPtr net, value connv)
-{
-  CAMLparam1 (connv);
-  CAMLlocal2 (rv, v);
-
-  rv = caml_alloc_tuple (2);
-  v = Val_net_no_finalize (net);
-  Store_field (rv, 0, v);
-  Store_field (rv, 1, connv);
-  CAMLreturn (rv);
-}
 
 static void
 conn_finalize (value connv)
@@ -520,29 +359,16 @@ 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)
-{
-  virJobPtr jb = Jb_val (jbv);
-  if (jb) (void) virJobFree (jb);
-}
-#endif