SDL_assert.c File Reference
`#include "./SDL_internal.h"`
`#include "SDL.h"`
`#include "SDL_atomic.h"`
`#include "SDL_messagebox.h"`
`#include "SDL_video.h"`
`#include "SDL_assert.h"`
`#include "SDL_assert_c.h"`
`#include "video/SDL_sysvideo.h"`
`#include <stdio.h>`
`#include <stdlib.h>`
`#include <unistd.h>`
Include dependency graph for SDL_assert.c:

Go to the source code of this file.

## Macros

#define | ENDLINE "\n"

## Functions

static SDL_assert_state | SDL_PromptAssertion (const SDL_assert_data *data, void *userdata)
static void | debug_print (const char *fmt,...)
static void | SDL_AddAssertionToReport (SDL_assert_data *data)
static void | SDL_GenerateAssertionReport (void)
static void | SDL_ExitProcess (int exitcode)
static void | SDL_AbortAssertion (void)
SDL_assert_state | SDL_ReportAssertion (SDL_assert_data *data, const char *func, const char *file, int line)
void | SDL_AssertionsQuit (void)
void | SDL_SetAssertionHandler (SDL_AssertionHandler handler, void *userdata)
| Set an application-defined assertion handler. More...
const SDL_assert_data * | SDL_GetAssertionReport (void)
| Get a list of all assertion failures. More...
void | SDL_ResetAssertionReport (void)
| Reset the list of all assertion failures. More...
SDL_AssertionHandler | SDL_GetDefaultAssertionHandler (void)
| Get the default assertion handler. More...
SDL_AssertionHandler | SDL_GetAssertionHandler (void **userdata)
| Get the current assertion handler. More...

## Variables

static SDL_assert_data * | triggered_assertions = NULL
static SDL_mutex * | assertion_mutex = NULL
static SDL_AssertionHandler | assertion_handler = SDL_PromptAssertion
static void * | assertion_userdata = NULL

## Macro Definition Documentation

#define ENDLINE "\n"

Referenced by SDL_PromptAssertion().

## Function Documentation

static void debug_print | ( | const char * | fmt,
|  |  | ...
| ) |  |

static

Definition at line 66 of file SDL_assert.c.

References SDL_LOG_CATEGORY_ASSERT, SDL_LOG_PRIORITY_WARN, and SDL_LogMessageV.

Referenced by SDL_GenerateAssertionReport(), and SDL_PromptAssertion().

{
va_list ap;
va_start(ap, fmt);
SDL_LogMessageV(SDL_LOG_CATEGORY_ASSERT, SDL_LOG_PRIORITY_WARN, fmt, ap);
va_end(ap);
}
SDL_LogMessageV
#define SDL_LogMessageV
Definition: SDL_dynapi_overrides.h:245
SDL_LOG_CATEGORY_ASSERT
Definition: SDL_log.h:68
SDL_LOG_PRIORITY_WARN
Definition: SDL_log.h:107

static void SDL_AbortAssertion | ( | void |  | ) |

static

Definition at line 123 of file SDL_assert.c.

References SDL_assert_state, SDL_ExitProcess(), and SDL_Quit.

Referenced by SDL_ReportAssertion().

{
SDL_Quit();
SDL_ExitProcess(42);
}
SDL_Quit
#define SDL_Quit
Definition: SDL_dynapi_overrides.h:64
SDL_ExitProcess
static void SDL_ExitProcess(int exitcode)
Definition: SDL_assert.c:114

static void SDL_AddAssertionToReport | ( | SDL_assert_data * | data | ) |

static

Definition at line 75 of file SDL_assert.c.

References triggered_assertions.

Referenced by SDL_ReportAssertion().

{
/* (data) is always a static struct defined with the assert macros, so
we don't have to worry about copying or allocating them. */
data->trigger_count++;
if (data->trigger_count == 1) { /* not yet added? */
data->next = triggered_assertions;
triggered_assertions = data;
}
}
triggered_assertions
static SDL_assert_data * triggered_assertions
Definition: SDL_assert.c:54
data
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: SDL_opengl.h:1967

