Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2009-11-11 21:16:57 +0300
committerCorinna Vinschen <corinna@vinschen.de>2009-11-11 21:16:57 +0300
commitc08f09ab78c1a7ff5ef4392e83c98f4c9fef97aa (patch)
tree36b0a8e30e4cfc9d73834ec55754e6278bdd5835
parentafb7f5666ddcbfbd78275f440cad44fa277a8f22 (diff)
* 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.
-rw-r--r--winsup/cygwin/ChangeLog8
-rw-r--r--winsup/cygwin/fhandler.h1
-rw-r--r--winsup/cygwin/fhandler_mailslot.cc24
3 files changed, 30 insertions, 3 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index cdf728026..747672a43 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -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
diff --git a/winsup/cygwin/fhandler.h b/winsup/cygwin/fhandler.h
index cb12d2b20..bc08dd182 100644
--- a/winsup/cygwin/fhandler.h
+++ b/winsup/cygwin/fhandler.h
@@ -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)));
diff --git a/winsup/cygwin/fhandler_mailslot.cc b/winsup/cygwin/fhandler_mailslot.cc
index c0813df94..a59a3dcf9 100644
--- a/winsup/cygwin/fhandler_mailslot.cc
+++ b/winsup/cygwin/fhandler_mailslot.cc
@@ -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))