To: vim_dev@googlegroups.com
Subject: Patch 7.4.122
Fcc: outbox
From: Bram Moolenaar <Bram@moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
------------
Patch 7.4.122
Problem: Win32: When 'encoding' is set to "utf-8" and the active codepage
is cp932 then ":grep" and other commands don't work for multi-byte
characters.
Solution: (Yasuhiro Matsumoto)
Files: src/os_win32.c
*** ../vim-7.4.121/src/os_win32.c 2013-12-07 14:48:06.000000000 +0100
--- src/os_win32.c 2013-12-11 17:57:48.000000000 +0100
***************
*** 3788,3793 ****
--- 3788,3837 ----
}
#endif /* FEAT_GUI_W32 */
+ static BOOL
+ vim_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)
***************
*** 3834,3851 ****
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 */
!
/* Wait for the command to terminate before continuing */
if (g_PlatformId != VER_PLATFORM_WIN32s)
--- 3878,3885 ----
cmd += 3;
/* Now, run the command */
! vim_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)
***************
*** 4177,4198 ****
p = cmd;
}
! /* 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 */
if (p != cmd)
vim_free(p);
--- 4211,4221 ----
p = cmd;
}
! /* Now, run the command.
! * About "Inherit handles" being TRUE: 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. */
! vim_create_process(p, TRUE, CREATE_DEFAULT_ERROR_MODE, &si, &pi);
if (p != cmd)
vim_free(p);
***************
*** 4410,4416 ****
}
#else
! # define mch_system(c, o) system(c)
#endif
--- 4433,4457 ----
}
#else
! # 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
***************
*** 4578,4593 ****
* 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
x = 0;
else
{
--- 4619,4625 ----
* inherit our handles which causes unpleasant dangling swap
* files if we exit before the spawned process
*/
! if (vim_create_process(newcmd, FALSE, flags, &si, &pi))
x = 0;
else
{
*** ../vim-7.4.121/src/version.c 2013-12-11 17:44:33.000000000 +0100
--- src/version.c 2013-12-11 17:48:09.000000000 +0100
***************
*** 740,741 ****
--- 740,743 ----
{ /* Add new patch number below this line */
+ /**/
+ 122,
/**/
--
Never overestimate a man's ability to underestimate a woman.
/// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ an exciting new programming language -- http://www.Zimbu.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///