Alexandre Julliard : ntdll: Use the more portable cfsetospeed() function to set serial baud rate.
Alexandre Julliard
julliard at winehq.org
Fri Oct 8 12:38:07 CDT 2010
Module: wine
Branch: master
Commit: 4d7ad03c3c3eba7788bae287819eb3c2ba9d080a
URL: http://source.winehq.org/git/wine.git/?a=commit;h=4d7ad03c3c3eba7788bae287819eb3c2ba9d080a
Author: Alexandre Julliard <julliard at winehq.org>
Date: Fri Oct 8 11:21:22 2010 +0200
ntdll: Use the more portable cfsetospeed() function to set serial baud rate.
---
dlls/ntdll/serial.c | 105 ++++++++++++---------------------------------------
1 files changed, 24 insertions(+), 81 deletions(-)
diff --git a/dlls/ntdll/serial.c b/dlls/ntdll/serial.c
index b52ff22..1ca2cfa 100644
--- a/dlls/ntdll/serial.c
+++ b/dlls/ntdll/serial.c
@@ -143,12 +143,7 @@ static NTSTATUS get_baud_rate(int fd, SERIAL_BAUD_RATE* sbr)
ERR("tcgetattr error '%s'\n", strerror(errno));
return FILE_GetNtStatus();
}
-#ifndef __EMX__
-#ifdef CBAUD
- speed = port.c_cflag & CBAUD;
-#else
speed = cfgetospeed(&port);
-#endif
switch (speed)
{
case B0: sbr->BaudRate = 0; break;
@@ -183,9 +178,6 @@ static NTSTATUS get_baud_rate(int fd, SERIAL_BAUD_RATE* sbr)
ERR("unknown speed %x\n", speed);
return STATUS_INVALID_PARAMETER;
}
-#else
- return STATUS_INVALID_PARAMETER;
-#endif
return STATUS_SUCCESS;
}
@@ -429,46 +421,44 @@ static NTSTATUS set_baud_rate(int fd, const SERIAL_BAUD_RATE* sbr)
return FILE_GetNtStatus();
}
-#ifdef CBAUD
- port.c_cflag &= ~CBAUD;
switch (sbr->BaudRate)
{
- case 0: port.c_cflag |= B0; break;
- case 50: port.c_cflag |= B50; break;
- case 75: port.c_cflag |= B75; break;
- case 110:
- case CBR_110: port.c_cflag |= B110; break;
- case 134: port.c_cflag |= B134; break;
- case 150: port.c_cflag |= B150; break;
- case 200: port.c_cflag |= B200; break;
- case 300:
- case CBR_300: port.c_cflag |= B300; break;
+ case 0: cfsetospeed( &port, B0 ); break;
+ case 50: cfsetospeed( &port, B50 ); break;
+ case 75: cfsetospeed( &port, B75 ); break;
+ case 110:
+ case CBR_110: cfsetospeed( &port, B110 ); break;
+ case 134: cfsetospeed( &port, B134 ); break;
+ case 150: cfsetospeed( &port, B150 ); break;
+ case 200: cfsetospeed( &port, B200 ); break;
+ case 300:
+ case CBR_300: cfsetospeed( &port, B300 ); break;
case 600:
- case CBR_600: port.c_cflag |= B600; break;
+ case CBR_600: cfsetospeed( &port, B600 ); break;
case 1200:
- case CBR_1200: port.c_cflag |= B1200; break;
- case 1800: port.c_cflag |= B1800; break;
+ case CBR_1200: cfsetospeed( &port, B1200 ); break;
+ case 1800: cfsetospeed( &port, B1800 ); break;
case 2400:
- case CBR_2400: port.c_cflag |= B2400; break;
+ case CBR_2400: cfsetospeed( &port, B2400 ); break;
case 4800:
- case CBR_4800: port.c_cflag |= B4800; break;
+ case CBR_4800: cfsetospeed( &port, B4800 ); break;
case 9600:
- case CBR_9600: port.c_cflag |= B9600; break;
+ case CBR_9600: cfsetospeed( &port, B9600 ); break;
case 19200:
- case CBR_19200: port.c_cflag |= B19200; break;
+ case CBR_19200: cfsetospeed( &port, B19200 ); break;
case 38400:
- case CBR_38400: port.c_cflag |= B38400; break;
+ case CBR_38400: cfsetospeed( &port, B38400 ); break;
#ifdef B57600
- case 57600: port.c_cflag |= B57600; break;
+ case 57600: cfsetospeed( &port, B57600 ); break;
#endif
#ifdef B115200
- case 115200: port.c_cflag |= B115200;break;
+ case 115200: cfsetospeed( &port, B115200 ); break;
#endif
#ifdef B230400
- case 230400: port.c_cflag |= B230400;break;
+ case 230400: cfsetospeed( &port, B230400 ); break;
#endif
#ifdef B460800
- case 460800: port.c_cflag |= B460800;break;
+ case 460800: cfsetospeed( &port, B460800 ); break;
#endif
default:
#if defined (HAVE_LINUX_SERIAL_H) && defined (TIOCSSERIAL)
@@ -490,7 +480,7 @@ static NTSTATUS set_baud_rate(int fd, const SERIAL_BAUD_RATE* sbr)
"(see man setserial). If you have incapacitated a Hayes type modem,\n"
"reset it and it will probably recover.\n", sbr->BaudRate, arby);
ioctl(fd, TIOCSSERIAL, &nuts);
- port.c_cflag |= B38400;
+ cfsetospeed( &port, B38400 );
}
break;
#else /* Don't have linux/serial.h or lack TIOCSSERIAL */
@@ -498,54 +488,7 @@ static NTSTATUS set_baud_rate(int fd, const SERIAL_BAUD_RATE* sbr)
return STATUS_NOT_SUPPORTED;
#endif /* Don't have linux/serial.h or lack TIOCSSERIAL */
}
-#elif !defined(__EMX__)
- switch (sbr->BaudRate)
- {
- case 0: port.c_ospeed = B0; break;
- case 50: port.c_ospeed = B50; break;
- case 75: port.c_ospeed = B75; break;
- case 110:
- case CBR_110: port.c_ospeed = B110; break;
- case 134: port.c_ospeed = B134; break;
- case 150: port.c_ospeed = B150; break;
- case 200: port.c_ospeed = B200; break;
- case 300:
- case CBR_300: port.c_ospeed = B300; break;
- case 600:
- case CBR_600: port.c_ospeed = B600; break;
- case 1200:
- case CBR_1200: port.c_ospeed = B1200; break;
- case 1800: port.c_ospeed = B1800; break;
- case 2400:
- case CBR_2400: port.c_ospeed = B2400; break;
- case 4800:
- case CBR_4800: port.c_ospeed = B4800; break;
- case 9600:
- case CBR_9600: port.c_ospeed = B9600; break;
- case 19200:
- case CBR_19200: port.c_ospeed = B19200; break;
- case 38400:
- case CBR_38400: port.c_ospeed = B38400; break;
-#ifdef B57600
- case 57600:
- case CBR_57600: port.c_ospeed = B57600; break;
-#endif
-#ifdef B115200
- case 115200:
- case CBR_115200: port.c_ospeed = B115200;break;
-#endif
-#ifdef B230400
- case 230400: port.c_ospeed = B230400;break;
-#endif
-#ifdef B460800
- case 460800: port.c_ospeed = B460800;break;
-#endif
- default:
- ERR("baudrate %d\n", sbr->BaudRate);
- return STATUS_NOT_SUPPORTED;
- }
- port.c_ispeed = port.c_ospeed;
-#endif
+ cfsetispeed( &port, cfgetospeed(&port) );
if (tcsetattr(fd, TCSANOW, &port) == -1)
{
ERR("tcsetattr error '%s'\n", strerror(errno));
More information about the wine-cvs
mailing list