diff --git a/src/setspeed.c b/src/setspeed.c index 8ed54c4..dc5bbf7 100644 --- a/src/setspeed.c +++ b/src/setspeed.c @@ -60,6 +60,31 @@ int setspeed(int fd, int baudrate) return ioctl(fd, IOSSIOSPEED, (char *)&baudrate); } +#elif defined (__CYGWIN__) +#include +#include +int setspeed(int fd, int baudrate) +{ + HANDLE hSerial = (HANDLE)_get_osfhandle(fd); + DCB dcbSerialParams = {0}; + dcbSerialParams.DCBlength = sizeof(dcbSerialParams); + + if (!GetCommState(hSerial, &dcbSerialParams)) + { + int err = GetLastError(); + errno = err == ERROR_INVALID_HANDLE ? ENODEV : EINVAL; + return -1; + } + dcbSerialParams.BaudRate = baudrate; + if (!SetCommState(hSerial, &dcbSerialParams)) + { + int err = GetLastError(); + errno = err == ERROR_INVALID_HANDLE ? ENODEV : EINVAL; + return -1; + } + return 0; +} + #else int setspeed(int fd, int baudrate) { diff --git a/src/tty.c b/src/tty.c index efda859..a53bf1b 100644 --- a/src/tty.c +++ b/src/tty.c @@ -1266,7 +1266,7 @@ void tty_configure(void) BAUDRATE_CASES default: -#if defined (HAVE_TERMIOS2) || defined (HAVE_IOSSIOSPEED) +#if defined (HAVE_TERMIOS2) || defined (HAVE_IOSSIOSPEED) || defined (__CYGWIN__) standard_baudrate = false; break; #else @@ -2361,7 +2361,7 @@ void tty_wait_for_device(void) // Happens when port unpluged if (errno == EACCES) { - goto error; + break; } #elif defined(__APPLE__) if (errno == EBADF)