]> source.dussan.org Git - tigervnc.git/commitdiff
Make system error messeges in Windows 10 use UTF-8
authorAlex Tanskanen <aleta@cendio.com>
Wed, 4 Mar 2020 09:27:02 +0000 (10:27 +0100)
committerAlex Tanskanen <aleta@cendio.com>
Thu, 12 Mar 2020 14:46:04 +0000 (15:46 +0100)
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

index 964bc333b0511d5e3c6b9b8722f0a513727d6c6c..e0592b290c40f463cd61b6177cd07b918cfaad18 100644 (file)
@@ -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_));