Merged the get_read_fd and get_write_fd requests.
diff --git a/server/file.c b/server/file.c
index 61a3dd3..5c0f59a 100644
--- a/server/file.c
+++ b/server/file.c
@@ -45,8 +45,7 @@
static void file_dump( struct object *obj, int verbose );
static int file_get_poll_events( struct object *obj );
-static int file_get_read_fd( struct object *obj );
-static int file_get_write_fd( struct object *obj );
+static int file_get_fd( struct object *obj );
static int file_flush( struct object *obj );
static int file_get_info( struct object *obj, struct get_file_info_request *req );
static void file_destroy( struct object *obj );
@@ -61,8 +60,7 @@
no_satisfied, /* satisfied */
file_get_poll_events, /* get_poll_events */
default_poll_event, /* poll_event */
- file_get_read_fd, /* get_read_fd */
- file_get_write_fd, /* get_write_fd */
+ file_get_fd, /* get_fd */
file_flush, /* flush */
file_get_info, /* get_file_info */
file_destroy /* destroy */
@@ -233,14 +231,7 @@
return events;
}
-static int file_get_read_fd( struct object *obj )
-{
- struct file *file = (struct file *)obj;
- assert( obj->ops == &file_ops );
- return dup( file->obj.fd );
-}
-
-static int file_get_write_fd( struct object *obj )
+static int file_get_fd( struct object *obj )
{
struct file *file = (struct file *)obj;
assert( obj->ops == &file_ops );
@@ -480,26 +471,15 @@
else set_error( STATUS_INVALID_PARAMETER );
}
-/* get a Unix fd to read from a file */
-DECL_HANDLER(get_read_fd)
+/* get a Unix fd to access a file */
+DECL_HANDLER(get_handle_fd)
{
struct object *obj;
- if ((obj = get_handle_obj( current->process, req->handle, GENERIC_READ, NULL )))
+ req->fd = -1;
+ if ((obj = get_handle_obj( current->process, req->handle, req->access, NULL )))
{
- set_reply_fd( current, obj->ops->get_read_fd( obj ) );
- release_object( obj );
- }
-}
-
-/* get a Unix fd to write to a file */
-DECL_HANDLER(get_write_fd)
-{
- struct object *obj;
-
- if ((obj = get_handle_obj( current->process, req->handle, GENERIC_WRITE, NULL )))
- {
- set_reply_fd( current, obj->ops->get_write_fd( obj ) );
+ set_reply_fd( current, obj->ops->get_fd( obj ) );
release_object( obj );
}
}