https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=f67a5cffe052b9e746f0baf64fb762e8b2de162d

commit f67a5cffe052b9e746f0baf64fb762e8b2de162d
Author: Takashi Yano <takashi.y...@nifty.ne.jp>
Date:   Thu Jul 24 14:36:48 2025 +0900

    Cygwin: Fix handling of archetype fhandler in process_fd
    
    Previously, process_fd failed to correctly handle fhandlers using an
    archetype. This was due to the missing PATH_OPEN flag in path_conv,
    which caused build_fh_pc() to skip archetype initialization. The
    root cause was a bug where open() did not set the PATH_OPEN flag
    for fhandlers using an archetype.
    
    This patch introduces a new method, path_conv::set_isopen(), to
    explicitly set the PATH_OPEN flag in path_flags in fhandler_base::
    open_with_arch().
    
    Addresses: https://cygwin.com/pipermail/cygwin/2025-May/258167.html
    Fixes: 92ddb7429065 ("(build_pc_pc): Use fh_alloc to create. Set name from 
fh->dev if appropriate. Generate an archetype or point to one here.")
    Reported-by: Christian Franke <christian.fra...@t-online.de>
    Reviewed-by: Corinna Vinschen <cori...@vinschen.de>
    Signed-off-by: Takashi Yano <takashi.y...@nifty.ne.jp>

Diff:
---
 winsup/cygwin/fhandler/base.cc      | 3 +++
 winsup/cygwin/local_includes/path.h | 1 +
 winsup/cygwin/release/3.6.5         | 3 +++
 3 files changed, 7 insertions(+)

diff --git a/winsup/cygwin/fhandler/base.cc b/winsup/cygwin/fhandler/base.cc
index 64a5f6aea..beebd710c 100644
--- a/winsup/cygwin/fhandler/base.cc
+++ b/winsup/cygwin/fhandler/base.cc
@@ -474,6 +474,9 @@ fhandler_base::open_with_arch (int flags, mode_t mode)
       if (!open_setup (flags))
        api_fatal ("open_setup failed, %E");
     }
+  /* For pty and console, PATH_OPEN flag has not been set in open().
+     So set it here unconditionally. */
+  pc.set_isopen ();
 
   close_on_exec (flags & O_CLOEXEC);
   /* A unique ID is necessary to recognize fhandler entries which are
diff --git a/winsup/cygwin/local_includes/path.h 
b/winsup/cygwin/local_includes/path.h
index 1fd542c96..a9ce2c7e4 100644
--- a/winsup/cygwin/local_includes/path.h
+++ b/winsup/cygwin/local_includes/path.h
@@ -244,6 +244,7 @@ class path_conv
   int isopen () const {return path_flags & PATH_OPEN;}
   int isctty_capable () const {return path_flags & PATH_CTTY;}
   int follow_fd_symlink () const {return path_flags & PATH_RESOLVE_PROCFD;}
+  void set_isopen () {path_flags |= PATH_OPEN;}
   void set_cygexec (bool isset)
   {
     if (isset)
diff --git a/winsup/cygwin/release/3.6.5 b/winsup/cygwin/release/3.6.5
index 97bb39792..f14fbe6e1 100644
--- a/winsup/cygwin/release/3.6.5
+++ b/winsup/cygwin/release/3.6.5
@@ -19,3 +19,6 @@ Fixes:
 - Instead, fix internal conversion of filenames in case of an invalid
   4 byte UTF-8 sequence.
   Addresses: https://cygwin.com/pipermail/cygwin/2025-June/258358.html
+
+- Make process_fd correctly handle pty and console.
+  Addresses: https://cygwin.com/pipermail/cygwin/2025-May/258167.html

Reply via email to