patch 9.1.0028: win32: Ctrl-D cannot be used to close a pipe

Commit: 
https://github.com/vim/vim/commit/1f13fcc9342e66842bf9847d01e585ea2c2b6b30
Author: GuyBrush <[email protected]>
Date:   Sun Jan 14 20:08:40 2024 +0100

    patch 9.1.0028: win32: Ctrl-D cannot be used to close a pipe
    
    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 <[email protected]>
    Signed-off-by: Christian Brabandt <[email protected]>

diff --git a/src/os_win32.c b/src/os_win32.c
index dbfc4eeca..3f2b3c3a4 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 a17ae156b..f01cac8b7 100644
--- a/src/version.c
+++ b/src/version.c
@@ -704,6 +704,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    28,
 /**/
     27,
 /**/

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/E1rP5wk-00CCLW-Sy%40256bit.org.

Raspunde prin e-mail lui