Alexandre Julliard : server: Store valid file options in pseudo file descriptors.

Alexandre Julliard julliard at wine.codeweavers.com
Fri May 4 07:11:07 CDT 2007


Module: wine
Branch: master
Commit: 017480d4e29228dd169f14c31815daee991e3e6f
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=017480d4e29228dd169f14c31815daee991e3e6f

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Thu May  3 16:07:30 2007 +0200

server: Store valid file options in pseudo file descriptors.

---

 server/fd.c         |    3 ++-
 server/file.h       |    3 ++-
 server/mailslot.c   |    2 +-
 server/named_pipe.c |    4 ++--
 4 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/server/fd.c b/server/fd.c
index 4ad4da5..c4a0288 100644
--- a/server/fd.c
+++ b/server/fd.c
@@ -1409,7 +1409,7 @@ static struct fd *alloc_fd_object(void)
 }
 
 /* allocate a pseudo fd object, for objects that need to behave like files but don't have a unix fd */
-struct fd *alloc_pseudo_fd( const struct fd_ops *fd_user_ops, struct object *user )
+struct fd *alloc_pseudo_fd( const struct fd_ops *fd_user_ops, struct object *user, unsigned int options )
 {
     struct fd *fd = alloc_object( &fd_ops );
 
@@ -1420,6 +1420,7 @@ struct fd *alloc_pseudo_fd( const struct fd_ops *fd_user_ops, struct object *use
     fd->inode      = NULL;
     fd->closed     = NULL;
     fd->access     = 0;
+    fd->options    = options;
     fd->sharing    = 0;
     fd->unix_fd    = -1;
     fd->signaled   = 0;
diff --git a/server/file.h b/server/file.h
index 09c90c3..df5988d 100644
--- a/server/file.h
+++ b/server/file.h
@@ -52,7 +52,8 @@ struct fd_ops
 
 /* file descriptor functions */
 
-extern struct fd *alloc_pseudo_fd( const struct fd_ops *fd_user_ops, struct object *user );
+extern struct fd *alloc_pseudo_fd( const struct fd_ops *fd_user_ops, struct object *user,
+                                   unsigned int options );
 extern void set_no_fd_status( struct fd *fd, unsigned int status );
 extern struct fd *open_fd( const char *name, int flags, mode_t *mode, unsigned int access,
                            unsigned int sharing, unsigned int options );
diff --git a/server/mailslot.c b/server/mailslot.c
index 8bcb723..fd50080 100644
--- a/server/mailslot.c
+++ b/server/mailslot.c
@@ -359,7 +359,7 @@ void create_mailslot_device( struct directory *root, const struct unicode_str *n
         get_error() != STATUS_OBJECT_NAME_EXISTS)
     {
         dev->mailslots = NULL;
-        if (!(dev->fd = alloc_pseudo_fd( &mailslot_device_fd_ops, &dev->obj )) ||
+        if (!(dev->fd = alloc_pseudo_fd( &mailslot_device_fd_ops, &dev->obj, 0 )) ||
             !(dev->mailslots = create_namespace( 7 )))
         {
             release_object( dev );
diff --git a/server/named_pipe.c b/server/named_pipe.c
index f2c7947..801b4d7 100644
--- a/server/named_pipe.c
+++ b/server/named_pipe.c
@@ -480,7 +480,7 @@ void create_named_pipe_device( struct directory *root, const struct unicode_str
         get_error() != STATUS_OBJECT_NAME_EXISTS)
     {
         dev->pipes = NULL;
-        if (!(dev->fd = alloc_pseudo_fd( &named_pipe_device_fd_ops, &dev->obj )) ||
+        if (!(dev->fd = alloc_pseudo_fd( &named_pipe_device_fd_ops, &dev->obj, 0 )) ||
             !(dev->pipes = create_namespace( 7 )))
         {
             release_object( dev );
@@ -709,7 +709,7 @@ static struct pipe_server *create_pipe_server( struct named_pipe *pipe, unsigned
 
     list_add_head( &pipe->servers, &server->entry );
     grab_object( pipe );
-    if (!(server->ioctl_fd = alloc_pseudo_fd( &pipe_server_fd_ops, &server->obj )))
+    if (!(server->ioctl_fd = alloc_pseudo_fd( &pipe_server_fd_ops, &server->obj, options )))
     {
         release_object( server );
         server = NULL;




More information about the wine-cvs mailing list