changeset 11941:351d94dc8375 v8.0.0850

patch 8.0.0850: MS-Windows: error message while starting up may be broken commit https://github.com/vim/vim/commit/01efafad12102df0f1e341d6cadcb7be971591c1 Author: Bram Moolenaar <Bram@vim.org> Date: Thu Aug 3 17:37:48 2017 +0200 patch 8.0.0850: MS-Windows: error message while starting up may be broken Problem: MS-Windows: Depending on the console encoding, an error message that is given during startup may be broken. Solution: Convert the message to the console codepage. (Yasuhiro Matsumoto, closes #1927)
author Christian Brabandt <cb@256bit.org>
date Thu, 03 Aug 2017 17:45:04 +0200
parents 0372e70a8358
children aac19f0c0e92
files src/message.c src/version.c
diffstat 2 files changed, 25 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/message.c
+++ b/src/message.c
@@ -2628,10 +2628,29 @@ msg_puts_printf(char_u *str, int maxlen)
     char_u	*s = str;
     char_u	buf[4];
     char_u	*p;
-
 #ifdef WIN3264
+# if defined(FEAT_MBYTE) && !defined(FEAT_GUI_MSWIN)
+    char_u	*ccp = NULL;
+
+# endif
     if (!(silent_mode && p_verbose == 0))
 	mch_settmode(TMODE_COOK);	/* handle '\r' and '\n' correctly */
+
+# if defined(FEAT_MBYTE) && !defined(FEAT_GUI_MSWIN)
+    if (enc_codepage >= 0 && (int)GetConsoleCP() != enc_codepage)
+    {
+	int	len;
+	WCHAR	*widestr = (WCHAR *)enc_to_utf16(str, &len);
+
+	if (widestr != NULL)
+	{
+	    WideCharToMultiByte_alloc(GetConsoleCP(), 0, widestr, len,
+						    (LPSTR *)&ccp, &len, 0, 0);
+	    vim_free(widestr);
+	    s = str = ccp;
+	}
+    }
+# endif
 #endif
     while ((maxlen < 0 || (int)(s - str) < maxlen) && *s != NUL)
     {
@@ -2675,6 +2694,9 @@ msg_puts_printf(char_u *str, int maxlen)
     msg_didout = TRUE;	    /* assume that line is not empty */
 
 #ifdef WIN3264
+# if defined(FEAT_MBYTE) && !defined(FEAT_GUI_MSWIN)
+    vim_free(ccp);
+# endif
     if (!(silent_mode && p_verbose == 0))
 	mch_settmode(TMODE_RAW);
 #endif
--- a/src/version.c
+++ b/src/version.c
@@ -770,6 +770,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    850,
+/**/
     849,
 /**/
     848,