changeset 9840:da7307987ed1 v7.4.2195

commit https://github.com/vim/vim/commit/bcc1dcc981dfc092587d4fbd1327d82a03426c57 Author: Bram Moolenaar <Bram@vim.org> Date: Wed Aug 10 22:02:40 2016 +0200 patch 7.4.2195 Problem: MS-Windows: The vimrun program does not support Unicode. Solution: Use GetCommandLineW(). Cleanup old #ifdefs. (Ken Takata)
author Christian Brabandt <cb@256bit.org>
date Wed, 10 Aug 2016 22:15:06 +0200
parents 9961879bd42b
children 736f093f3494
files src/version.c src/vimrun.c
diffstat 2 files changed, 23 insertions(+), 46 deletions(-) [+]
line wrap: on
line diff
--- a/src/version.c
+++ b/src/version.c
@@ -764,6 +764,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    2195,
+/**/
     2194,
 /**/
     2193,
--- a/src/vimrun.c
+++ b/src/vimrun.c
@@ -17,89 +17,66 @@
 
 #include <stdio.h>
 #include <stdlib.h>
-#ifndef __CYGWIN__
-# include <conio.h>
+#include <conio.h>
+#ifndef WIN32_LEAN_AND_MEAN
+# define WIN32_LEAN_AND_MEAN
 #endif
+#include <windows.h>
 
 #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 <windows.h>
-# else
-#  ifdef __CYGWIN__
-#   ifndef WIN32_LEAN_AND_MEAN
-#    define WIN32_LEAN_AND_MEAN
-#   endif
-#   include <windows.h>
-#   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;
 
-#ifdef __BORLANDC__
-    p = _oscmd;
-#else
-# if defined(__MINGW32__) || defined(__CYGWIN__)
-    p = (const char *)GetCommandLine();
-# else
-    p = _acmdln;
-# endif
-#endif
+    p = (const wchar_t *)GetCommandLineW();
+
     /*
      * 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();
     }