hw/xwin: Show any fatal error message

Report the fatal error message in the dialog we pop up, rather than just
referring the user to the logfile.

v2: Do this a better way since the "Pass the FatalError message to
OsVendorFatalError" patch has landed, and OsVendorFatalError() now gets passed
the fatal error message

Signed-off-by: Jon TURNEY <jon.turney@dronecode.org.uk>
Reviewed-by: Colin Harrison <colin.harrison@virgin.net>
This commit is contained in:
Jon TURNEY 2010-03-12 14:38:51 +00:00
parent 6a6c3afe71
commit 5824166256

View File

@ -59,15 +59,16 @@ OsVendorVErrorF(const char *pszFormat, va_list va_args)
#endif
/*
* os/util.c/FatalError () calls our vendor ErrorF, so the message
* from a FatalError will be logged. Thus, the message for the
* fatal error is not passed to this function.
* os/log.c:FatalError () calls our vendor ErrorF, so the message
* from a FatalError will be logged.
*
* Attempt to do last-ditch, safe, important cleanup here.
*/
void
OsVendorFatalError(const char *f, va_list args)
{
char errormsg[1024] = "";
/* Don't give duplicate warning if UseMsg was called */
if (g_fSilentFatalError)
return;
@ -78,9 +79,28 @@ OsVendorFatalError(const char *f, va_list args)
}
LogClose(EXIT_ERR_ABORT);
winMessageBoxF("A fatal error has occurred and " PROJECT_NAME
" will now exit.\n" "Please open %s for more information.\n",
MB_ICONERROR, (g_pszLogFile ? g_pszLogFile : "the logfile"));
/* Format the error message */
vsnprintf(errormsg, sizeof(errormsg), f, args);
/*
Sometimes the error message needs a bit of cosmetic cleaning
up for use in a dialog box...
*/
{
char *s;
while ((s = strstr(errormsg, "\n\t")) != NULL) {
s[0] = ' ';
s[1] = '\n';
}
}
winMessageBoxF("A fatal error has occurred and " PROJECT_NAME " will now exit.\n\n"
"%s\n\n"
"Please open %s for more information.\n",
MB_ICONERROR,
errormsg,
(g_pszLogFile ? g_pszLogFile : "the logfile"));
}
/*