diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-13 07:39:57 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-13 07:40:16 +0000 |
commit | 6af24b2457752c0d36aaf9f29f03d39afd09937f (patch) | |
tree | 2671b594908d1f971de6b2a2d473f97dfb7291d2 /src/os_win32.c | |
parent | Releasing progress-linux version 2:9.1.0016-1~progress7.99u1. (diff) | |
download | vim-6af24b2457752c0d36aaf9f29f03d39afd09937f.tar.xz vim-6af24b2457752c0d36aaf9f29f03d39afd09937f.zip |
Merging upstream version 2:9.1.0199.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/os_win32.c')
-rw-r--r-- | src/os_win32.c | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/src/os_win32.c b/src/os_win32.c index dbfc4ee..9947150 100644 --- a/src/os_win32.c +++ b/src/os_win32.c @@ -5155,8 +5155,7 @@ mch_system_piped(char *cmd, int options) ) { len = 0; - if (!(options & SHELL_EXPAND) - && ((options & + if (((options & (SHELL_READ|SHELL_WRITE|SHELL_COOKED)) != (SHELL_READ|SHELL_WRITE|SHELL_COOKED) # ifdef FEAT_GUI @@ -5176,7 +5175,7 @@ mch_system_piped(char *cmd, int options) { /* * For pipes: Check for CTRL-C: send interrupt signal to - * child. Check for CTRL-D: EOF, close pipe to child. + * child. */ if (len == 1 && cmd != NULL) { @@ -5186,10 +5185,22 @@ mch_system_piped(char *cmd, int options) // now put 9 as SIGKILL TerminateProcess(pi.hProcess, 9); } - if (ta_buf[ta_len] == Ctrl_D) + } + + /* + * Check for CTRL-D: EOF, close pipe to child. + * Ctrl_D may be decorated by _OnChar() + */ + if ((len == 1 || len == 4 ) && cmd != NULL) + { + if (ta_buf[0] == Ctrl_D + || (ta_buf[0] == CSI + && ta_buf[1] == KS_MODIFIER + && ta_buf[3] == Ctrl_D)) { CloseHandle(g_hChildStd_IN_Wr); g_hChildStd_IN_Wr = NULL; + len = 0; } } |