From c4d501081fb2bb2f07da4c06f61c40ad010cdd88 Mon Sep 17 00:00:00 2001 From: Glenn Maynard Date: Thu, 6 May 2004 09:08:41 +0000 Subject: [PATCH] s/__THROW/throw()/ fix assertion handling when !CRASH_HANDLER improve assertion handling output --- .../src/archutils/Unix/AssertionHandler.cpp | 30 ++++++++++++++++--- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/stepmania/src/archutils/Unix/AssertionHandler.cpp b/stepmania/src/archutils/Unix/AssertionHandler.cpp index 58357e14f9..5999e48483 100644 --- a/stepmania/src/archutils/Unix/AssertionHandler.cpp +++ b/stepmania/src/archutils/Unix/AssertionHandler.cpp @@ -1,20 +1,42 @@ #include "global.h" #include "RageUtil.h" +#include "StepMania.h" #include /* We can define this symbol to catch failed assert() calls. This is only used * for library code that uses assert(); internally we always use ASSERT, which * does this for all platforms, not just glibc. */ -extern "C" void __assert_fail( const char *assertion, const char *file, unsigned int line, const char *function ) __THROW +extern "C" void __assert_fail( const char *assertion, const char *file, unsigned int line, const char *function ) throw() { - Checkpoints::SetCheckpoint( file, line, ssprintf("%s: %s", function, assertion ) ); + const CString error = ssprintf( "Assertion failure: %s: %s", function, assertion ); + +#if defined(CRASH_HANDLER) + Checkpoints::SetCheckpoint( file, line, error ); sm_crash( assertion ); +#else + /* It'd be nice to just throw an exception here, but throwing an exception + * through C code sometimes explodes. */ + HandleException( error ); + + /* XXX: do EmergencyShutdown */ + exit(0); +#endif } -extern "C" void __assert_perror_fail( int errnum, const char *file, unsigned int line, const char *function ) __THROW + +extern "C" void __assert_perror_fail( int errnum, const char *file, unsigned int line, const char *function ) throw() { - Checkpoints::SetCheckpoint( file, line, ssprintf("%s: %s", function, strerror(errnum) ) ); + const CString error = ssprintf( "Assertion failure: %s: %s", function, strerror(errnum) ); + +#if defined(CRASH_HANDLER) + Checkpoints::SetCheckpoint( file, line, error ); sm_crash( strerror(errnum) ); +#else + HandleException( error ); + + /* XXX: do EmergencyShutdown */ + exit(0); +#endif }