void SDL_AssertionsQuit | ( | void |  | ) |

Definition at line 332 of file SDL_assert.c.

References NULL, SDL_DestroyMutex, and SDL_GenerateAssertionReport().

Referenced by SDL_Quit().

{
SDL_GenerateAssertionReport();
if (assertion_mutex != NULL) {
SDL_DestroyMutex(assertion_mutex);
assertion_mutex = NULL;
}
}
SDL_GenerateAssertionReport
static void SDL_GenerateAssertionReport(void)
Definition: SDL_assert.c:87
NULL
#define NULL
Definition: begin_code.h:143
SDL_DestroyMutex
#define SDL_DestroyMutex
Definition: SDL_dynapi_overrides.h:269
assertion_mutex
static SDL_mutex * assertion_mutex
Definition: SDL_assert.c:56

static void SDL_ExitProcess | ( | int | exitcode | ) |

static

Definition at line 114 of file SDL_assert.c.

Referenced by SDL_AbortAssertion(), and SDL_ReportAssertion().

{
#ifdef __WIN32__
ExitProcess(exitcode);
#else
_exit(exitcode);
#endif
}

static void SDL_GenerateAssertionReport | ( | void |  | ) |

static

Definition at line 87 of file SDL_assert.c.

References assertion_handler, debug_print(), NULL, SDL_assert_data, SDL_PromptAssertion(), SDL_ResetAssertionReport(), and triggered_assertions.

Referenced by SDL_AssertionsQuit().

{
const SDL_assert_data *item = triggered_assertions;
/* only do this if the app hasn't assigned an assertion handler. */
if ((item != NULL) && (assertion_handler != SDL_PromptAssertion)) {
debug_print("\n\nSDL assertion report.\n");
debug_print("All SDL assertions between last init/quit:\n\n");
while (item != NULL) {
debug_print(
"'%s'\n"
" * %s (%s:%d)\n"
" * triggered %u time%s.\n"
" * always ignore: %s.\n",
item->condition, item->function, item->filename,
item->linenum, item->trigger_count,
(item->trigger_count == 1) ? "" : "s",
item->always_ignore ? "yes" : "no");
item = item->next;
}
debug_print("\n");
SDL_ResetAssertionReport();
}
}
assertion_handler
static SDL_AssertionHandler assertion_handler
Definition: SDL_assert.c:57
triggered_assertions
static SDL_assert_data * triggered_assertions
Definition: SDL_assert.c:54
SDL_ResetAssertionReport
void SDL_ResetAssertionReport(void)
Reset the list of all assertion failures.
Definition: SDL_assert.c:357
SDL_PromptAssertion
static SDL_assert_state SDL_PromptAssertion(const SDL_assert_data *data, void *userdata)
Definition: SDL_assert.c:131
debug_print
static void debug_print(const char *fmt,...)
Definition: SDL_assert.c:66
NULL
#define NULL
Definition: begin_code.h:143
SDL_assert_data
#define SDL_assert_data
Definition: SDL_assert.h:278

SDL_AssertionHandler SDL_GetAssertionHandler | ( | void ** | puserdata | ) |

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().

Parameters

  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.

Returns
  The SDL_AssertionHandler that is called when an assert triggers.

Definition at line 376 of file SDL_assert.c.

References assertion_handler, assertion_userdata, and NULL.

{
if (userdata != NULL) {
*userdata = assertion_userdata;
}
return assertion_handler;
}
assertion_handler
static SDL_AssertionHandler assertion_handler
Definition: SDL_assert.c:57
assertion_userdata
static void * assertion_userdata
Definition: SDL_assert.c:58
NULL
#define NULL
Definition: begin_code.h:143

const SDL_assert_data* SDL_GetAssertionReport | ( | void |  | ) |

