From fb8131f7a2e93b67887e0b0a3b308a6905d95746 Mon Sep 17 00:00:00 2001 From: Alex Tanskanen Date: Wed, 4 Mar 2020 10:27:02 +0100 Subject: [PATCH] Make system error messeges in Windows 10 use UTF-8 The previous error messages did not support Unicode characters. This commit will use UTF-8 encoding to be able to display error messages in every language. --- common/rdr/Exception.cxx | 35 +++++++++-------------------------- 1 file changed, 9 insertions(+), 26 deletions(-) diff --git a/common/rdr/Exception.cxx b/common/rdr/Exception.cxx index 964bc333..e0592b29 100644 --- a/common/rdr/Exception.cxx +++ b/common/rdr/Exception.cxx @@ -54,33 +54,16 @@ SystemException::SystemException(const char* s, int err_) { strncat(str_, ": ", len-1-strlen(str_)); #ifdef _WIN32 - // Windows error messages are crap, so use unix ones for common errors. - const char* msg = 0; - switch (err) { - case WSAECONNREFUSED: msg = "Connection refused"; break; - case WSAETIMEDOUT: msg = "Connection timed out"; break; - case WSAECONNRESET: msg = "Connection reset by peer"; break; - case WSAECONNABORTED: msg = "Connection aborted"; break; - } - if (msg) { - strncat(str_, msg, len-1-strlen(str_)); - } else { -#ifdef UNICODE - WCHAR* tmsg = new WCHAR[len-strlen(str_)]; - FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, - 0, err, 0, tmsg, len-1-strlen(str_), 0); - WideCharToMultiByte(CP_ACP, 0, tmsg, wcslen(tmsg)+1, - str_+strlen(str_), len-strlen(str_), 0, 0); - delete [] tmsg; -#else - char* currStr = str_+strlen(str_); - FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, - 0, err, 0, currStr, len-1-strlen(str_), 0); -#endif - int l = strlen(str_); - if ((l >= 2) && (str_[l-2] == '\r') && (str_[l-1] == '\n')) + wchar_t *currStr = new wchar_t[len-strlen(str_)]; + FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, + 0, err, 0, currStr, len-1-strlen(str_), 0); + WideCharToMultiByte(CP_UTF8, 0, currStr, -1, str_+strlen(str_), + len-1-strlen(str_), 0, 0); + delete [] currStr; + + int l = strlen(str_); + if ((l >= 2) && (str_[l-2] == '\r') && (str_[l-1] == '\n')) str_[l-2] = 0; - } #else strncat(str_, strerror(err), len-1-strlen(str_)); -- 2.39.5