Add error message to Augeas.Error
authorPino Toscano <ptoscano@redhat.com>
Wed, 29 May 2019 09:48:45 +0000 (11:48 +0200)
committerRichard W.M. Jones <rjones@redhat.com>
Wed, 29 May 2019 09:55:36 +0000 (10:55 +0100)
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
augeas.ml
augeas.mli

index ae22dff..7f0531f 100644 (file)
@@ -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 *
index 006b76b..aa5a182 100644 (file)
--- 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, "", "", "", ""))
index dc98c62..8cbeae1 100644 (file)
@@ -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
    *)