fhandler_pipe is currently the only class derived from fhandler_base_overlapped. This patch series rewrites parts of fhandler_pipe so that it can be derived from fhandler_base instead. We can then simplify the code by removing fhandler_base_overlapped.
In particular, this gets rid of the peculiar situation in which a non-blocking write can return with I/O pending, leading to the ugliness in fhandler_base_overlapped::close. I've marked these patches as drafts because I've undoubtedly overlooked some things. Also, I haven't systematically done any regression tests. I have, however, run all the sample pipe programs in Kerrisk's book "The Linux Programming Interface: Linux and UNIX System Programming Handbook". I've also run emacs-X11, gdb, git, make, etc., so far without problems. Ken Brown (6): Cygwin: fhandler_pipe: derive from fhandler_base Cygwin: fhandler_pipe: add raw_read and raw_write Cygwin: fhandler_pipe: set the blocking mode of the Windows pipe Cygwin: fhandler_pipe: fix permission problem Cygwin: remove the fhandler_base_overlapped class Cygwin: add fhandler_base::npfs_handle winsup/cygwin/fhandler.cc | 395 ++------------------------ winsup/cygwin/fhandler.h | 90 +----- winsup/cygwin/fhandler_fifo.cc | 30 -- winsup/cygwin/fhandler_pipe.cc | 354 ++++++++++++++++++++++- winsup/cygwin/fhandler_socket_unix.cc | 30 -- winsup/cygwin/syscalls.cc | 1 - 6 files changed, 380 insertions(+), 520 deletions(-) -- 2.17.0