@@ -590,6 +590,15 @@ SP_API enum sp_return sp_open(struct sp_port *port, enum sp_mode flags)
590590 RETURN_CODEVAL (ret );
591591 }
592592
593+ /*
594+ * Assume a default baudrate if the OS does not provide one.
595+ * Cannot assign -1 here since Windows holds the baudrate in
596+ * the DCB and does not configure the rate individually.
597+ */
598+ if (config .baudrate == 0 ) {
599+ config .baudrate = 9600 ;
600+ }
601+
593602 /* Set sane port settings. */
594603#ifdef _WIN32
595604 data .dcb .fBinary = TRUE;
@@ -633,7 +642,8 @@ SP_API enum sp_return sp_open(struct sp_port *port, enum sp_mode flags)
633642 data .term .c_cc [VTIME ] = 0 ;
634643
635644 /* Ignore modem status lines; enable receiver; leave control lines alone on close. */
636- data .term .c_cflag |= (CLOCAL | CREAD | HUPCL );
645+ data .term .c_cflag |= (CLOCAL | CREAD );
646+ data .term .c_cflag &= ~(HUPCL );
637647#endif
638648
639649#ifdef _WIN32
@@ -876,7 +886,7 @@ SP_API enum sp_return sp_blocking_write(struct sp_port *port, const void *buf,
876886 unsigned char * ptr = (unsigned char * ) buf ;
877887 struct timeout timeout ;
878888 fd_set fds ;
879- int result ;
889+ ssize_t result ;
880890
881891 timeout_start (& timeout , timeout_ms );
882892
@@ -1081,7 +1091,7 @@ SP_API enum sp_return sp_blocking_read(struct sp_port *port, void *buf,
10811091 unsigned char * ptr = (unsigned char * ) buf ;
10821092 struct timeout timeout ;
10831093 fd_set fds ;
1084- int result ;
1094+ ssize_t result ;
10851095
10861096 timeout_start (& timeout , timeout_ms );
10871097
@@ -1204,7 +1214,7 @@ SP_API enum sp_return sp_blocking_read_next(struct sp_port *port, void *buf,
12041214 size_t bytes_read = 0 ;
12051215 struct timeout timeout ;
12061216 fd_set fds ;
1207- int result ;
1217+ ssize_t result ;
12081218
12091219 timeout_start (& timeout , timeout_ms );
12101220
0 commit comments