OSDN Git Service

* fhandler.h (class fhandler_mailslot): Declare new private method
authorcorinna <corinna>
Thu, 12 Nov 2009 03:16:56 +0000 (03:16 +0000)
committercorinna <corinna>
Thu, 12 Nov 2009 03:16:56 +0000 (03:16 +0000)
get_object_attr.
* fhandler_mailslot.cc (fhandler_mailslot::get_object_attr): Implement.
(fhandler_mailslot::open): Replace calls to path_conv::get_object_attr
with calls to fhandler_mailslot::get_object_attr.

winsup/cygwin/ChangeLog
winsup/cygwin/fhandler.h
winsup/cygwin/fhandler_mailslot.cc

index cdf7280..747672a 100644 (file)
@@ -1,3 +1,11 @@
+2009-11-11  Corinna Vinschen  <corinna@vinschen.de>
+
+       * fhandler.h (class fhandler_mailslot): Declare new private method
+       get_object_attr.
+       * fhandler_mailslot.cc (fhandler_mailslot::get_object_attr): Implement.
+       (fhandler_mailslot::open): Replace calls to path_conv::get_object_attr
+       with calls to fhandler_mailslot::get_object_attr.
+
 2009-11-10  Corinna Vinschen  <corinna@vinschen.de>
 
        * fhandler_console.cc (fhandler_console::read): Revert change from
index cb12d2b..bc08dd1 100644 (file)
@@ -397,6 +397,7 @@ class fhandler_base
 
 class fhandler_mailslot : public fhandler_base
 {
+  POBJECT_ATTRIBUTES get_object_attr (OBJECT_ATTRIBUTES &, PUNICODE_STRING);
  public:
   fhandler_mailslot ();
   int __stdcall fstat (struct __stat64 *buf) __attribute__ ((regparm (2)));
index c0813df..a59a3dc 100644 (file)
@@ -15,6 +15,8 @@
 #include "path.h"
 #include "fhandler.h"
 #include "ntdll.h"
+#include "shared_info.h"
+#include "tls_pbuf.h"
 
 /**********************************************************************/
 /* fhandler_mailslot */
@@ -43,6 +45,18 @@ fhandler_mailslot::fstat (struct __stat64 *buf)
   return 0;
 }
 
+POBJECT_ATTRIBUTES
+fhandler_mailslot::get_object_attr (OBJECT_ATTRIBUTES &attr,
+                                   PUNICODE_STRING path)
+{
+  
+  RtlCopyUnicodeString (path, pc.get_nt_native_path ());
+  RtlAppendUnicodeStringToString (path, &installation_key);
+  InitializeObjectAttributes (&attr, path, OBJ_CASE_INSENSITIVE | OBJ_INHERIT,
+                             NULL, NULL);
+  return &attr;
+}
+
 int
 fhandler_mailslot::open (int flags, mode_t mode)
 {
@@ -52,13 +66,17 @@ fhandler_mailslot::open (int flags, mode_t mode)
   OBJECT_ATTRIBUTES attr;
   HANDLE x;
   LARGE_INTEGER timeout;
+  tmp_pathbuf tp;
+  UNICODE_STRING path;
 
+  tp.u_get (&path);
+  
   switch (flags & O_ACCMODE)
     {
     case O_RDONLY:     /* Server */
       timeout.QuadPart = (flags & O_NONBLOCK) ? 0LL : 0x8000000000000000LL;
       status = NtCreateMailslotFile (&x, GENERIC_READ | SYNCHRONIZE,
-                                    pc.get_object_attr (attr, sec_none),
+                                    get_object_attr (attr, &path),
                                     &io, FILE_SYNCHRONOUS_IO_NONALERT,
                                     0, 0, &timeout);
       if (!NT_SUCCESS (status))
@@ -79,7 +97,7 @@ fhandler_mailslot::open (int flags, mode_t mode)
              break;
            }
          status = NtOpenFile (&x, GENERIC_READ | SYNCHRONIZE,
-                              pc.get_object_attr (attr, sec_none), &io,
+                              get_object_attr (attr, &path), &io,
                               FILE_SHARE_VALID_FLAGS,
                               FILE_SYNCHRONOUS_IO_NONALERT);
 #endif
@@ -104,7 +122,7 @@ fhandler_mailslot::open (int flags, mode_t mode)
          break;
        }
       status = NtOpenFile (&x, GENERIC_WRITE | SYNCHRONIZE,
-                          pc.get_object_attr (attr, sec_none), &io,
+                          get_object_attr (attr, &path), &io,
                           FILE_SHARE_VALID_FLAGS,
                           FILE_SYNCHRONOUS_IO_NONALERT);
       if (!NT_SUCCESS (status))