summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2016-08-10 22:02:40 +0200
committerBram Moolenaar <Bram@vim.org>2016-08-10 22:02:40 +0200
commitbcc1dcc981dfc092587d4fbd1327d82a03426c57 (patch)
tree354c7b0aa4338f503ce482cb82cd83c898b76233
parent446a973ce3ce4988607292c0e6345db788f12c7b (diff)
downloadvim-bcc1dcc981dfc092587d4fbd1327d82a03426c57.zip
patch 7.4.2195
Problem: MS-Windows: The vimrun program does not support Unicode. Solution: Use GetCommandLineW(). Cleanup old #ifdefs. (Ken Takata)
-rw-r--r--src/version.c2
-rw-r--r--src/vimrun.c67
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
@@ -764,6 +764,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 2195,
+/**/
2194,
/**/
2193,
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 <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;
+
+ 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();
}