Vitaliy Margolen wrote:
Wednesday, November 23, 2005, 11:05:05 AM, Robert Shearman wrote:
Alexandre Julliard wrote:
Vitaliy Margolen wine-devel@kievinfo.com writes:
+/* open a new handle to an existing object */ +obj_handle_t open_object_dir( const struct object_attr *attr, const struct object_ops *ops,
unsigned int access )
If so, I don't see much of a problem with it. Maybe we shouldn't return a handle, but instead return a "struct object *" or a "void *", but passing in struct object_ops * into the function isn't doing anything other than eliminating common code in most of the objects. It doesn't force anything to be exported outside of the implementation of the object.
The part I'm talking about is this: Using object_attr: static struct object *create_mapping( const struct object_attr *attr, file_pos_t size, int protect, obj_handle_t handle )
No using object_attr: static struct object *create_mapping( const struct object *root, const struct unicode_str *name, unsigned int attr, file_pos_t size, int protect, obj_handle_t handle )
And this: struct object_attr { obj_handle_t rootdir; /* RootDirectory */ struct unicode_str *name; /* ObjectName */ unsigned int attributes; /* Attributes */ };
I can replace handle with object * but that will just add more code to each [open|close]_[even|mapping|semaphore|timer|namedpipe|winstation|desktop]
That obviously should be a "struct directory *" (note: not const since you will be inserting it into the directory) if it isn't an obj_handle_t. However, I agree that the check would be best inside of create_named_object_dir, since nothing else in the creation paths is going to use the root directory and the root directory will always be of type "directory". I don't really have an opinion on whether a struct object_attr is better than passing parameters explicitly.