Module: wine Branch: refs/heads/master Commit: d13095bc8476ce8259ffad4ff732da915398d458 URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=d13095bc8476ce8259ffad4f...
Author: Alexandre Julliard julliard@winehq.org Date: Mon Dec 5 14:52:02 2005 +0100
server: Let the directory code handle device names.
---
server/directory.c | 16 +++++++++++----- server/mailslot.c | 6 ++---- server/named_pipe.c | 9 +++------ server/object.h | 6 ++++-- 4 files changed, 20 insertions(+), 17 deletions(-)
diff --git a/server/directory.c b/server/directory.c index 14ed4cc..21dec3a 100644 --- a/server/directory.c +++ b/server/directory.c @@ -283,7 +283,7 @@ void *open_object_dir( struct directory
/* Global initialization */
-static struct directory *dir_driver; +static struct directory *dir_driver, *dir_device; static struct symlink *link_dosdev, *link_global1, *link_global2, *link_local; static struct named_pipe_device *dev_named_pipe; static struct mailslot_device *dev_mailslot; @@ -308,7 +308,13 @@ void init_directories(void) static const struct unicode_str link_global_str = {link_globalW, sizeof(link_globalW)}; static const struct unicode_str link_local_str = {link_localW, sizeof(link_localW)};
- struct directory *dir_global, *dir_basenamed, *dir_device; + /* devices */ + static const WCHAR pipeW[] = {'P','I','P','E'}; + static const WCHAR mailslotW[] = {'M','A','I','L','S','L','O','T'}; + static const struct unicode_str pipe_str = {pipeW, sizeof(pipeW)}; + static const struct unicode_str mailslot_str = {mailslotW, sizeof(mailslotW)}; + + struct directory *dir_global, *dir_basenamed;
root_directory = create_directory( NULL, NULL, 0, HASH_SIZE ); dir_driver = create_directory( root_directory, &dir_driver_str, 0, HASH_SIZE ); @@ -325,11 +331,10 @@ void init_directories(void) link_local = create_symlink( dir_basenamed, &link_local_str, 0, &dir_basenamed_str );
/* devices */ - dev_named_pipe = create_named_pipe_device(); - dev_mailslot = create_mailslot_device(); + dev_named_pipe = create_named_pipe_device( dir_global, &pipe_str ); + dev_mailslot = create_mailslot_device( dir_global, &mailslot_str );
/* the symlinks or devices hold references so we can release these */ - release_object( dir_device ); release_object( dir_global ); release_object( dir_basenamed ); } @@ -344,6 +349,7 @@ void close_directories(void) release_object( link_global2 ); release_object( link_local );
+ release_object( dir_device ); release_object( dir_driver ); release_object( root_directory ); } diff --git a/server/mailslot.c b/server/mailslot.c index 7d2d0b0..c882896 100644 --- a/server/mailslot.c +++ b/server/mailslot.c @@ -269,13 +269,11 @@ static void mailslot_device_destroy( str free( device->mailslots ); }
-struct mailslot_device *create_mailslot_device( void ) +struct mailslot_device *create_mailslot_device( struct directory *root, const struct unicode_str *name ) { - static const WCHAR mailslotW[] = {'\','?','?','\','M','A','I','L','S','L','O','T'}; - static struct unicode_str mailslot = {mailslotW, sizeof(mailslotW)}; struct mailslot_device *dev;
- if ((dev = create_named_object_dir( NULL, &mailslot, 0, &mailslot_device_ops )) && + if ((dev = create_named_object_dir( root, name, 0, &mailslot_device_ops )) && get_error() != STATUS_OBJECT_NAME_EXISTS) { if (!(dev->mailslots = create_namespace( 7 ))) diff --git a/server/named_pipe.c b/server/named_pipe.c index ac6aaab..2917d7b 100644 --- a/server/named_pipe.c +++ b/server/named_pipe.c @@ -379,8 +379,6 @@ static struct object *named_pipe_device_ assert( obj->ops == &named_pipe_device_ops ); assert( device->pipes );
- if (!name->len) return NULL; - if ((found = find_object( device->pipes, name, attr | OBJ_CASE_INSENSITIVE ))) name->len = 0;
@@ -397,13 +395,12 @@ static void named_pipe_device_destroy( s /* this will be deleted as soon an we fix wait_named_pipe */ static struct named_pipe_device *named_pipe_device;
-struct named_pipe_device *create_named_pipe_device( void ) +struct named_pipe_device *create_named_pipe_device( struct directory *root, + const struct unicode_str *name ) { - static const WCHAR pipeW[] = {'\','?','?','\','P','I','P','E'}; - static struct unicode_str pipe = {pipeW, sizeof(pipeW)}; struct named_pipe_device *dev;
- if ((dev = create_named_object_dir( NULL, &pipe, 0, &named_pipe_device_ops )) && + if ((dev = create_named_object_dir( root, name, 0, &named_pipe_device_ops )) && get_error() != STATUS_OBJECT_NAME_EXISTS) { if (!(dev->pipes = create_namespace( 7 ))) diff --git a/server/object.h b/server/object.h index 06ce443..ba7ca90 100644 --- a/server/object.h +++ b/server/object.h @@ -198,8 +198,10 @@ extern struct symlink *create_symlink( s unsigned int attr, const struct unicode_str *target );
/* devices */ -extern struct named_pipe_device *create_named_pipe_device( void ); -extern struct mailslot_device *create_mailslot_device( void ); +extern struct named_pipe_device *create_named_pipe_device( struct directory *root, + const struct unicode_str *name ); +extern struct mailslot_device *create_mailslot_device( struct directory *root, + const struct unicode_str *name );
/* global variables */