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:
parent
00b2e56d31
commit
816c6da53a
|
@ -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 ();
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Reference in New Issue