mirror of
https://github.com/ZDoom/qzdoom.git
synced 2024-11-10 14:51:51 +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);
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// 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
|
||||
|
|
|
@ -90,48 +90,6 @@ void I_Init(void)
|
|||
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()
|
||||
{
|
||||
}
|
||||
|
|
|
@ -188,65 +188,23 @@ int main (int argc, char **argv)
|
|||
|
||||
printf("\n");
|
||||
|
||||
try
|
||||
{
|
||||
Args = new FArgs(argc, argv);
|
||||
|
||||
atexit (call_terms);
|
||||
// Should we even be doing anything with progdir on Unix systems?
|
||||
char program[PATH_MAX];
|
||||
if (realpath (argv[0], program) == NULL)
|
||||
strcpy (program, argv[0]);
|
||||
char *slash = strrchr (program, '/');
|
||||
if (slash != NULL)
|
||||
{
|
||||
*(slash + 1) = '\0';
|
||||
progdir = program;
|
||||
}
|
||||
else
|
||||
{
|
||||
progdir = "./";
|
||||
}
|
||||
|
||||
// Should we even be doing anything with progdir on Unix systems?
|
||||
char program[PATH_MAX];
|
||||
if (realpath (argv[0], program) == NULL)
|
||||
strcpy (program, argv[0]);
|
||||
char *slash = strrchr (program, '/');
|
||||
if (slash != NULL)
|
||||
{
|
||||
*(slash + 1) = '\0';
|
||||
progdir = program;
|
||||
}
|
||||
else
|
||||
{
|
||||
progdir = "./";
|
||||
}
|
||||
|
||||
I_StartupJoysticks();
|
||||
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;
|
||||
}
|
||||
I_StartupJoysticks();
|
||||
D_DoomMain ();
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -64,7 +64,7 @@ extern "C"
|
|||
#ifndef NO_GTK
|
||||
bool I_GtkAvailable ();
|
||||
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__)
|
||||
int I_PickIWad_Cocoa (WadStuff *wads, int numwads, bool showwin, int defaultiwad);
|
||||
#endif
|
||||
|
@ -140,47 +140,19 @@ void Linux_I_FatalError(const char* errortext)
|
|||
}
|
||||
#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__
|
||||
Mac_I_FatalError(errortext);
|
||||
#endif // __APPLE__
|
||||
|
||||
#ifdef __linux__
|
||||
Linux_I_FatalError(errortext);
|
||||
Mac_I_FatalError(message);
|
||||
#elif defined __linux__
|
||||
Linux_I_FatalError(message);
|
||||
#else
|
||||
// ???
|
||||
#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 ()
|
||||
{
|
||||
|
|
|
@ -417,7 +417,7 @@ int I_PickIWad_Gtk (WadStuff *wads, int numwads, bool showwin, int 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);
|
||||
}
|
||||
|
||||
|
|
|
@ -123,6 +123,7 @@ public:
|
|||
int Reason() const { return m_reason; }
|
||||
};
|
||||
|
||||
void I_ShowFatalError(const char *message);
|
||||
void I_Error (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
|
||||
|
|
Loading…
Reference in a new issue