From 86377f27225dac39bab55b4e918355de16e6418f Mon Sep 17 00:00:00 2001 From: Pino Toscano Date: Wed, 29 May 2019 11:48:45 +0200 Subject: [PATCH] Add error message to Augeas.Error In addition to all the details already added, provide also the Augeas message as-is. This breaks the API compatibility for the current users once more, although this hopefully is the last change to Augeas.Error. --- augeas-c.c | 20 ++++++++++++-------- augeas.ml | 4 ++-- augeas.mli | 3 ++- 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/augeas-c.c b/augeas-c.c index ae22dff..7f0531f 100644 --- a/augeas-c.c +++ b/augeas-c.c @@ -87,8 +87,9 @@ static void 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 args[5]; const int code = aug_error (t); + const char *aug_err_msg; const char *aug_err_minor; const char *aug_err_details; int ocaml_code = -1; @@ -100,6 +101,7 @@ raise_error_and_maybe_close (augeas_t t, const char *msg, bool close_handle) caml_raise_out_of_memory (); } + aug_err_msg = aug_error_message (t); aug_err_minor = aug_error_minor_message (t); aug_err_details = aug_error_details (t); @@ -116,13 +118,14 @@ raise_error_and_maybe_close (augeas_t t, const char *msg, bool close_handle) Store_field (args[0], 0, Val_int (code)); } args[1] = caml_copy_string (msg); - args[2] = caml_copy_string (aug_err_minor ? : ""); - args[3] = caml_copy_string (aug_err_details ? : ""); + args[2] = caml_copy_string (aug_err_msg); + args[3] = caml_copy_string (aug_err_minor ? : ""); + args[4] = caml_copy_string (aug_err_details ? : ""); if (close_handle) aug_close (t); - caml_raise_with_args (*exn, 4, args); + caml_raise_with_args (*exn, 5, args); } #define raise_error(t, msg) raise_error_and_maybe_close(t, msg, false) @@ -130,15 +133,16 @@ static void raise_init_error (const char *msg) { value *exn = caml_named_value ("Augeas.Error"); - value args[4]; + value args[5]; args[0] = caml_alloc (1, 0); Store_field (args[0], 0, Val_int (-1)); args[1] = caml_copy_string (msg); - args[2] = caml_copy_string ("augeas initialization failed"); - args[3] = caml_copy_string (""); + args[2] = caml_copy_string ("aug_init failed"); + args[3] = caml_copy_string ("augeas initialization failed"); + args[4] = caml_copy_string (""); - caml_raise_with_args (*exn, 4, args); + caml_raise_with_args (*exn, 5, args); } static const char * diff --git a/augeas.ml b/augeas.ml index 006b76b..aa5a182 100644 --- a/augeas.ml +++ b/augeas.ml @@ -52,7 +52,7 @@ type transform_mode = | Include | Exclude -exception Error of error_code * string * string * string +exception Error of error_code * string * string * string * string type path = string @@ -96,4 +96,4 @@ external source : t -> path -> path option = "ocaml_augeas_source" let () = - Callback.register_exception "Augeas.Error" (Error (AugErrInternal, "", "", "")) + Callback.register_exception "Augeas.Error" (Error (AugErrInternal, "", "", "", "")) diff --git a/augeas.mli b/augeas.mli index dc98c62..8cbeae1 100644 --- a/augeas.mli +++ b/augeas.mli @@ -56,11 +56,12 @@ type transform_mode = | Exclude (** The operation mode for the {!transform} function. *) -exception Error of error_code * string * string * string +exception Error of error_code * string * string * string * string (** This exception is thrown when the underlying Augeas library returns an error. The tuple represents: - the Augeas error code - the ocaml-augeas error string + - the Augeas error message - the human-readable explanation of the Augeas error, if available - a string with details of the Augeas error *) -- 1.8.3.1