New tests.
[mono.git] / support / serial.c
index c0708a11929529d77ef8ae79abbbce521a10e8b7..7968fbb30d059ea5eb844be5a9ade5d775df3d7c 100644 (file)
@@ -66,16 +66,14 @@ open_serial (char* devfile)
        int fd;
        fd = open (devfile, O_RDWR | O_NOCTTY | O_NONBLOCK);
 
-       if (fd == -1)
-               return -1;
-
        return fd;
 }
 
-void
+int
 close_serial (int unix_fd)
 {
-       close (unix_fd);
+       // Linus writes: do not retry close after EINTR
+       return close (unix_fd);
 }
 
 guint32
@@ -127,10 +125,10 @@ write_serial (int fd, guchar *buffer, int offset, int count, int timeout)
        return 0;
 }
 
-void
+int
 discard_buffer (int fd, gboolean input)
 {
-       tcflush(fd, input ? TCIFLUSH : TCOFLUSH);
+       return tcflush(fd, input ? TCIFLUSH : TCOFLUSH);
 }
 
 gint32
@@ -150,7 +148,9 @@ set_attributes (int fd, int baud_rate, MonoParity parity, int dataBits, MonoStop
 {
        struct termios newtio;
 
-       tcgetattr (fd, &newtio);
+       if (tcgetattr (fd, &newtio) == -1)
+               return FALSE;
+
        newtio.c_cflag |=  (CLOCAL | CREAD);
        newtio.c_lflag &= ~(ICANON | ECHO | ECHOE | ECHOK | ECHONL | ISIG | IEXTEN );
        newtio.c_oflag &= ~(OPOST);
@@ -159,6 +159,17 @@ set_attributes (int fd, int baud_rate, MonoParity parity, int dataBits, MonoStop
        /* setup baudrate */
        switch (baud_rate)
        {
+/*Some values are not defined on OSX and *BSD */
+#if defined(B921600)
+       case 921600:
+           baud_rate = B921600;
+           break;
+#endif
+#if defined(B460800)
+       case 460800:
+           baud_rate = B460800;
+           break;
+#endif
        case 230400: 
            baud_rate = B230400;
            break;
@@ -397,10 +408,10 @@ set_signal (int fd, MonoSerialSignal signal, gboolean value)
        return 1;
 }
 
-void
+int
 breakprop (int fd)
 {
-       tcsendbreak (fd, 0);
+       return tcsendbreak (fd, 0);
 }
 
 gboolean