Get a list of all assertion failures.

Get all assertions triggered since last call to SDL_ResetAssertionReport(), or the start of the program.

The proper way to examine this data looks something like this:

`const SDL_AssertData *item = SDL_GetAssertionReport(); while (item) { printf("'%s', %s (%s:%d), triggered %u times, always ignore: %s.\n", item->condition, item->function, item->filename, item->linenum, item->trigger_count, item->always_ignore ? "yes" : "no"); item = item->next; }`

Returns
  List of all assertions.

See also
  SDL_ResetAssertionReport

Definition at line 352 of file SDL_assert.c.

References triggered_assertions.

{
return triggered_assertions;
}
triggered_assertions
static SDL_assert_data * triggered_assertions
Definition: SDL_assert.c:54

SDL_AssertionHandler SDL_GetDefaultAssertionHandler | ( | void |  | ) |

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.

Returns
  The default SDL_AssertionHandler that is called when an assert triggers.

Definition at line 371 of file SDL_assert.c.

References SDL_PromptAssertion().

{
return SDL_PromptAssertion;
}
SDL_PromptAssertion
static SDL_assert_state SDL_PromptAssertion(const SDL_assert_data *data, void *userdata)
Definition: SDL_assert.c:131

static SDL_assert_state SDL_PromptAssertion | ( | const SDL_assert_data * | data,
|  | void * | userdata
| ) |  |

static

Definition at line 131 of file SDL_assert.c.

References SDL_MessageBoxData::buttons, debug_print(), ENDLINE, SDL_MessageBoxData::flags, SDL_MessageBoxData::message, NULL, SDL_MessageBoxData::numbuttons, SDL_arraysize, SDL_assert_state, SDL_ASSERTION_ABORT, SDL_ASSERTION_ALWAYS_IGNORE, SDL_ASSERTION_BREAK, SDL_ASSERTION_IGNORE, SDL_ASSERTION_RETRY, SDL_getenv, SDL_GetFocusWindow(), SDL_GetWindowFlags, SDL_MAX_LOG_MESSAGE, SDL_MESSAGEBOX_BUTTON_ESCAPEKEY_DEFAULT, SDL_MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT, SDL_MESSAGEBOX_WARNING, SDL_MinimizeWindow, SDL_RestoreWindow, SDL_ShowMessageBox, SDL_snprintf, SDL_stack_alloc, SDL_stack_free, SDL_strcmp, SDL_WINDOW_FULLSCREEN, SDL_zero, state, SDL_MessageBoxData::title, void, window, and SDL_MessageBoxData::window.

Referenced by SDL_GenerateAssertionReport(), SDL_GetDefaultAssertionHandler(), and SDL_SetAssertionHandler().

