Commit c2b5da973389484e2333c7096ceaaaac1eb007b4

Ryan C. Gordon 2014-02-04T11:38:40

Added SDL_GetAssertionHandler() and SDL_GetDefaultAssertionHandler().

diff --git a/include/SDL_assert.h b/include/SDL_assert.h
index e67dca9..4441dbf 100644
--- a/include/SDL_assert.h
+++ b/include/SDL_assert.h
@@ -203,6 +203,35 @@ extern DECLSPEC void SDLCALL SDL_SetAssertionHandler(
                                             void *userdata);
 
 /**
+ *  \brief Get the default assertion handler.
+ *
+ *  This returns the function pointer that is called by default when an
+ *   assertion is triggered. This is an internal function provided by SDL,
+ *   that is used for assertions when SDL_SetAssertionHandler() hasn't been
+ *   used to provide a different function.
+ *
+ *  \return The default SDL_AssertionHandler that is called when an assert triggers.
+ */
+extern DECLSPEC SDL_AssertionHandler SDLCALL SDL_GetDefaultAssertionHandler(void);
+
+/**
+ *  \brief Get the current assertion handler.
+ *
+ *  This returns the function pointer that is called when an assertion is
+ *   triggered. This is either the value last passed to
+ *   SDL_SetAssertionHandler(), or if no application-specified function is
+ *   set, is equivalent to calling SDL_GetDefaultAssertionHandler().
+ *
+ *   \param puserdata Pointer to a void*, which will store the "userdata"
+ *                    pointer that was passed to SDL_SetAssertionHandler().
+ *                    This value will always be NULL for the default handler.
+ *                    If you don't care about this data, it is safe to pass
+ *                    a NULL pointer to this function to ignore it.
+ *  \return The SDL_AssertionHandler that is called when an assert triggers.
+ */
+extern DECLSPEC SDL_AssertionHandler SDLCALL SDL_GetAssertionHandler(void **puserdata);
+
+/**
  *  \brief Get a list of all assertion failures.
  *
  *  Get all assertions triggered since last call to SDL_ResetAssertionReport(),
diff --git a/src/SDL_assert.c b/src/SDL_assert.c
index d0de824..6a6bf83 100644
--- a/src/SDL_assert.c
+++ b/src/SDL_assert.c
@@ -366,4 +366,17 @@ void SDL_ResetAssertionReport(void)
     triggered_assertions = NULL;
 }
 
+SDL_AssertionHandler SDL_GetDefaultAssertionHandler(void)
+{
+    return SDL_PromptAssertion;
+}
+
+SDL_AssertionHandler SDL_GetAssertionHandler(void **userdata)
+{
+    if (userdata != NULL) {
+        *userdata = assertion_userdata;
+    }
+    return assertion_handler;
+}
+
 /* vi: set ts=4 sw=4 expandtab: */
diff --git a/src/dynapi/SDL_dynapi_overrides.h b/src/dynapi/SDL_dynapi_overrides.h
index feefa58..e6234cb 100644
--- a/src/dynapi/SDL_dynapi_overrides.h
+++ b/src/dynapi/SDL_dynapi_overrides.h
@@ -572,3 +572,5 @@
 #define SDL_GameControllerAddMappingsFromRW SDL_GameControllerAddMappingsFromRW_REAL
 #define SDL_GL_ResetAttributes SDL_GL_ResetAttributes_REAL
 #define SDL_HasAVX SDL_HasAVX_REAL
+#define SDL_GetDefaultAssertionHandler SDL_GetDefaultAssertionHandler_REAL
+#define SDL_GetAssertionHandler SDL_GetAssertionHandler_REAL
diff --git a/src/dynapi/SDL_dynapi_procs.h b/src/dynapi/SDL_dynapi_procs.h
index e00d73a..362bb83 100644
--- a/src/dynapi/SDL_dynapi_procs.h
+++ b/src/dynapi/SDL_dynapi_procs.h
@@ -601,3 +601,5 @@ SDL_DYNAPI_PROC(int,SDL_vsscanf,(const char *a, const char *b, va_list c),(a,b,c
 SDL_DYNAPI_PROC(int,SDL_GameControllerAddMappingsFromRW,(SDL_RWops *a, int b),(a,b),return)
 SDL_DYNAPI_PROC(void,SDL_GL_ResetAttributes,(void),(),)
 SDL_DYNAPI_PROC(SDL_bool,SDL_HasAVX,(void),(),return)
+SDL_DYNAPI_PROC(SDL_AssertionHandler,SDL_GetDefaultAssertionHandler,(void),(),return)
+SDL_DYNAPI_PROC(SDL_AssertionHandler,SDL_GetAssertionHandler,(void **a),(a),return)