cosmopolitan/libc/calls/termios-internal.h

30 lines
1.2 KiB
C

#ifndef COSMOPOLITAN_LIBC_CALLS_TERMIOS_INTERNAL_H_
#define COSMOPOLITAN_LIBC_CALLS_TERMIOS_INTERNAL_H_
#include "libc/bits/safemacros.h"
#include "libc/str/str.h"
#if !(__ASSEMBLER__ + __LINKER__ + 0)
COSMOPOLITAN_C_START_
struct termios;
union metatermios;
#define COPY_TERMIOS(TO, FROM) \
do { \
memset((TO), 0, sizeof(*(TO))); \
(TO)->c_iflag = (FROM)->c_iflag; \
(TO)->c_oflag = (FROM)->c_oflag; \
(TO)->c_cflag = (FROM)->c_cflag; \
(TO)->c_lflag = (FROM)->c_lflag; \
memcpy((TO)->c_cc, (FROM)->c_cc, \
min(sizeof((TO)->c_cc), sizeof((FROM)->c_cc))); \
(TO)->c_ispeed = (FROM)->c_ispeed; \
(TO)->c_ospeed = (FROM)->c_ospeed; \
} while (0)
void *termios2host(union metatermios *, const struct termios *);
void termios2linux(struct termios *, const union metatermios *);
COSMOPOLITAN_C_END_
#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */
#endif /* COSMOPOLITAN_LIBC_CALLS_TERMIOS_INTERNAL_H_ */