Cygwin: FIFO: add a HANDLE parameter to open_pipe

It's now up to the caller to pass a handle to open_pipe and, if
desired, to call set_handle on return.

This will be useful for a future commit, in which we will open a
client connection without setting an io_handle.
This commit is contained in:
Ken Brown 2019-05-09 11:36:26 -04:00
parent 00b2e56d31
commit 816c6da53a
2 changed files with 9 additions and 9 deletions

View File

@ -1270,7 +1270,7 @@ class fhandler_fifo: public fhandler_base
bool __reg2 wait (HANDLE); bool __reg2 wait (HANDLE);
NTSTATUS npfs_handle (HANDLE &); NTSTATUS npfs_handle (HANDLE &);
HANDLE create_pipe_instance (bool); HANDLE create_pipe_instance (bool);
NTSTATUS open_pipe (); NTSTATUS open_pipe (HANDLE&);
int add_client_handler (); int add_client_handler ();
void delete_client_handler (int); void delete_client_handler (int);
bool listen_client (); bool listen_client ();

View File

@ -194,9 +194,9 @@ fhandler_fifo::create_pipe_instance (bool first)
return ph; return ph;
} }
/* Called when a FIFO is opened for writing. */ /* Connect to a pipe instance. */
NTSTATUS NTSTATUS
fhandler_fifo::open_pipe () fhandler_fifo::open_pipe (HANDLE& ph)
{ {
NTSTATUS status; NTSTATUS status;
HANDLE npfsh; HANDLE npfsh;
@ -204,7 +204,6 @@ fhandler_fifo::open_pipe ()
OBJECT_ATTRIBUTES attr; OBJECT_ATTRIBUTES attr;
IO_STATUS_BLOCK io; IO_STATUS_BLOCK io;
ULONG sharing; ULONG sharing;
HANDLE ph = NULL;
status = npfs_handle (npfsh); status = npfs_handle (npfsh);
if (!NT_SUCCESS (status)) if (!NT_SUCCESS (status))
@ -214,8 +213,6 @@ fhandler_fifo::open_pipe ()
npfsh, NULL); npfsh, NULL);
sharing = FILE_SHARE_READ | FILE_SHARE_WRITE; sharing = FILE_SHARE_READ | FILE_SHARE_WRITE;
status = NtOpenFile (&ph, access, &attr, &io, sharing, 0); status = NtOpenFile (&ph, access, &attr, &io, sharing, 0);
if (NT_SUCCESS (status))
set_handle (ph);
return status; return status;
} }
@ -472,16 +469,19 @@ fhandler_fifo::open (int flags, mode_t)
/* If we're a duplexer, create the pipe and the first client handler. */ /* If we're a duplexer, create the pipe and the first client handler. */
if (duplexer) if (duplexer)
{ {
HANDLE ph = NULL;
if (add_client_handler () < 0) if (add_client_handler () < 0)
{ {
res = error_errno_set; res = error_errno_set;
goto out; goto out;
} }
NTSTATUS status = open_pipe (); NTSTATUS status = open_pipe (ph);
if (NT_SUCCESS (status)) if (NT_SUCCESS (status))
{ {
record_connection (fc_handler[0]); record_connection (fc_handler[0]);
set_pipe_non_blocking (get_handle (), flags & O_NONBLOCK); set_handle (ph);
set_pipe_non_blocking (ph, flags & O_NONBLOCK);
} }
else else
{ {
@ -525,7 +525,7 @@ fhandler_fifo::open (int flags, mode_t)
res = error_errno_set; res = error_errno_set;
goto out; goto out;
} }
NTSTATUS status = open_pipe (); NTSTATUS status = open_pipe (get_handle ());
if (NT_SUCCESS (status)) if (NT_SUCCESS (status))
{ {
set_pipe_non_blocking (get_handle (), flags & O_NONBLOCK); set_pipe_non_blocking (get_handle (), flags & O_NONBLOCK);