Module: wine Branch: master Commit: 017480d4e29228dd169f14c31815daee991e3e6f URL: http://source.winehq.org/git/wine.git/?a=commit;h=017480d4e29228dd169f14c318...
Author: Alexandre Julliard julliard@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;