summaryrefslogtreecommitdiff
path: root/hw/xwin/winerror.c
diff options
context:
space:
mode:
Diffstat (limited to 'hw/xwin/winerror.c')
-rw-r--r--hw/xwin/winerror.c42
1 files changed, 36 insertions, 6 deletions
diff --git a/hw/xwin/winerror.c b/hw/xwin/winerror.c
index 56c1e34e7..2b4c430c1 100644
--- a/hw/xwin/winerror.c
+++ b/hw/xwin/winerror.c
@@ -52,6 +52,16 @@ OsVendorVErrorF(const char *pszFormat, va_list va_args)
pthread_mutex_lock(&s_pmPrinting);
#endif
+ /* If we want to silence it,
+ * detect if we are going to abort due to duplication error */
+ if (g_fSilentDupError) {
+ if ((strcmp(pszFormat, "InitOutput - Duplicate invocation on display number: %s. Exiting.\n") == 0)
+ || (strcmp(pszFormat, "Server is already active for display %s\n%s %s\n%s\n") == 0)
+ || (strcmp(pszFormat, "MakeAllCOTSServerListeners: server already running\n") == 0)) {
+ g_fSilentFatalError = TRUE;
+ }
+ }
+
/* Print the error message to a log file, could be stderr */
LogVWrite(0, pszFormat, va_args);
@@ -63,15 +73,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;
@@ -82,9 +93,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"));
}
/*