2020-06-15 14:18:57 +00:00
|
|
|
#ifndef COSMOPOLITAN_LIBC_CALLS_TERMIOS_INTERNAL_H_
|
|
|
|
#define COSMOPOLITAN_LIBC_CALLS_TERMIOS_INTERNAL_H_
|
2020-11-25 16:19:00 +00:00
|
|
|
#include "libc/calls/struct/metatermios.internal.h"
|
2020-11-18 16:26:03 +00:00
|
|
|
#include "libc/calls/struct/termios.h"
|
2020-06-15 14:18:57 +00:00
|
|
|
|
2021-09-04 05:19:41 +00:00
|
|
|
#define COPY_TERMIOS(TO, FROM) \
|
|
|
|
do { \
|
|
|
|
uint32_t Cc3; \
|
|
|
|
uint64_t Cc1, Cc2; \
|
|
|
|
autotype((TO)->c_iflag) c_iflag = (FROM)->c_iflag; \
|
|
|
|
autotype((TO)->c_oflag) c_oflag = (FROM)->c_oflag; \
|
|
|
|
autotype((TO)->c_cflag) c_cflag = (FROM)->c_cflag; \
|
|
|
|
autotype((TO)->c_lflag) c_lflag = (FROM)->c_lflag; \
|
|
|
|
__builtin_memcpy(&Cc1, (FROM)->c_cc + 000, 8); \
|
|
|
|
__builtin_memcpy(&Cc2, (FROM)->c_cc + 010, 8); \
|
|
|
|
__builtin_memcpy(&Cc3, (FROM)->c_cc + 020, 4); \
|
|
|
|
autotype((TO)->c_ispeed) c_ispeed = (FROM)->c_ispeed; \
|
|
|
|
autotype((TO)->c_ospeed) c_ospeed = (FROM)->c_ospeed; \
|
|
|
|
(TO)->c_iflag = c_iflag; \
|
|
|
|
(TO)->c_oflag = c_oflag; \
|
|
|
|
(TO)->c_cflag = c_cflag; \
|
|
|
|
(TO)->c_lflag = c_lflag; \
|
|
|
|
__builtin_memcpy((TO)->c_cc + 000, &Cc1, 8); \
|
|
|
|
__builtin_memcpy((TO)->c_cc + 010, &Cc2, 8); \
|
|
|
|
__builtin_memcpy((TO)->c_cc + 020, &Cc3, 4); \
|
|
|
|
(TO)->c_ispeed = c_ispeed; \
|
|
|
|
(TO)->c_ospeed = c_ospeed; \
|
2020-06-15 14:18:57 +00:00
|
|
|
} while (0)
|
|
|
|
|
2022-09-19 22:01:48 +00:00
|
|
|
void *__termios2host(union metatermios *, const struct termios *);
|
|
|
|
|
2020-06-15 14:18:57 +00:00
|
|
|
#endif /* COSMOPOLITAN_LIBC_CALLS_TERMIOS_INTERNAL_H_ */
|