]> sourceware.org Git - newlib-cygwin.git/commitdiff
Cygwin: FIFO: add a HANDLE parameter to open_pipe
authorKen Brown <kbrown@cornell.edu>
Thu, 9 May 2019 15:36:26 +0000 (11:36 -0400)
committerKen Brown <kbrown@cornell.edu>
Thu, 9 May 2019 18:41:29 +0000 (14:41 -0400)
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.

winsup/cygwin/fhandler.h
winsup/cygwin/fhandler_fifo.cc

index 16165c42f22ad49ab0c5c4813a1d93b39900d635..683aae15c24d970ff011a5d28f852eddbe576120 100644 (file)
@@ -1270,7 +1270,7 @@ class fhandler_fifo: public fhandler_base
   bool __reg2 wait (HANDLE);
   NTSTATUS npfs_handle (HANDLE &);
   HANDLE create_pipe_instance (bool);
-  NTSTATUS open_pipe ();
+  NTSTATUS open_pipe (HANDLE&);
   int add_client_handler ();
   void delete_client_handler (int);
   bool listen_client ();
index 1a1610998331f2482d1bdf5c3042ff0ee210c897..4d05727cbe86f0c41f71d243cf08a441fce6fc38 100644 (file)
@@ -194,9 +194,9 @@ fhandler_fifo::create_pipe_instance (bool first)
   return ph;
 }
 
-/* Called when a FIFO is opened for writing. */
+/* Connect to a pipe instance. */
 NTSTATUS
-fhandler_fifo::open_pipe ()
+fhandler_fifo::open_pipe (HANDLE& ph)
 {
   NTSTATUS status;
   HANDLE npfsh;
@@ -204,7 +204,6 @@ fhandler_fifo::open_pipe ()
   OBJECT_ATTRIBUTES attr;
   IO_STATUS_BLOCK io;
   ULONG sharing;
-  HANDLE ph = NULL;
 
   status = npfs_handle (npfsh);
   if (!NT_SUCCESS (status))
@@ -214,8 +213,6 @@ fhandler_fifo::open_pipe ()
                              npfsh, NULL);
   sharing = FILE_SHARE_READ | FILE_SHARE_WRITE;
   status = NtOpenFile (&ph, access, &attr, &io, sharing, 0);
-  if (NT_SUCCESS (status))
-    set_handle (ph);
   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 (duplexer)
     {
+      HANDLE ph = NULL;
+
       if (add_client_handler () < 0)
        {
          res = error_errno_set;
          goto out;
        }
-      NTSTATUS status = open_pipe ();
+      NTSTATUS status = open_pipe (ph);
       if (NT_SUCCESS (status))
        {
          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
        {
@@ -525,7 +525,7 @@ fhandler_fifo::open (int flags, mode_t)
              res = error_errno_set;
              goto out;
            }
-         NTSTATUS status = open_pipe ();
+         NTSTATUS status = open_pipe (get_handle ());
          if (NT_SUCCESS (status))
            {
              set_pipe_non_blocking (get_handle (), flags & O_NONBLOCK);
This page took 0.034352 seconds and 5 git commands to generate.