1 /*
2 * Copyright (c) 2005-2020 Rich Felker, et al.
3 *
4 * SPDX-License-Identifier: MIT
5 *
6 * Note: From the musl project, stripped down and repackaged with HOST_/host_ prepended
7 */
8
9 #include <sys/types.h>
10 #include "termios.h"
11 #include "host_syscall.h"
12
13 int
host_tcgetattr(int fd,struct host_termios * tio)14 host_tcgetattr(int fd, struct host_termios *tio)
15 {
16 if (host_ioctl(fd, HOST_TCGETS, (uintptr_t)tio))
17 return -1;
18 return 0;
19 }
20
21 int
host_tcsetattr(int fd,int act,const struct host_termios * tio)22 host_tcsetattr(int fd, int act, const struct host_termios *tio)
23 {
24 if (act < 0 || act > 2) {
25 // errno = EINVAL; /* XXX ?? */
26 return -1;
27 }
28 return host_ioctl(fd, HOST_TCSETS+act, (uintptr_t)tio);
29 }
30
31 void
host_cfmakeraw(struct host_termios * t)32 host_cfmakeraw(struct host_termios *t)
33 {
34 t->c_iflag &= ~(HOST_IGNBRK | HOST_BRKINT | HOST_PARMRK | HOST_ISTRIP |
35 HOST_INLCR | HOST_IGNCR | HOST_ICRNL | HOST_IXON);
36 t->c_oflag &= ~HOST_OPOST;
37 t->c_lflag &= ~(HOST_ECHO | HOST_ECHONL | HOST_ICANON | HOST_ISIG |
38 HOST_IEXTEN);
39 t->c_cflag &= ~(HOST_CSIZE | HOST_PARENB);
40 t->c_cflag |= HOST_CS8;
41 t->c_cc[HOST_VMIN] = 1;
42 t->c_cc[HOST_VTIME] = 0;
43 }
44
host_cfsetospeed(struct host_termios * tio,host_speed_t speed)45 int host_cfsetospeed(struct host_termios *tio, host_speed_t speed)
46 {
47 if (speed & ~HOST_CBAUD) {
48 // errno = EINVAL; /* XXX ? */
49 return -1;
50 }
51 tio->c_cflag &= ~HOST_CBAUD;
52 tio->c_cflag |= speed;
53 return 0;
54 }
55
host_cfsetispeed(struct host_termios * tio,host_speed_t speed)56 int host_cfsetispeed(struct host_termios *tio, host_speed_t speed)
57 {
58 return speed ? host_cfsetospeed(tio, speed) : 0;
59 }
60
61 int
host_cfsetspeed(struct host_termios * tio,host_speed_t speed)62 host_cfsetspeed(struct host_termios *tio, host_speed_t speed)
63 {
64 return host_cfsetospeed(tio, speed); /* weak alias in musl */
65 }
66
67