{
#ifdef __WIN32__
#define ENDLINE "\r\n"
#else
#define ENDLINE "\n"
#endif
const char *envr;
SDL_assert_state state = SDL_ASSERTION_ABORT;
SDL_Window *window;
SDL_MessageBoxData messagebox;
SDL_MessageBoxButtonData buttons[] = {
{ 0, SDL_ASSERTION_RETRY, "Retry" },
{ 0, SDL_ASSERTION_BREAK, "Break" },
{ 0, SDL_ASSERTION_ABORT, "Abort" },
{ SDL_MESSAGEBOX_BUTTON_ESCAPEKEY_DEFAULT,
SDL_ASSERTION_IGNORE, "Ignore" },
{ SDL_MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT,
SDL_ASSERTION_ALWAYS_IGNORE, "Always Ignore" }
};
char *message;
int selected;
(void) userdata; /* unused in default handler. */
message = SDL_stack_alloc(char, SDL_MAX_LOG_MESSAGE);
if (!message) {
/* Uh oh, we're in real trouble now... */
return SDL_ASSERTION_ABORT;
}
SDL_snprintf(message, SDL_MAX_LOG_MESSAGE,
"Assertion failure at %s (%s:%d), triggered %u %s:" ENDLINE
" '%s'",
data->function, data->filename, data->linenum,
data->trigger_count, (data->trigger_count == 1) ? "time" : "times",
data->condition);
debug_print("\n\n%s\n\n", message);
/* let env. variable override, so unit tests won't block in a GUI. */
envr = SDL_getenv("SDL_ASSERT");
if (envr != NULL) {
SDL_stack_free(message);
if (SDL_strcmp(envr, "abort") == 0) {
return SDL_ASSERTION_ABORT;
} else if (SDL_strcmp(envr, "break") == 0) {
return SDL_ASSERTION_BREAK;
} else if (SDL_strcmp(envr, "retry") == 0) {
return SDL_ASSERTION_RETRY;
} else if (SDL_strcmp(envr, "ignore") == 0) {
return SDL_ASSERTION_IGNORE;
} else if (SDL_strcmp(envr, "always_ignore") == 0) {
return SDL_ASSERTION_ALWAYS_IGNORE;
} else {
return SDL_ASSERTION_ABORT; /* oh well. */
}
}
/* Leave fullscreen mode, if possible (scary!) */
window = SDL_GetFocusWindow();
if (window) {
if (SDL_GetWindowFlags(window) & SDL_WINDOW_FULLSCREEN) {
SDL_MinimizeWindow(window);
} else {
/* !!! FIXME: ungrab the input if we're not fullscreen? */
/* No need to mess with the window */
window = NULL;
}
}
/* Show a messagebox if we can, otherwise fall back to stdio */
SDL_zero(messagebox);
messagebox.flags = SDL_MESSAGEBOX_WARNING;
messagebox.window = window;
messagebox.title = "Assertion Failed";
messagebox.message = message;
messagebox.numbuttons = SDL_arraysize(buttons);
messagebox.buttons = buttons;
if (SDL_ShowMessageBox(&messagebox, &selected) == 0) {
if (selected == -1) {
state = SDL_ASSERTION_IGNORE;
} else {
state = (SDL_assert_state)selected;
}
}
#ifdef HAVE_STDIO_H
else
{
/* this is a little hacky. */
for ( ; ; ) {
char buf[32];
fprintf(stderr, "Abort/Break/Retry/Ignore/AlwaysIgnore? [abriA] : ");
fflush(stderr);
if (fgets(buf, sizeof (buf), stdin) == NULL) {
break;
}
if (SDL_strcmp(buf, "a") == 0) {
state = SDL_ASSERTION_ABORT;
break;
} else if (SDL_strcmp(buf, "b") == 0) {
state = SDL_ASSERTION_BREAK;
break;
} else if (SDL_strcmp(buf, "r") == 0) {
state = SDL_ASSERTION_RETRY;
break;
} else if (SDL_strcmp(buf, "i") == 0) {
state = SDL_ASSERTION_IGNORE;
break;
} else if (SDL_strcmp(buf, "A") == 0) {
state = SDL_ASSERTION_ALWAYS_IGNORE;
break;
}
}
}
#endif /* HAVE_STDIO_H */
/* Re-enter fullscreen mode */
if (window) {
SDL_RestoreWindow(window);
}
SDL_stack_free(message);
return state;
}
SDL_MessageBoxData::message
const char * message
Definition: SDL_messagebox.h:97
SDL_MAX_LOG_MESSAGE
#define SDL_MAX_LOG_MESSAGE
The maximum size of a log message.
Definition: SDL_log.h:54
SDL_MessageBoxData::title
const char * title
Definition: SDL_messagebox.h:96
SDL_MessageBoxData::window
SDL_Window * window
Definition: SDL_messagebox.h:95
message
GLuint GLsizei const GLchar * message
Definition: SDL_opengl_glext.h:2483
window
SDL_Window * window
Definition: testautomation_render.c:26
SDL_MessageBoxData::flags
Uint32 flags
Definition: SDL_messagebox.h:94
state
struct xkb_state * state
Definition: SDL_waylandsym.h:94
SDL_MESSAGEBOX_WARNING
Definition: SDL_messagebox.h:40
data
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: SDL_opengl.h:1967
SDL_GetWindowFlags
#define SDL_GetWindowFlags
Definition: SDL_dynapi_overrides.h:522
SDL_ASSERTION_ABORT
Definition: SDL_assert.h:104
SDL_MinimizeWindow
#define SDL_MinimizeWindow
Definition: SDL_dynapi_overrides.h:541
debug_print
static void debug_print(const char *fmt,...)
Definition: SDL_assert.c:66
SDL_MessageBoxButtonData
Individual button data.
Definition: SDL_messagebox.h:56
SDL_MESSAGEBOX_BUTTON_ESCAPEKEY_DEFAULT
Definition: SDL_messagebox.h:50
SDL_MessageBoxData::numbuttons
int numbuttons
Definition: SDL_messagebox.h:99
SDL_stack_alloc
#define SDL_stack_alloc(type, count)
Definition: SDL_stdinc.h:324
SDL_GetFocusWindow
SDL_Window * SDL_GetFocusWindow(void)
Definition: SDL_video.c:2403
SDL_zero
#define SDL_zero(x)
Definition: SDL_stdinc.h:355
buf
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: SDL_opengl_glext.h:2480
SDL_MessageBoxData::buttons
const SDL_MessageBoxButtonData * buttons
Definition: SDL_messagebox.h:100
SDL_MessageBoxData
MessageBox structure containing title, text, window, etc.
Definition: SDL_messagebox.h:92
SDL_RestoreWindow
#define SDL_RestoreWindow
Definition: SDL_dynapi_overrides.h:542
SDL_getenv
#define SDL_getenv
Definition: SDL_dynapi_overrides.h:384
SDL_ShowMessageBox
#define SDL_ShowMessageBox
Definition: SDL_dynapi_overrides.h:249
NULL
#define NULL
Definition: begin_code.h:143
SDL_ASSERTION_RETRY
Definition: SDL_assert.h:102
void
SDL_PRINTF_FORMAT_STRING const char int SDL_PRINTF_FORMAT_STRING const char int SDL_PRINTF_FORMAT_STRING const char int SDL_PRINTF_FORMAT_STRING const char const char SDL_SCANF_FORMAT_STRING const char return SDL_ThreadFunction const char void return Uint32 return Uint32 void
Definition: SDL_dynapi_procs.h:93
SDL_assert_state
#define SDL_assert_state
Definition: SDL_assert.h:277
SDL_Window
The type used to identify a window.
Definition: SDL_sysvideo.h:71
SDL_ASSERTION_ALWAYS_IGNORE
Definition: SDL_assert.h:106
SDL_WINDOW_FULLSCREEN
Definition: SDL_video.h:98
SDL_ASSERTION_IGNORE
Definition: SDL_assert.h:105
SDL_snprintf
#define SDL_snprintf
Definition: SDL_dynapi_overrides.h:46
SDL_arraysize
#define SDL_arraysize(array)
Definition: SDL_stdinc.h:93
SDL_strcmp
#define SDL_strcmp
Definition: SDL_dynapi_overrides.h:423
SDL_stack_free
#define SDL_stack_free(data)
Definition: SDL_stdinc.h:325
ENDLINE
#define ENDLINE
SDL_MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT
Definition: SDL_messagebox.h:49
SDL_ASSERTION_BREAK
Definition: SDL_assert.h:103

