Alexandre Julliard : server: Use the lookup_name operation when creating a named object.
Alexandre Julliard
julliard at wine.codeweavers.com
Mon Feb 8 10:09:20 CST 2016
Module: wine
Branch: master
Commit: 0458a7d0e3f4fb293a1e5160a6868fda1d065330
URL: http://source.winehq.org/git/wine.git/?a=commit;h=0458a7d0e3f4fb293a1e5160a6868fda1d065330
Author: Alexandre Julliard <julliard at winehq.org>
Date: Mon Feb 8 14:10:18 2016 +0900
server: Use the lookup_name operation when creating a named object.
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
server/directory.c | 31 +------------------------------
server/object.c | 24 ++++++++++++++----------
server/object.h | 2 +-
server/winstation.c | 2 +-
4 files changed, 17 insertions(+), 42 deletions(-)
diff --git a/server/directory.c b/server/directory.c
index cba3a35..9b85ac7 100644
--- a/server/directory.c
+++ b/server/directory.c
@@ -254,36 +254,7 @@ struct object *find_object_dir( struct directory *root, const struct unicode_str
void *create_named_object_dir( struct directory *root, const struct unicode_str *name,
unsigned int attributes, const struct object_ops *ops )
{
- struct object *obj, *new_obj = NULL;
- struct unicode_str new_name;
-
- if (!name || !name->len)
- {
- if ((new_obj = alloc_object( ops ))) clear_error();
- return new_obj;
- }
-
- if (!(obj = find_object_dir( root, name, attributes, &new_name ))) return NULL;
- if (!new_name.len)
- {
- if (attributes & OBJ_OPENIF && obj->ops == ops)
- set_error( STATUS_OBJECT_NAME_EXISTS );
- else
- {
- release_object( obj );
- obj = NULL;
- if (attributes & OBJ_OPENIF)
- set_error( STATUS_OBJECT_TYPE_MISMATCH );
- else
- set_error( STATUS_OBJECT_NAME_COLLISION );
- }
- return obj;
- }
-
- if ((new_obj = create_object( obj, ops, &new_name ))) clear_error();
-
- release_object( obj );
- return new_obj;
+ return create_named_object( &root->obj, ops, name, attributes );
}
/* open a new handle to an existing object */
diff --git a/server/object.c b/server/object.c
index 297a5b3..c8e799b 100644
--- a/server/object.c
+++ b/server/object.c
@@ -282,18 +282,20 @@ void *create_object( struct object *parent, const struct object_ops *ops, const
return obj;
}
-void *create_named_object( struct object *parent, struct namespace *namespace, const struct object_ops *ops,
+/* create an object as named child under the specified parent */
+void *create_named_object( struct object *parent, const struct object_ops *ops,
const struct unicode_str *name, unsigned int attributes )
{
- struct object *obj;
+ struct object *obj, *new_obj;
+ struct unicode_str new_name;
- if (!name || !name->len)
- {
- if ((obj = alloc_object( ops ))) clear_error();
- return obj;
- }
+ clear_error();
- if ((obj = find_object( namespace, name, attributes )))
+ if (!name || !name->len) return alloc_object( ops );
+
+ if (!(obj = lookup_named_object( parent, name, attributes, &new_name ))) return NULL;
+
+ if (!new_name.len)
{
if (attributes & OBJ_OPENIF && obj->ops == ops)
set_error( STATUS_OBJECT_NAME_EXISTS );
@@ -308,8 +310,10 @@ void *create_named_object( struct object *parent, struct namespace *namespace, c
}
return obj;
}
- if ((obj = create_object( parent, ops, name ))) clear_error();
- return obj;
+
+ new_obj = create_object( obj, ops, &new_name );
+ release_object( obj );
+ return new_obj;
}
/* recursive helper for dump_object_name */
diff --git a/server/object.h b/server/object.h
index 90112d7..287015e 100644
--- a/server/object.h
+++ b/server/object.h
@@ -136,7 +136,7 @@ extern struct object *lookup_named_object( struct object *root, const struct uni
unsigned int attr, struct unicode_str *name_left );
extern void *create_object( struct object *parent, const struct object_ops *ops,
const struct unicode_str *name );
-extern void *create_named_object( struct object *parent, struct namespace *namespace, const struct object_ops *ops,
+extern void *create_named_object( struct object *parent, const struct object_ops *ops,
const struct unicode_str *name, unsigned int attributes );
extern void unlink_named_object( struct object *obj );
extern void make_object_static( struct object *obj );
diff --git a/server/winstation.c b/server/winstation.c
index dbfece0..4131a82 100644
--- a/server/winstation.c
+++ b/server/winstation.c
@@ -217,7 +217,7 @@ static struct desktop *create_desktop( const struct unicode_str *name, unsigned
{
struct desktop *desktop;
- if ((desktop = create_named_object( &winstation->obj, winstation->desktop_names, &desktop_ops, name, attr )))
+ if ((desktop = create_named_object( &winstation->obj, &desktop_ops, name, attr )))
{
if (get_error() != STATUS_OBJECT_NAME_EXISTS)
{
More information about the wine-cvs
mailing list