From 1d0276892f258028dba1756ab81566f99a58d79f Mon Sep 17 00:00:00 2001 From: swk Date: Wed, 18 Feb 2026 14:08:49 +0900 Subject: [PATCH] fixed MSYS2 compilation error and support for non-standard arbitrary baudrates --- src/setspeed.c | 25 +++++++++++++++++++++++++ src/tty.c | 4 ++-- 2 files changed, 27 insertions(+), 2 deletions(-) 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)