#if wxUSE_GUI
#include "wx/window.h"
+ #include "wx/msgdlg.h"
#ifdef __WXMSW__
#include "wx/msw/private.h"
#endif
// ----------------------------------------------------------------------------
// generic log function
-void wxLogGeneric(wxLogLevel level, const wxChar *szFormat, va_list argptr)
+void wxVLogGeneric(wxLogLevel level, const wxChar *szFormat, va_list argptr)
{
if ( IsLoggingEnabled() ) {
wxCRIT_SECT_LOCKER(locker, gs_csLogBuf);
{
va_list argptr;
va_start(argptr, szFormat);
- wxLogGeneric(level, szFormat, argptr);
+ wxVLogGeneric(level, szFormat, argptr);
va_end(argptr);
}
#define IMPLEMENT_LOG_FUNCTION(level) \
- void wxLog##level(const wxChar *szFormat, va_list argptr) \
+ void wxVLog##level(const wxChar *szFormat, va_list argptr) \
{ \
if ( IsLoggingEnabled() ) { \
wxCRIT_SECT_LOCKER(locker, gs_csLogBuf); \
{ \
va_list argptr; \
va_start(argptr, szFormat); \
- wxLog##level(szFormat, argptr); \
+ wxVLog##level(szFormat, argptr); \
va_end(argptr); \
}
-IMPLEMENT_LOG_FUNCTION(FatalError)
IMPLEMENT_LOG_FUNCTION(Error)
IMPLEMENT_LOG_FUNCTION(Warning)
IMPLEMENT_LOG_FUNCTION(Message)
IMPLEMENT_LOG_FUNCTION(Info)
IMPLEMENT_LOG_FUNCTION(Status)
+// fatal errors can't be suppressed nor handled by the custom log target and
+// always terminate the program
+void wxVLogFatalError(const wxChar *szFormat, va_list argptr)
+{
+ wxVsnprintf(s_szBuf, WXSIZEOF(s_szBuf), szFormat, argptr);
+
+#if wxUSE_GUI
+ wxMessageBox(s_szBuf, _("Fatal Error"), wxID_OK | wxICON_STOP);
+#else
+ fprintf(stderr, _("Fatal error: %s\n"), s_szBuf);
+#endif
+
+ abort();
+}
+
+void wxLogFatalError(const wxChar *szFormat, ...)
+{
+ va_list argptr;
+ va_start(argptr, szFormat);
+ wxVLogFatalError(szFormat, argptr);
+ va_end(argptr);
+}
+
// same as info, but only if 'verbose' mode is on
-void wxLogVerbose(const wxChar *szFormat, va_list argptr)
+void wxVLogVerbose(const wxChar *szFormat, va_list argptr)
{
if ( IsLoggingEnabled() ) {
wxLog *pLog = wxLog::GetActiveTarget();
{
va_list argptr;
va_start(argptr, szFormat);
- wxLogVerbose(szFormat, argptr);
+ wxVLogVerbose(szFormat, argptr);
va_end(argptr);
}
// debug functions
#ifdef __WXDEBUG__
#define IMPLEMENT_LOG_DEBUG_FUNCTION(level) \
- void wxLog##level(const wxChar *szFormat, va_list argptr) \
+ void wxVLog##level(const wxChar *szFormat, va_list argptr) \
{ \
if ( IsLoggingEnabled() ) { \
wxCRIT_SECT_LOCKER(locker, gs_csLogBuf); \
{ \
va_list argptr; \
va_start(argptr, szFormat); \
- wxLog##level(szFormat, argptr); \
+ wxVLog##level(szFormat, argptr); \
va_end(argptr); \
}
- void wxLogTrace(const wxChar *mask, const wxChar *szFormat, va_list argptr)
+ void wxVLogTrace(const wxChar *mask, const wxChar *szFormat, va_list argptr)
{
if ( IsLoggingEnabled() && wxLog::IsAllowedTraceMask(mask) ) {
wxCRIT_SECT_LOCKER(locker, gs_csLogBuf);
{
va_list argptr;
va_start(argptr, szFormat);
- wxLogTrace(mask, szFormat, argptr);
+ wxVLogTrace(mask, szFormat, argptr);
va_end(argptr);
}
- void wxLogTrace(wxTraceMask mask, const wxChar *szFormat, va_list argptr)
+ void wxVLogTrace(wxTraceMask mask, const wxChar *szFormat, va_list argptr)
{
// we check that all of mask bits are set in the current mask, so
// that wxLogTrace(wxTraceRefCount | wxTraceOle) will only do something
{
va_list argptr;
va_start(argptr, szFormat);
- wxLogTrace(mask, szFormat, argptr);
+ wxVLogTrace(mask, szFormat, argptr);
va_end(argptr);
}
wxLog::OnLog(wxLOG_Error, s_szBuf, time(NULL));
}
-void WXDLLEXPORT wxLogSysError(const wxChar *szFormat, va_list argptr)
+void WXDLLEXPORT wxVLogSysError(const wxChar *szFormat, va_list argptr)
{
if ( IsLoggingEnabled() ) {
wxCRIT_SECT_LOCKER(locker, gs_csLogBuf);
{
va_list argptr;
va_start(argptr, szFormat);
- wxLogSysError(szFormat, argptr);
+ wxVLogSysError(szFormat, argptr);
va_end(argptr);
}
-void WXDLLEXPORT wxLogSysError(long lErrCode, const wxChar *szFormat, va_list argptr)
+void WXDLLEXPORT wxVLogSysError(long lErrCode, const wxChar *szFormat, va_list argptr)
{
if ( IsLoggingEnabled() ) {
wxCRIT_SECT_LOCKER(locker, gs_csLogBuf);
{
va_list argptr;
va_start(argptr, szFormat);
- wxLogSysError(lErrCode, szFormat, argptr);
+ wxVLogSysError(lErrCode, szFormat, argptr);
va_end(argptr);
}