git.annexia.org
/
ocaml-augeas.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Enhance raise_error to be able to close handle
[ocaml-augeas.git]
/
augeas-c.c
diff --git
a/augeas-c.c
b/augeas-c.c
index
f3f5223
..
81f87f9
100644
(file)
--- a/
augeas-c.c
+++ b/
augeas-c.c
@@
-29,6
+29,8
@@
#include <caml/callback.h>
#include <caml/custom.h>
#include <caml/callback.h>
#include <caml/custom.h>
+#include <stdbool.h>
+
#ifdef __GNUC__
#define NORETURN __attribute__ ((noreturn))
#else
#ifdef __GNUC__
#define NORETURN __attribute__ ((noreturn))
#else
@@
-73,9
+75,11
@@
static const int error_map[] = {
};
static const int error_map_len = sizeof error_map / sizeof error_map[0];
};
static const int error_map_len = sizeof error_map / sizeof error_map[0];
-/* Raise an Augeas.Error exception. */
+/* Raise an Augeas.Error exception, and optionally close the
+ * specified handle.
+ */
static void
static void
-raise_error
(augeas_t t, const char *msg
)
+raise_error
_and_maybe_close (augeas_t t, const char *msg, bool close_handle
)
{
value *exn = caml_named_value ("Augeas.Error");
value args[4];
{
value *exn = caml_named_value ("Augeas.Error");
value args[4];
@@
-85,8
+89,11
@@
raise_error (augeas_t t, const char *msg)
int ocaml_code = -1;
int i;
int ocaml_code = -1;
int i;
- if (code == AUG_ENOMEM)
+ if (code == AUG_ENOMEM) {
+ if (close_handle)
+ aug_close (t);
caml_raise_out_of_memory ();
caml_raise_out_of_memory ();
+ }
aug_err_minor = aug_error_minor_message (t);
aug_err_details = aug_error_details (t);
aug_err_minor = aug_error_minor_message (t);
aug_err_details = aug_error_details (t);
@@
-107,8
+114,12
@@
raise_error (augeas_t t, const char *msg)
args[2] = caml_copy_string (aug_err_minor ? : "");
args[3] = caml_copy_string (aug_err_details ? : "");
args[2] = caml_copy_string (aug_err_minor ? : "");
args[3] = caml_copy_string (aug_err_details ? : "");
+ if (close_handle)
+ aug_close (t);
+
caml_raise_with_args (*exn, 4, args);
}
caml_raise_with_args (*exn, 4, args);
}
+#define raise_error(t, msg) raise_error_and_maybe_close(t, msg, false)
static void
raise_init_error (const char *msg)
static void
raise_init_error (const char *msg)