Changed fd operations to take a struct fd instead of a struct object.
Removed get_file_info function from object operations.
Added get_device_id request to avoid abusing get_file_info.
diff --git a/server/file.h b/server/file.h
index f5c9a32..351c62e 100644
--- a/server/file.h
+++ b/server/file.h
@@ -29,28 +29,47 @@
struct fd_ops
{
/* get the events we want to poll() for on this object */
- int (*get_poll_events)(struct object *);
+ int (*get_poll_events)(struct fd *);
/* a poll() event occured */
- void (*poll_event)(struct object *,int event);
+ void (*poll_event)(struct fd *,int event);
/* flush the object buffers */
- int (*flush)(struct object *);
+ int (*flush)(struct fd *);
/* get file information */
- int (*get_file_info)(struct object *,struct get_file_info_reply *, int *flags);
+ int (*get_file_info)(struct fd *,struct get_file_info_reply *, int *flags);
/* queue an async operation - see register_async handler in async.c*/
- void (*queue_async)(struct object *, void* ptr, unsigned int status, int type, int count);
+ void (*queue_async)(struct fd *, void* ptr, unsigned int status, int type, int count);
};
+/* file descriptor functions */
+
extern void *alloc_fd_object( const struct object_ops *ops,
const struct fd_ops *fd_user_ops, int unix_fd );
-extern int get_unix_fd( struct object *obj );
+extern void *get_fd_user( struct fd *fd );
+extern int get_unix_fd( struct fd *fd );
extern void set_unix_fd( struct object *obj, int unix_fd );
-extern void close_fd( struct fd *fd );
extern void fd_poll_event( struct object *obj, int event );
+extern int check_fd_events( struct fd *fd, int events );
extern int default_fd_add_queue( struct object *obj, struct wait_queue_entry *entry );
extern void default_fd_remove_queue( struct object *obj, struct wait_queue_entry *entry );
extern int default_fd_signaled( struct object *obj, struct thread *thread );
-extern int no_flush( struct object *obj );
-extern void no_queue_async(struct object *obj, void* ptr, unsigned int status, int type, int count);
+extern void default_poll_event( struct fd *fd, int event );
+extern int no_flush( struct fd *fd );
+extern int no_get_file_info( struct fd *fd, struct get_file_info_reply *info, int *flags );
+extern void no_queue_async( struct fd *fd, void* ptr, unsigned int status, int type, int count );
+
+inline static struct fd *get_obj_fd( struct object *obj ) { return obj->ops->get_fd( obj ); }
+
+/* file functions */
+
+extern struct file *get_file_obj( struct process *process, obj_handle_t handle,
+ unsigned int access );
+extern int get_file_unix_fd( struct file *file );
+extern int is_same_file( struct file *file1, struct file *file2 );
+extern int get_file_drive_type( struct file *file );
+extern int grow_file( struct file *file, int size_high, int size_low );
+extern int create_anonymous_file(void);
+extern struct file *create_temp_file( int access );
+extern void file_set_error(void);
#endif /* __WINE_SERVER_FILE_H */