/* 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;
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 );
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 );
}
release_object( link_global2 );
release_object( link_local );
+ release_object( dir_device );
release_object( dir_driver );
release_object( root_directory );
}
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 )))
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;
/* 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 )))
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 */