+#ifdef __linux__
+static enum sp_return get_baudrate(int fd, int *baudrate)
+{
+ void *data;
+
+ TRACE("%d, %p", fd, baudrate);
+
+ DEBUG("Getting baud rate");
+
+ if (!(data = malloc(get_termios_size())))
+ RETURN_ERROR(SP_ERR_MEM, "termios malloc failed");
+
+ if (ioctl(fd, get_termios_get_ioctl(), data) < 0) {
+ free(data);
+ RETURN_FAIL("getting termios failed");
+ }
+
+ *baudrate = get_termios_speed(data);
+
+ free(data);
+
+ RETURN_OK();
+}
+
+static enum sp_return set_baudrate(int fd, int baudrate)
+{
+ void *data;
+
+ TRACE("%d, %d", fd, baudrate);
+
+ DEBUG("Getting baud rate");
+
+ if (!(data = malloc(get_termios_size())))
+ RETURN_ERROR(SP_ERR_MEM, "termios malloc failed");
+
+ if (ioctl(fd, get_termios_get_ioctl(), data) < 0) {
+ free(data);
+ RETURN_FAIL("getting termios failed");
+ }
+
+ DEBUG("Setting baud rate");
+
+ set_termios_speed(data, baudrate);
+
+ if (ioctl(fd, get_termios_set_ioctl(), data) < 0) {
+ free(data);
+ RETURN_FAIL("setting termios failed");
+ }
+
+ free(data);
+
+ RETURN_OK();
+}
+
+#ifdef USE_TERMIOX
+static enum sp_return get_flow(int fd, int *flow)
+{
+ void *data;
+
+ TRACE("%d, %p", fd, flow);
+
+ DEBUG("Getting advanced flow control");
+
+ if (!(data = malloc(get_termiox_size())))
+ RETURN_ERROR(SP_ERR_MEM, "termiox malloc failed");
+
+ if (ioctl(fd, TCGETX, data) < 0) {
+ free(data);
+ RETURN_FAIL("getting termiox failed");
+ }
+
+ *flow = get_termiox_flow(data);
+
+ free(data);
+
+ RETURN_OK();
+}
+
+static enum sp_return set_flow(int fd, int flow)
+{
+ void *data;
+
+ TRACE("%d, %d", fd, flow);
+
+ DEBUG("Getting advanced flow control");
+
+ if (!(data = malloc(get_termiox_size())))
+ RETURN_ERROR(SP_ERR_MEM, "termiox malloc failed");
+
+ if (ioctl(fd, TCGETX, data) < 0) {
+ free(data);
+ RETURN_FAIL("getting termiox failed");
+ }
+
+ DEBUG("Setting advanced flow control");
+
+ set_termiox_flow(data, flow);
+
+ if (ioctl(fd, TCSETX, data) < 0) {
+ free(data);
+ RETURN_FAIL("setting termiox failed");
+ }
+
+ free(data);
+
+ RETURN_OK();
+}
+#endif /* USE_TERMIOX */
+#endif /* __linux__ */
+