SDL_assert_state SDL_ReportAssertion | ( | SDL_assert_data * | data,
|  | const char * | func,
|  | const char * | file,
|  | int | line
| ) |  |

Definition at line 263 of file SDL_assert.c.

References assertion_handler, assertion_userdata, NULL, SDL_AbortAssertion(), SDL_AddAssertionToReport(), SDL_assert_state, SDL_ASSERTION_ABORT, SDL_ASSERTION_ALWAYS_IGNORE, SDL_ASSERTION_BREAK, SDL_ASSERTION_IGNORE, SDL_ASSERTION_RETRY, SDL_AtomicLock, SDL_AtomicUnlock, SDL_CreateMutex, SDL_ExitProcess(), SDL_LockMutex, SDL_UnlockMutex, and state.

{
static int assertion_running = 0;
static SDL_SpinLock spinlock = 0;
SDL_assert_state state = SDL_ASSERTION_IGNORE;
SDL_AtomicLock(&spinlock);
if (assertion_mutex == NULL) { /* never called SDL_Init()? */
assertion_mutex = SDL_CreateMutex();
if (assertion_mutex == NULL) {
SDL_AtomicUnlock(&spinlock);
return SDL_ASSERTION_IGNORE; /* oh well, I guess. */
}
}
SDL_AtomicUnlock(&spinlock);
if (SDL_LockMutex(assertion_mutex) < 0) {
return SDL_ASSERTION_IGNORE; /* oh well, I guess. */
}
/* doing this because Visual C is upset over assigning in the macro. */
if (data->trigger_count == 0) {
data->function = func;
data->filename = file;
data->linenum = line;
}
SDL_AddAssertionToReport(data);
assertion_running++;
if (assertion_running > 1) { /* assert during assert! Abort. */
if (assertion_running == 2) {
SDL_AbortAssertion();
} else if (assertion_running == 3) { /* Abort asserted! */
SDL_ExitProcess(42);
} else {
while (1) { /* do nothing but spin; what else can you do?! */ }
}
}
if (!data->always_ignore) {
state = assertion_handler(data, assertion_userdata);
}
switch (state)
{
case SDL_ASSERTION_ABORT:
SDL_AbortAssertion();
return SDL_ASSERTION_IGNORE; /* shouldn't return, but oh well. */
case SDL_ASSERTION_ALWAYS_IGNORE:
state = SDL_ASSERTION_IGNORE;
data->always_ignore = 1;
break;
case SDL_ASSERTION_IGNORE:
case SDL_ASSERTION_RETRY:
case SDL_ASSERTION_BREAK:
break; /* macro handles these. */
}
assertion_running--;
SDL_UnlockMutex(assertion_mutex);
return state;
}
assertion_handler
static SDL_AssertionHandler assertion_handler
Definition: SDL_assert.c:57
SDL_LockMutex
#define SDL_LockMutex
Definition: SDL_dynapi_overrides.h:266
SDL_AtomicLock
#define SDL_AtomicLock
Definition: SDL_dynapi_overrides.h:70
SDL_AbortAssertion
static void SDL_AbortAssertion(void)
Definition: SDL_assert.c:123
SDL_CreateMutex
#define SDL_CreateMutex
Definition: SDL_dynapi_overrides.h:265
state
struct xkb_state * state
Definition: SDL_waylandsym.h:94
data
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: SDL_opengl.h:1967
assertion_userdata
static void * assertion_userdata
Definition: SDL_assert.c:58
SDL_ASSERTION_ABORT
Definition: SDL_assert.h:104
SDL_AtomicUnlock
#define SDL_AtomicUnlock
Definition: SDL_dynapi_overrides.h:71
SDL_AddAssertionToReport
static void SDL_AddAssertionToReport(SDL_assert_data *data)
Definition: SDL_assert.c:75
NULL
#define NULL
Definition: begin_code.h:143
SDL_ASSERTION_RETRY
Definition: SDL_assert.h:102
SDL_assert_state
#define SDL_assert_state
Definition: SDL_assert.h:277
func
GLenum func
Definition: SDL_opengl_glext.h:657
assertion_mutex
static SDL_mutex * assertion_mutex
Definition: SDL_assert.c:56
SDL_ASSERTION_ALWAYS_IGNORE
Definition: SDL_assert.h:106
SDL_ASSERTION_IGNORE
Definition: SDL_assert.h:105
SDL_UnlockMutex
#define SDL_UnlockMutex
Definition: SDL_dynapi_overrides.h:268
SDL_SpinLock
int SDL_SpinLock
Definition: SDL_atomic.h:89
SDL_ExitProcess
static void SDL_ExitProcess(int exitcode)
Definition: SDL_assert.c:114
SDL_ASSERTION_BREAK
Definition: SDL_assert.h:103

