Add more init flags
[ocaml-augeas.git] / augeas-c.c
index 885b829..f3f5223 100644 (file)
@@ -1,5 +1,5 @@
 /* Augeas OCaml bindings
- * Copyright (C) 2008-2012 Red Hat Inc., Richard W.M. Jones
+ * Copyright (C) 2008-2017 Red Hat Inc., Richard W.M. Jones
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
 #include <caml/callback.h>
 #include <caml/custom.h>
 
+#ifdef __GNUC__
+  #define NORETURN __attribute__ ((noreturn))
+#else
+  #define NORETURN
+#endif
+
+extern CAMLprim value ocaml_augeas_create (value rootv, value loadpathv, value flagsv);
+extern CAMLprim value ocaml_augeas_close (value tv);
+extern CAMLprim value ocaml_augeas_get (value tv, value pathv);
+extern CAMLprim value ocaml_augeas_exists (value tv, value pathv);
+extern CAMLprim value ocaml_augeas_insert (value tv, value beforev, value pathv, value labelv);
+extern CAMLprim value ocaml_augeas_rm (value tv, value pathv);
+extern CAMLprim value ocaml_augeas_match (value tv, value pathv);
+extern CAMLprim value ocaml_augeas_count_matches (value tv, value pathv);
+extern CAMLprim value ocaml_augeas_save (value tv);
+extern CAMLprim value ocaml_augeas_load (value tv);
+extern CAMLprim value ocaml_augeas_set (value tv, value pathv, value valuev);
+extern CAMLprim value ocaml_augeas_transform (value tv, value lensv, value filev, value modev);
+extern CAMLprim value ocaml_augeas_source (value tv, value pathv)
+#ifndef HAVE_AUG_SOURCE
+  NORETURN
+#endif
+;
+
 typedef augeas *augeas_t;
 
 /* Map C aug_errcode_t to OCaml error_code. */
@@ -109,6 +133,10 @@ static const int flag_map[] = {
   /* AugNoStdinc */    AUG_NO_STDINC,
   /* AugSaveNoop */    AUG_SAVE_NOOP,
   /* AugNoLoad */      AUG_NO_LOAD,
+  /* AugNoModlAutoload */ AUG_NO_MODL_AUTOLOAD,
+  /* AugEnableSpan */  AUG_ENABLE_SPAN,
+  /* AugNoErrClose */  AUG_NO_ERR_CLOSE,
+  /* AugTraceModuleLoading */ AUG_TRACE_MODULE_LOADING,
 };
 
 /* Wrap and unwrap augeas_t handles, with a finalizer. */
@@ -127,7 +155,8 @@ static struct custom_operations custom_operations = {
   custom_compare_default,
   custom_hash_default,
   custom_serialize_default,
-  custom_deserialize_default
+  custom_deserialize_default,
+  custom_compare_ext_default,
 };
 
 static value Val_augeas_t (augeas_t t)
@@ -215,7 +244,7 @@ ocaml_augeas_get (value tv, value pathv)
   else if (r == -1)            /* Error or multiple matches */
     raise_error (t, "Augeas.get");
   else
-    failwith ("Augeas.get: bad return value");
+    caml_failwith ("Augeas.get: bad return value");
 
   CAMLreturn (optv);
 }
@@ -390,6 +419,7 @@ ocaml_augeas_transform (value tv, value lensv, value filev, value modev)
 CAMLprim value
 ocaml_augeas_source (value tv, value pathv)
 {
+#ifdef HAVE_AUG_SOURCE
   CAMLparam2 (tv, pathv);
   CAMLlocal2 (optv, v);
   augeas_t t = Augeas_t_val (tv);
@@ -411,4 +441,7 @@ ocaml_augeas_source (value tv, value pathv)
     raise_error (t, "Augeas.source");
 
   CAMLreturn (optv);
+#else
+  caml_failwith ("Augeas.source: function not implemented");
+#endif
 }