diff options
author | GuyBrush <miguel.barro@live.com> | 2024-01-14 20:08:40 +0100 |
---|---|---|
committer | Christian Brabandt <cb@256bit.org> | 2024-01-14 20:08:40 +0100 |
commit | 1f13fcc9342e66842bf9847d01e585ea2c2b6b30 (patch) | |
tree | 3cbff23d9ff204226fabe5b83c108f7849978b9b | |
parent | 8102a4c463c21f3bba4f27f0dbc402b9850de915 (diff) |
patch 9.1.0028: win32: Ctrl-D cannot be used to close a pipev9.1.0028
Problem: win32: Ctrl-D cannot be used to close a pipe
Solution: Properly detect Ctrl-D when reading from a pipe
(GuyBrush)
Enabling Ctrl-D for gvim pipeline input
and apply defensive programming on account of PR #12752
so that once PR 12752 is merged, CTRL-D will keep on working
closes: #13849
Signed-off-by: GuyBrush <miguel.barro@live.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
-rw-r--r-- | src/os_win32.c | 16 | ||||
-rw-r--r-- | src/version.c | 2 |
2 files changed, 16 insertions, 2 deletions
diff --git a/src/os_win32.c b/src/os_win32.c index dbfc4eeca7..3f2b3c3a4c 100644 --- a/src/os_win32.c +++ b/src/os_win32.c @@ -5176,7 +5176,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 +5186,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; } } diff --git a/src/version.c b/src/version.c index a17ae156b2..f01cac8b7c 100644 --- a/src/version.c +++ b/src/version.c @@ -705,6 +705,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 28, +/**/ 27, /**/ 26, |