From bcc1dcc981dfc092587d4fbd1327d82a03426c57 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Wed, 10 Aug 2016 22:02:40 +0200 Subject: [PATCH] patch 7.4.2195 Problem: MS-Windows: The vimrun program does not support Unicode. Solution: Use GetCommandLineW(). Cleanup old #ifdefs. (Ken Takata) --- src/version.c | 2 ++ src/vimrun.c | 67 ++++++++++++++++----------------------------------- 2 files changed, 23 insertions(+), 46 deletions(-) diff --git a/src/version.c b/src/version.c index 9538765a0..4dbba9409 100644 --- a/src/version.c +++ b/src/version.c @@ -763,6 +763,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 2195, /**/ 2194, /**/ diff --git a/src/vimrun.c b/src/vimrun.c index 0006479b0..3db80cf44 100644 --- a/src/vimrun.c +++ b/src/vimrun.c @@ -17,89 +17,66 @@ #include #include -#ifndef __CYGWIN__ -# include +#include +#ifndef WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN #endif +#include #ifdef __BORLANDC__ -extern char * -#ifdef _RTLDLL -__import -#endif -_oscmd; # define _kbhit kbhit # define _getch getch -#else -# ifdef __MINGW32__ -# ifndef WIN32_LEAN_AND_MEAN -# define WIN32_LEAN_AND_MEAN -# endif -# include -# else -# ifdef __CYGWIN__ -# ifndef WIN32_LEAN_AND_MEAN -# define WIN32_LEAN_AND_MEAN -# endif -# include -# define _getch getchar -# else -extern char *_acmdln; -# endif -# endif #endif int main(void) { - const char *p; - int retval; - int inquote = 0; - int silent = 0; + const wchar_t *p; + int retval; + int inquote = 0; + int silent = 0; + HANDLE hstdout; + DWORD written; + + p = (const wchar_t *)GetCommandLineW(); -#ifdef __BORLANDC__ - p = _oscmd; -#else -# if defined(__MINGW32__) || defined(__CYGWIN__) - p = (const char *)GetCommandLine(); -# else - p = _acmdln; -# endif -#endif /* * Skip the executable name, which might be in "". */ while (*p) { - if (*p == '"') + if (*p == L'"') inquote = !inquote; - else if (!inquote && *p == ' ') + else if (!inquote && *p == L' ') { ++p; break; } ++p; } - while (*p == ' ') + while (*p == L' ') ++p; /* * "-s" argument: don't wait for a key hit. */ - if (p[0] == '-' && p[1] == 's' && p[2] == ' ') + if (p[0] == L'-' && p[1] == L's' && p[2] == L' ') { silent = 1; p += 3; - while (*p == ' ') + while (*p == L' ') ++p; } /* Print the command, including quotes and redirection. */ - puts(p); + hstdout = GetStdHandle(STD_OUTPUT_HANDLE); + WriteConsoleW(hstdout, p, wcslen(p), &written, NULL); + WriteConsoleW(hstdout, L"\r\n", 2, &written, NULL); /* * Do it! */ - retval = system(p); + retval = _wsystem(p); if (retval == -1) perror("vimrun system(): "); @@ -110,10 +87,8 @@ main(void) { puts("Hit any key to close this window..."); -#ifndef __CYGWIN__ while (_kbhit()) (void)_getch(); -#endif (void)_getch(); } -- 2.50.1