void SDL_ResetAssertionReport | ( | void |  | ) |

Reset the list of all assertion failures.

Reset list of all assertions triggered.

See also
  SDL_GetAssertionReport

Definition at line 357 of file SDL_assert.c.

References NULL, SDL_assert_data, SDL_FALSE, and triggered_assertions.

Referenced by SDL_GenerateAssertionReport().

{
SDL_assert_data *next = NULL;
SDL_assert_data *item;
for (item = triggered_assertions; item != NULL; item = next) {
next = (SDL_assert_data *) item->next;
item->always_ignore = SDL_FALSE;
item->trigger_count = 0;
item->next = NULL;
}
triggered_assertions = NULL;
}
triggered_assertions
static SDL_assert_data * triggered_assertions
Definition: SDL_assert.c:54
NULL
#define NULL
Definition: begin_code.h:143
SDL_FALSE
Definition: SDL_stdinc.h:128
SDL_assert_data
#define SDL_assert_data
Definition: SDL_assert.h:278

void SDL_SetAssertionHandler | ( | SDL_AssertionHandler | handler,
|  | void * | userdata
| ) |  |

Set an application-defined assertion handler.

This allows an app to show its own assertion UI and/or force the response to an assertion failure. If the app doesn't provide this, SDL will try to do the right thing, popping up a system-specific GUI dialog, and probably minimizing any fullscreen windows.

