summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorGuyBrush <miguel.barro@live.com>2024-01-14 20:08:40 +0100
committerChristian Brabandt <cb@256bit.org>2024-01-14 20:08:40 +0100
commit1f13fcc9342e66842bf9847d01e585ea2c2b6b30 (patch)
tree3cbff23d9ff204226fabe5b83c108f7849978b9b /src
parent8102a4c463c21f3bba4f27f0dbc402b9850de915 (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>
Diffstat (limited to 'src')
-rw-r--r--src/os_win32.c16
-rw-r--r--src/version.c2
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,