Mercurial > vim
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