Alexandre Julliard : server: Let the directory code handle device names.

Alexandre Julliard julliard at wine.codeweavers.com
Mon Dec 5 08:54:21 CST 2005


Module: wine
Branch: refs/heads/master
Commit: d13095bc8476ce8259ffad4ff732da915398d458
URL:    http://source.winehq.org/git/?p=wine.git;a=commit;h=d13095bc8476ce8259ffad4ff732da915398d458

Author: Alexandre Julliard <julliard at 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 */
 




More information about the wine-cvs mailing list