This callback may fire from any thread, but it runs wrapped in a mutex, so it will only fire from one thread at a time.

Setting the callback to NULL restores SDL's original internal handler.

This callback is NOT reset to SDL's internal handler upon SDL_Quit()!

Returns
  SDL_AssertState value of how to handle the assertion failure.

Parameters

  handler | Callback function, called when an assertion fails.
  userdata | A pointer passed to the callback as-is.

Definition at line 341 of file SDL_assert.c.

References assertion_handler, assertion_userdata, NULL, and SDL_PromptAssertion().

{
if (handler != NULL) {
assertion_handler = handler;
assertion_userdata = userdata;
} else {
assertion_handler = SDL_PromptAssertion;
assertion_userdata = NULL;
}
}
assertion_handler
static SDL_AssertionHandler assertion_handler
Definition: SDL_assert.c:57
assertion_userdata
static void * assertion_userdata
Definition: SDL_assert.c:58
SDL_PromptAssertion
static SDL_assert_state SDL_PromptAssertion(const SDL_assert_data *data, void *userdata)
Definition: SDL_assert.c:131
NULL
#define NULL
Definition: begin_code.h:143

## Variable Documentation

SDL_AssertionHandler assertion_handler = SDL_PromptAssertion

static

Definition at line 57 of file SDL_assert.c.

Referenced by SDL_GenerateAssertionReport(), SDL_GetAssertionHandler(), SDL_ReportAssertion(), and SDL_SetAssertionHandler().

SDL_mutex* assertion_mutex = NULL

static

Definition at line 56 of file SDL_assert.c.

void* assertion_userdata = NULL

static

Definition at line 58 of file SDL_assert.c.

Referenced by SDL_GetAssertionHandler(), SDL_ReportAssertion(), and SDL_SetAssertionHandler().

SDL_assert_data* triggered_assertions = NULL

static

Definition at line 54 of file SDL_assert.c.

Referenced by SDL_AddAssertionToReport(), SDL_GenerateAssertionReport(), SDL_GetAssertionReport(), and SDL_ResetAssertionReport().