Last active
January 15, 2020 01:58
-
-
Save mattn/6153332 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff -r 5bb04d03dfa8 src/os_win32.c | |
--- a/src/os_win32.c Tue Jul 09 21:57:52 2013 +0200 | |
+++ b/src/os_win32.c Mon Aug 05 16:03:05 2013 +0900 | |
@@ -3619,6 +3619,45 @@ | |
} | |
#endif /* FEAT_GUI_W32 */ | |
+ static BOOL | |
+_create_process(const char* cmd, DWORD flags, BOOL inherit_handles, | |
+ STARTUPINFO* si, PROCESS_INFORMATION* pi) | |
+{ | |
+# ifdef FEAT_MBYTE | |
+ if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) | |
+ { | |
+ WCHAR *wcmd = enc_to_utf16(cmd, NULL); | |
+ if (wcmd != NULL) | |
+ { | |
+ BOOL ret; | |
+ ret = CreateProcessW( | |
+ NULL, /* Executable name */ | |
+ wcmd, /* Command to execute */ | |
+ NULL, /* Process security attributes */ | |
+ NULL, /* Thread security attributes */ | |
+ inherit_handles, /* Inherit handles */ | |
+ flags, /* Creation flags */ | |
+ NULL, /* Environment */ | |
+ NULL, /* Current directory */ | |
+ si, /* Startup information */ | |
+ pi); /* Process information */ | |
+ vim_free(wcmd); | |
+ return ret; | |
+ } | |
+ } | |
+#endif | |
+ return CreateProcess( | |
+ NULL, /* Executable name */ | |
+ cmd, /* Command to execute */ | |
+ NULL, /* Process security attributes */ | |
+ NULL, /* Thread security attributes */ | |
+ inherit_handles, /* Inherit handles */ | |
+ flags, /* Creation flags */ | |
+ NULL, /* Environment */ | |
+ NULL, /* Current directory */ | |
+ si, /* Startup information */ | |
+ pi); /* Process information */ | |
+} | |
#if defined(FEAT_GUI_W32) || defined(PROTO) | |
@@ -3665,18 +3704,8 @@ | |
cmd += 3; | |
/* Now, run the command */ | |
- CreateProcess(NULL, /* Executable name */ | |
- cmd, /* Command to execute */ | |
- NULL, /* Process security attributes */ | |
- NULL, /* Thread security attributes */ | |
- FALSE, /* Inherit handles */ | |
- CREATE_DEFAULT_ERROR_MODE | /* Creation flags */ | |
- CREATE_NEW_CONSOLE, | |
- NULL, /* Environment */ | |
- NULL, /* Current directory */ | |
- &si, /* Startup information */ | |
- &pi); /* Process information */ | |
- | |
+ _create_process(cmd, FALSE, | |
+ CREATE_DEFAULT_ERROR_MODE | CREATE_NEW_CONSOLE, &si, &pi); | |
/* Wait for the command to terminate before continuing */ | |
if (g_PlatformId != VER_PLATFORM_WIN32s) | |
@@ -4009,21 +4038,7 @@ | |
} | |
/* Now, run the command */ | |
- CreateProcess(NULL, /* Executable name */ | |
- p, /* Command to execute */ | |
- NULL, /* Process security attributes */ | |
- NULL, /* Thread security attributes */ | |
- | |
- // this command can be litigious, handle inheritance was | |
- // deactivated for pending temp file, but, if we deactivate | |
- // it, the pipes don't work for some reason. | |
- TRUE, /* Inherit handles, first deactivated, | |
- * but needed */ | |
- CREATE_DEFAULT_ERROR_MODE, /* Creation flags */ | |
- NULL, /* Environment */ | |
- NULL, /* Current directory */ | |
- &si, /* Startup information */ | |
- &pi); /* Process information */ | |
+ _create_process(p, TRUE, CREATE_DEFAULT_ERROR_MODE, &si, &pi); | |
if (p != cmd) | |
vim_free(p); | |
@@ -4241,7 +4256,25 @@ | |
} | |
#else | |
-# define mch_system(c, o) system(c) | |
+# ifdef FEAT_MBYTE | |
+ static int | |
+mch_system(char *cmd, int options) | |
+{ | |
+ if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) | |
+ { | |
+ WCHAR *wcmd = enc_to_utf16(cmd, NULL); | |
+ if (wcmd != NULL) | |
+ { | |
+ int ret = _wsystem(wcmd); | |
+ vim_free(wcmd); | |
+ return ret; | |
+ } | |
+ } | |
+ return system(cmd); | |
+} | |
+# else | |
+# define mch_system(c, o) system(c) | |
+# endif | |
#endif | |
@@ -4409,16 +4442,7 @@ | |
* inherit our handles which causes unpleasant dangling swap | |
* files if we exit before the spawned process | |
*/ | |
- if (CreateProcess(NULL, // Executable name | |
- newcmd, // Command to execute | |
- NULL, // Process security attributes | |
- NULL, // Thread security attributes | |
- FALSE, // Inherit handles | |
- flags, // Creation flags | |
- NULL, // Environment | |
- NULL, // Current directory | |
- &si, // Startup information | |
- &pi)) // Process information | |
+ if (_create_process(newcmd, FALSE, flags, &si, &pi)) | |
x = 0; | |
else | |
{ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment