Implemented FlushFileBuffers for serial devices.
diff --git a/server/serial.c b/server/serial.c
index 486b5ab..f267234 100644
--- a/server/serial.c
+++ b/server/serial.c
@@ -55,6 +55,7 @@
static void serial_queue_async(struct object *obj, void *ptr, unsigned int status, int type, int count);
static void destroy_serial(struct object *obj);
static void serial_poll_event( struct object *obj, int event );
+static int serial_flush( struct object *obj );
struct serial
{
@@ -92,7 +93,7 @@
serial_get_poll_events, /* get_poll_events */
serial_poll_event, /* poll_event */
serial_get_fd, /* get_fd */
- no_flush, /* flush */
+ serial_flush, /* flush */
serial_get_info, /* get_file_info */
serial_queue_async, /* queue_async */
destroy_serial /* destroy */
@@ -316,6 +317,21 @@
set_select_events ( obj, serial_get_poll_events ( obj ));
}
+static int serial_flush( struct object *obj )
+{
+ int ret;
+ struct serial *serial = (struct serial *)grab_object(obj);
+ assert( obj->ops == &serial_ops );
+
+ /* MSDN says: If hFile is a handle to a communications device,
+ * the function only flushes the transmit buffer.
+ */
+ ret = (tcflush( serial->obj.fd, TCOFLUSH ) != -1);
+ if (!ret) file_set_error();
+ release_object( serial );
+ return ret;
+}
+
/* create a serial */
DECL_HANDLER(create_serial)
{
@@ -391,4 +407,3 @@
release_object( serial );
}
}
-