Blob Blame History Raw
--- ./include/NTL/tools.h.orig	2014-08-26 11:51:43.000000000 -0600
+++ ./include/NTL/tools.h	2014-09-18 20:00:00.000000000 -0600
@@ -310,6 +310,12 @@ long CharToIntVal(long c);
 char IntValToChar(long a);
 
 
+/*
+  This function is not present in vanilla NTL.
+  See tools.c for documentation.
+ */
+void SetErrorCallbackFunction(void (*func)(const char *s, void *context),
+			      void *context);
 
 void Error(const char *s);
 
--- ./src/tools.c.orig	2014-08-26 11:51:42.000000000 -0600
+++ ./src/tools.c	2014-09-18 20:00:00.000000000 -0600
@@ -17,9 +17,33 @@ NTL_START_IMPL
 
 NTL_THREAD_LOCAL void (*ErrorCallback)() = 0;
 
+/*
+   The following code differs from vanilla NTL.
+
+   We add a SetErrorCallbackFunction(). This sets a global callback function
+    _function_,  which gets called with parameter _context_ and an error
+    message string whenever Error() gets called.
+
+   Note that if the custom error handler *returns*, then NTL will dump the
+   error message back to stderr and abort() as it habitually does.
+
+   -- David Harvey (2008-04-12)
+*/
+
+void (*ErrorCallbackFunction)(const char*, void*) = NULL;
+void *ErrorCallbackContext = NULL;
+
+void SetErrorCallbackFunction(void (*function)(const char*, void*), void *context)
+{
+   ErrorCallbackFunction = function;
+   ErrorCallbackContext = context;
+}
 
 void Error(const char *s)
 {
+   if (ErrorCallbackFunction != NULL)
+      ErrorCallbackFunction(s, ErrorCallbackContext);
+
    cerr << s << "\n";
    _ntl_abort();
 }