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
13int
14host_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
21int
22host_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
31void
32host_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
45int 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
56int host_cfsetispeed(struct host_termios *tio, host_speed_t speed)
57{
58	return speed ? host_cfsetospeed(tio, speed) : 0;
59}
60
61int
62host_cfsetspeed(struct host_termios *tio, host_speed_t speed)
63{
64	return host_cfsetospeed(tio, speed);	/* weak alias in musl */
65}
66
67