Alexandre Julliard : server: Store the SERIAL_TIMEOUTS structure directly in the object.
Alexandre Julliard
julliard at winehq.org
Fri May 5 15:05:58 CDT 2017
Module: wine
Branch: master
Commit: c43f13c3e4ddb538f9be27aca867de2b143283b5
URL: http://source.winehq.org/git/wine.git/?a=commit;h=c43f13c3e4ddb538f9be27aca867de2b143283b5
Author: Alexandre Julliard <julliard at winehq.org>
Date: Fri May 5 14:10:44 2017 +0200
server: Store the SERIAL_TIMEOUTS structure directly in the object.
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
server/serial.c | 55 ++++++++++++++++---------------------------------------
1 file changed, 16 insertions(+), 39 deletions(-)
diff --git a/server/serial.c b/server/serial.c
index 8519473..fb29288 100644
--- a/server/serial.c
+++ b/server/serial.c
@@ -73,14 +73,7 @@ struct serial
struct fd *fd;
struct timeout_user *read_timer;
-
- /* timeout values */
- unsigned int readinterval;
- unsigned int readconst;
- unsigned int readmult;
- unsigned int writeconst;
- unsigned int writemult;
-
+ SERIAL_TIMEOUTS timeouts;
unsigned int eventmask;
unsigned int generation; /* event mask change counter */
unsigned int pending_write : 1;
@@ -142,15 +135,11 @@ struct object *create_serial( struct fd *fd )
if (!(serial = alloc_object( &serial_ops ))) return NULL;
serial->read_timer = NULL;
- serial->readinterval = 0;
- serial->readmult = 0;
- serial->readconst = 0;
- serial->writemult = 0;
- serial->writeconst = 0;
serial->eventmask = 0;
serial->generation = 0;
serial->pending_write = 0;
serial->pending_wait = 0;
+ memset( &serial->timeouts, 0, sizeof(serial->timeouts) );
serial->fd = (struct fd *)grab_object( fd );
set_fd_user( fd, &serial_fd_ops, &serial->obj );
return &serial->obj;
@@ -193,31 +182,17 @@ static obj_handle_t serial_ioctl( struct fd *fd, ioctl_code_t code, struct async
switch (code)
{
case IOCTL_SERIAL_GET_TIMEOUTS:
- if (get_reply_max_size() >= sizeof(SERIAL_TIMEOUTS))
- {
- SERIAL_TIMEOUTS *timeouts = set_reply_data_size( sizeof(*timeouts ));
-
- timeouts->ReadIntervalTimeout = serial->readinterval;
- timeouts->ReadTotalTimeoutConstant = serial->readconst;
- timeouts->ReadTotalTimeoutMultiplier = serial->readmult;
- timeouts->WriteTotalTimeoutConstant = serial->writeconst;
- timeouts->WriteTotalTimeoutMultiplier = serial->writemult;
- }
- else set_error( STATUS_BUFFER_TOO_SMALL );
+ if (get_reply_max_size() >= sizeof(serial->timeouts))
+ set_reply_data( &serial->timeouts, sizeof(serial->timeouts ));
+ else
+ set_error( STATUS_BUFFER_TOO_SMALL );
return 0;
case IOCTL_SERIAL_SET_TIMEOUTS:
- if (get_req_data_size() >= sizeof(SERIAL_TIMEOUTS))
- {
- const SERIAL_TIMEOUTS *timeouts = get_req_data();
-
- serial->readinterval = timeouts->ReadIntervalTimeout;
- serial->readconst = timeouts->ReadTotalTimeoutConstant;
- serial->readmult = timeouts->ReadTotalTimeoutMultiplier;
- serial->writeconst = timeouts->WriteTotalTimeoutConstant;
- serial->writemult = timeouts->WriteTotalTimeoutMultiplier;
- }
- else set_error( STATUS_BUFFER_TOO_SMALL );
+ if (get_req_data_size() >= sizeof(serial->timeouts))
+ memcpy( &serial->timeouts, get_req_data(), sizeof(serial->timeouts) );
+ else
+ set_error( STATUS_BUFFER_TOO_SMALL );
return 0;
case IOCTL_SERIAL_GET_WAIT_MASK:
@@ -253,10 +228,12 @@ static void serial_queue_async( struct fd *fd, struct async *async, int type, in
switch (type)
{
case ASYNC_TYPE_READ:
- timeout = serial->readconst + (timeout_t)serial->readmult*count;
+ timeout = serial->timeouts.ReadTotalTimeoutConstant +
+ (timeout_t)serial->timeouts.ReadTotalTimeoutMultiplier * count;
break;
case ASYNC_TYPE_WRITE:
- timeout = serial->writeconst + (timeout_t)serial->writemult*count;
+ timeout = serial->timeouts.WriteTotalTimeoutConstant +
+ (timeout_t)serial->timeouts.WriteTotalTimeoutMultiplier * count;
break;
}
@@ -287,9 +264,9 @@ static void serial_reselect_async( struct fd *fd, struct async_queue *queue )
serial->read_timer = NULL;
}
}
- else if (serial->readinterval && (default_fd_get_poll_events( fd ) & POLLIN))
+ else if (serial->timeouts.ReadIntervalTimeout && (default_fd_get_poll_events( fd ) & POLLIN))
{
- serial->read_timer = add_timeout_user( (timeout_t)serial->readinterval * -10000,
+ serial->read_timer = add_timeout_user( (timeout_t)serial->timeouts.ReadIntervalTimeout * -10000,
serial_read_timeout, serial );
}
default_fd_reselect_async( fd, queue );
More information about the wine-cvs
mailing list