From 14f6a6f5102ebf8790638baf4b154144a9d93916 Mon Sep 17 00:00:00 2001 From: Glenn Maynard Date: Thu, 11 Mar 2004 23:58:49 +0000 Subject: [PATCH] reduce crash handler dependency on StepMania.cpp --- .../src/arch/ArchHooks/ArchHooks_Unix.cpp | 3 ++- .../src/arch/ArchHooks/ArchHooks_darwin.cpp | 3 ++- stepmania/src/archutils/Unix/CrashHandler.cpp | 12 ++++++------ stepmania/src/archutils/Unix/CrashHandler.h | 2 +- .../src/archutils/Unix/CrashHandlerChild.cpp | 18 ++++++++++-------- 5 files changed, 21 insertions(+), 17 deletions(-) diff --git a/stepmania/src/arch/ArchHooks/ArchHooks_Unix.cpp b/stepmania/src/arch/ArchHooks/ArchHooks_Unix.cpp index 9454241612..b8c5f3282a 100644 --- a/stepmania/src/arch/ArchHooks/ArchHooks_Unix.cpp +++ b/stepmania/src/arch/ArchHooks/ArchHooks_Unix.cpp @@ -2,6 +2,7 @@ #include "RageLog.h" #include "RageThreads.h" #include "ArchHooks_Unix.h" +#include "StepMania.h" #include "archutils/Unix/SignalHandler.h" #include "archutils/Unix/GetSysInfo.h" @@ -23,7 +24,7 @@ static void EmergencyShutdown( int signal ) ArchHooks_Unix::ArchHooks_Unix() { #if defined(CRASH_HANDLER) - CrashHandlerHandleArgs(); + CrashHandlerHandleArgs( g_argc, g_argv ); InitializeCrashHandler(); SignalHandler::OnClose( CrashSignalHandler ); #endif diff --git a/stepmania/src/arch/ArchHooks/ArchHooks_darwin.cpp b/stepmania/src/arch/ArchHooks/ArchHooks_darwin.cpp index fb780cc844..6b848cad84 100644 --- a/stepmania/src/arch/ArchHooks/ArchHooks_darwin.cpp +++ b/stepmania/src/arch/ArchHooks/ArchHooks_darwin.cpp @@ -12,6 +12,7 @@ #include "RageLog.h" #include "archutils/Darwin/Crash.h" #include "archutils/Unix/CrashHandler.h" +#include "StepMania.h" #include #include @@ -40,7 +41,7 @@ SInt16 ShowAlert(int type, CFStringRef message, CFStringRef OK, CFStringRef canc ArchHooks_darwin::ArchHooks_darwin() { - CrashHandlerHandleArgs(); + CrashHandlerHandleArgs( g_argc, g_argv ); long response; CString error = ""; diff --git a/stepmania/src/archutils/Unix/CrashHandler.cpp b/stepmania/src/archutils/Unix/CrashHandler.cpp index 714e2ccb3c..1ccbb757f8 100644 --- a/stepmania/src/archutils/Unix/CrashHandler.cpp +++ b/stepmania/src/archutils/Unix/CrashHandler.cpp @@ -9,8 +9,6 @@ #include #include -#include "StepMania.h" /* for g_argv */ - #include "RageLog.h" /* for RageLog::GetAdditionalLog, etc, only */ #include "RageThreads.h" @@ -20,6 +18,8 @@ #include "CrashHandler.h" #include "CrashHandlerInternal.h" +extern const char *g_pCrashHandlerArgv0; + static void safe_print(int fd, ...) { va_list ap; @@ -49,10 +49,10 @@ static void NORETURN spawn_child_process( int from_parent ) close(from_parent); } - execl(g_argv[0], g_argv[0], CHILD_MAGIC_PARAMETER, NULL); + execl( g_pCrashHandlerArgv0, g_pCrashHandlerArgv0, CHILD_MAGIC_PARAMETER, NULL); /* If we got here, the exec failed. */ - safe_print(fileno(stderr), "Crash handler execl(", g_argv[0], ") failed: ", strerror(errno), "\n", NULL); + safe_print(fileno(stderr), "Crash handler execl(", g_pCrashHandlerArgv0, ") failed: ", strerror(errno), "\n", NULL); _exit(1); } @@ -452,9 +452,9 @@ void CrashSignalHandler( int signal ) return; #endif - if( g_argv == 0 || g_argc < 1 ) + if( g_pCrashHandlerArgv0 ) { - safe_print(fileno(stderr), "Crash handler failed: g_argv or g_argc not set\n", NULL); + safe_print(fileno(stderr), "Crash handler failed: CrashHandlerHandleArgs was not called\n", NULL); _exit(1); } diff --git a/stepmania/src/archutils/Unix/CrashHandler.h b/stepmania/src/archutils/Unix/CrashHandler.h index 41cfecf01d..dae1e468b4 100644 --- a/stepmania/src/archutils/Unix/CrashHandler.h +++ b/stepmania/src/archutils/Unix/CrashHandler.h @@ -2,7 +2,7 @@ #define CRASH_HANDLER_H void CrashSignalHandler(int signal); -void CrashHandlerHandleArgs(); +void CrashHandlerHandleArgs( int argc, char* argv[] ); void InitializeCrashHandler(); #endif diff --git a/stepmania/src/archutils/Unix/CrashHandlerChild.cpp b/stepmania/src/archutils/Unix/CrashHandlerChild.cpp index ade15eed84..7c4c948379 100644 --- a/stepmania/src/archutils/Unix/CrashHandlerChild.cpp +++ b/stepmania/src/archutils/Unix/CrashHandlerChild.cpp @@ -12,7 +12,6 @@ #include #include -#include "StepMania.h" /* for g_argv */ #include "RageUtil.h" #include "CrashHandler.h" #include "CrashHandlerInternal.h" @@ -27,6 +26,8 @@ extern const unsigned version_num; #endif +const char *g_pCrashHandlerArgv0 = NULL; + struct BacktraceNames { CString Symbol, File; @@ -100,7 +101,7 @@ CString BacktraceNames::Format() const if( ShortenedPath != "" ) { /* We have some sort of symbol name, so abbreviate or elide the module name. */ - if( ShortenedPath == g_argv[0] ) + if( ShortenedPath == g_pCrashHandlerArgv0 ) ShortenedPath = ""; else { @@ -507,13 +508,14 @@ static void child_process() } -void CrashHandlerHandleArgs() +void CrashHandlerHandleArgs( int argc, char* argv[] ) { - if(g_argc == 2 && !strcmp(g_argv[1], CHILD_MAGIC_PARAMETER)) - { - child_process(); - exit(0); - } + g_pCrashHandlerArgv0 = argv[0]; + if( argc == 2 && !strcmp(argv[1], CHILD_MAGIC_PARAMETER) ) + { + child_process(); + exit(0); + } }