Implement directory object in wineserver.

Vitaliy Margolen wine-devel at kievinfo.com
Wed Nov 23 13:37:05 CST 2005


Wednesday, November 23, 2005, 11:59:24 AM, Robert Shearman wrote:
> Vitaliy Margolen wrote:
>>Wednesday, November 23, 2005, 11:05:05 AM, Robert Shearman wrote:
>>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 )
> 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.

Ok, then this is what we have:
1. Pass arguments explicitly to each function (rootdir, name,
   attributes).
2. Don't use object_attr structure.

Only left is to decide what rootdir should be (struct object*,
struct directory * or obj_handle_t). The only place that knows enough and
does all the checking is find_object_dir (create_object_dir calls it to
do most of the work). It can't be (struct directory*) because I'm planning
on using these functions for named pipes, mail slots, win stations and
desktops.

So we have only chose of (struct object *) or (obj_handle_t). I'm
thinking we should use (struct object *) then. And call get_directory_obj
in each [open|create]_*

Now, about inserting a new object into a name space. Will it be ok to add
one more function to object_ops? Something like

int obj_insert(struct object *parent, struct object *new_obj); /* 1 on success */








More information about the wine-devel mailing list