mirror of
https://github.com/ZDoom/qzdoom.git
synced 2024-11-10 23:02:08 +00:00
- consolidated I_FatalError functions
This also removes the handling from thr Posix backend and will not compile on non-Windows.
This commit is contained in:
parent
cd086ae1da
commit
b5fa08bf15
7 changed files with 66 additions and 177 deletions
|
@ -2290,6 +2290,42 @@ void I_Error(const char *error, ...)
|
||||||
throw CRecoverableError(errortext);
|
throw CRecoverableError(errortext);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//==========================================================================
|
||||||
|
//
|
||||||
|
// I_FatalError
|
||||||
|
//
|
||||||
|
// Throw an error that will end the game.
|
||||||
|
//
|
||||||
|
//==========================================================================
|
||||||
|
extern FILE *Logfile;
|
||||||
|
|
||||||
|
void I_FatalError(const char *error, ...)
|
||||||
|
{
|
||||||
|
static bool alreadyThrown = false;
|
||||||
|
gameisdead = true;
|
||||||
|
|
||||||
|
if (!alreadyThrown) // ignore all but the first message -- killough
|
||||||
|
{
|
||||||
|
alreadyThrown = true;
|
||||||
|
char errortext[MAX_ERRORTEXT];
|
||||||
|
va_list argptr;
|
||||||
|
va_start(argptr, error);
|
||||||
|
myvsnprintf(errortext, MAX_ERRORTEXT, error, argptr);
|
||||||
|
va_end(argptr);
|
||||||
|
I_DebugPrint(errortext);
|
||||||
|
|
||||||
|
// Record error to log (if logging)
|
||||||
|
if (Logfile)
|
||||||
|
{
|
||||||
|
fprintf(Logfile, "\n**** DIED WITH FATAL ERROR:\n%s\n", errortext);
|
||||||
|
fflush(Logfile);
|
||||||
|
}
|
||||||
|
|
||||||
|
throw CFatalError(errortext);
|
||||||
|
}
|
||||||
|
std::terminate(); // recursive I_FatalErrors must immediately terminate.
|
||||||
|
}
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
//
|
//
|
||||||
// I_Quit
|
// I_Quit
|
||||||
|
|
|
@ -90,48 +90,6 @@ void I_Init(void)
|
||||||
DumpCPUInfo(&CPU);
|
DumpCPUInfo(&CPU);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
extern FILE* Logfile;
|
|
||||||
bool gameisdead;
|
|
||||||
|
|
||||||
static void I_FatalError(const char* const error, va_list ap)
|
|
||||||
{
|
|
||||||
static bool alreadyThrown = false;
|
|
||||||
gameisdead = true;
|
|
||||||
|
|
||||||
if (!alreadyThrown) // ignore all but the first message -- killough
|
|
||||||
{
|
|
||||||
alreadyThrown = true;
|
|
||||||
|
|
||||||
char errortext[MAX_ERRORTEXT];
|
|
||||||
int index;
|
|
||||||
index = vsnprintf(errortext, MAX_ERRORTEXT, error, ap);
|
|
||||||
|
|
||||||
extern void Mac_I_FatalError(const char*);
|
|
||||||
Mac_I_FatalError(errortext);
|
|
||||||
|
|
||||||
// Record error to log (if logging)
|
|
||||||
if (Logfile)
|
|
||||||
{
|
|
||||||
fprintf(Logfile, "\n**** DIED WITH FATAL ERROR:\n%s\n", errortext);
|
|
||||||
fflush(Logfile);
|
|
||||||
}
|
|
||||||
|
|
||||||
fprintf(stderr, "%s\n", errortext);
|
|
||||||
exit(-1);
|
|
||||||
}
|
|
||||||
std::terminate();
|
|
||||||
}
|
|
||||||
|
|
||||||
void I_FatalError(const char* const error, ...)
|
|
||||||
{
|
|
||||||
va_list argptr;
|
|
||||||
va_start(argptr, error);
|
|
||||||
I_FatalError(error, argptr);
|
|
||||||
va_end(argptr);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void I_SetIWADInfo()
|
void I_SetIWADInfo()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
|
@ -188,11 +188,6 @@ int main (int argc, char **argv)
|
||||||
|
|
||||||
printf("\n");
|
printf("\n");
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
Args = new FArgs(argc, argv);
|
|
||||||
|
|
||||||
atexit (call_terms);
|
|
||||||
|
|
||||||
// Should we even be doing anything with progdir on Unix systems?
|
// Should we even be doing anything with progdir on Unix systems?
|
||||||
char program[PATH_MAX];
|
char program[PATH_MAX];
|
||||||
|
@ -211,42 +206,5 @@ int main (int argc, char **argv)
|
||||||
|
|
||||||
I_StartupJoysticks();
|
I_StartupJoysticks();
|
||||||
D_DoomMain ();
|
D_DoomMain ();
|
||||||
}
|
|
||||||
catch (std::exception &error)
|
|
||||||
{
|
|
||||||
I_ShutdownJoysticks();
|
|
||||||
|
|
||||||
const char *const message = error.what();
|
|
||||||
|
|
||||||
if (strcmp(message, "NoRunExit"))
|
|
||||||
{
|
|
||||||
if (CVMAbortException::stacktrace.IsNotEmpty())
|
|
||||||
{
|
|
||||||
Printf("%s", CVMAbortException::stacktrace.GetChars());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (batchrun)
|
|
||||||
{
|
|
||||||
Printf("%s\n", message);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
#ifdef __APPLE__
|
|
||||||
Mac_I_FatalError(message);
|
|
||||||
#endif // __APPLE__
|
|
||||||
|
|
||||||
#ifdef __linux__
|
|
||||||
Linux_I_FatalError(message);
|
|
||||||
#endif // __linux__
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
catch (...)
|
|
||||||
{
|
|
||||||
call_terms ();
|
|
||||||
throw;
|
|
||||||
}
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -64,7 +64,7 @@ extern "C"
|
||||||
#ifndef NO_GTK
|
#ifndef NO_GTK
|
||||||
bool I_GtkAvailable ();
|
bool I_GtkAvailable ();
|
||||||
int I_PickIWad_Gtk (WadStuff *wads, int numwads, bool showwin, int defaultiwad);
|
int I_PickIWad_Gtk (WadStuff *wads, int numwads, bool showwin, int defaultiwad);
|
||||||
void I_FatalError_Gtk(const char* errortext);
|
void I_ShowFatalError_Gtk(const char* errortext);
|
||||||
#elif defined(__APPLE__)
|
#elif defined(__APPLE__)
|
||||||
int I_PickIWad_Cocoa (WadStuff *wads, int numwads, bool showwin, int defaultiwad);
|
int I_PickIWad_Cocoa (WadStuff *wads, int numwads, bool showwin, int defaultiwad);
|
||||||
#endif
|
#endif
|
||||||
|
@ -140,47 +140,19 @@ void Linux_I_FatalError(const char* errortext)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void I_FatalError (const char *error, va_list ap)
|
|
||||||
|
void I_ShowFatalError(const char *message)
|
||||||
{
|
{
|
||||||
static bool alreadyThrown = false;
|
|
||||||
gameisdead = true;
|
|
||||||
|
|
||||||
if (!alreadyThrown) // ignore all but the first message -- killough
|
|
||||||
{
|
|
||||||
alreadyThrown = true;
|
|
||||||
char errortext[MAX_ERRORTEXT];
|
|
||||||
int index;
|
|
||||||
index = vsnprintf (errortext, MAX_ERRORTEXT, error, ap);
|
|
||||||
|
|
||||||
#ifdef __APPLE__
|
#ifdef __APPLE__
|
||||||
Mac_I_FatalError(errortext);
|
Mac_I_FatalError(message);
|
||||||
#endif // __APPLE__
|
#elif defined __linux__
|
||||||
|
Linux_I_FatalError(message);
|
||||||
#ifdef __linux__
|
#else
|
||||||
Linux_I_FatalError(errortext);
|
// ???
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Record error to log (if logging)
|
|
||||||
if (Logfile)
|
|
||||||
{
|
|
||||||
fprintf (Logfile, "\n**** DIED WITH FATAL ERROR:\n%s\n", errortext);
|
|
||||||
fflush (Logfile);
|
|
||||||
}
|
|
||||||
// throw CFatalError (errortext);
|
|
||||||
fprintf (stderr, "%s\n", errortext);
|
|
||||||
exit(-1);
|
|
||||||
}
|
|
||||||
std::terminate();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void I_FatalError(const char* const error, ...)
|
|
||||||
{
|
|
||||||
va_list argptr;
|
|
||||||
va_start(argptr, error);
|
|
||||||
I_FatalError(error, argptr);
|
|
||||||
va_end(argptr);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void I_SetIWADInfo ()
|
void I_SetIWADInfo ()
|
||||||
{
|
{
|
||||||
|
|
|
@ -417,7 +417,7 @@ int I_PickIWad_Gtk (WadStuff *wads, int numwads, bool showwin, int defaultiwad)
|
||||||
return Gtk::PickIWad (wads, numwads, showwin, defaultiwad);
|
return Gtk::PickIWad (wads, numwads, showwin, defaultiwad);
|
||||||
}
|
}
|
||||||
|
|
||||||
void I_FatalError_Gtk(const char* errortext) {
|
void I_ShowFatalError_Gtk(const char* errortext) {
|
||||||
Gtk::ShowError(errortext);
|
Gtk::ShowError(errortext);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -123,6 +123,7 @@ public:
|
||||||
int Reason() const { return m_reason; }
|
int Reason() const { return m_reason; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void I_ShowFatalError(const char *message);
|
||||||
void I_Error (const char *error, ...) GCCPRINTF(1,2);
|
void I_Error (const char *error, ...) GCCPRINTF(1,2);
|
||||||
void I_FatalError (const char *error, ...) GCCPRINTF(1,2);
|
void I_FatalError (const char *error, ...) GCCPRINTF(1,2);
|
||||||
|
|
||||||
|
|
|
@ -339,42 +339,6 @@ void I_Init()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//==========================================================================
|
|
||||||
//
|
|
||||||
// I_FatalError
|
|
||||||
//
|
|
||||||
// Throw an error that will end the game.
|
|
||||||
//
|
|
||||||
//==========================================================================
|
|
||||||
|
|
||||||
void I_FatalError(const char *error, ...)
|
|
||||||
{
|
|
||||||
static BOOL alreadyThrown = false;
|
|
||||||
gameisdead = true;
|
|
||||||
|
|
||||||
if (!alreadyThrown) // ignore all but the first message -- killough
|
|
||||||
{
|
|
||||||
alreadyThrown = true;
|
|
||||||
char errortext[MAX_ERRORTEXT];
|
|
||||||
va_list argptr;
|
|
||||||
va_start(argptr, error);
|
|
||||||
myvsnprintf(errortext, MAX_ERRORTEXT, error, argptr);
|
|
||||||
va_end(argptr);
|
|
||||||
OutputDebugStringA(errortext);
|
|
||||||
|
|
||||||
// Record error to log (if logging)
|
|
||||||
if (Logfile)
|
|
||||||
{
|
|
||||||
fprintf(Logfile, "\n**** DIED WITH FATAL ERROR:\n%s\n", errortext);
|
|
||||||
fflush(Logfile);
|
|
||||||
}
|
|
||||||
|
|
||||||
throw CFatalError(errortext);
|
|
||||||
}
|
|
||||||
std::terminate();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
//
|
//
|
||||||
// I_PrintStr
|
// I_PrintStr
|
||||||
|
|
Loading…
Reference in a new issue