Make inline tcsetattr definition match constants.
Before this change we have the old NDK inline termios functions with the
modern constants. Unfortunately the old NDK inline functions relied on
hacking the constants. Fix things by sharing the implementation between
the platform and the NDK headers.
Bug: https://github.com/android-ndk/ndk/issues/441
Test: ran tests
Change-Id: I2773634059530bc954167f29c4783413a2294d5a
diff --git a/libc/include/android/legacy_termios_inlines.h b/libc/include/android/legacy_termios_inlines.h
index 02e9429..4ed56f0 100644
--- a/libc/include/android/legacy_termios_inlines.h
+++ b/libc/include/android/legacy_termios_inlines.h
@@ -36,74 +36,8 @@
#include <linux/termios.h>
#if __ANDROID_API__ < __ANDROID_API_L__
-
-__BEGIN_DECLS
-
-static __inline int tcgetattr(int fd, struct termios *s) {
- return ioctl(fd, TCGETS, s);
-}
-
-static __inline int tcsetattr(int fd, int __opt, const struct termios *s) {
- return ioctl(fd, __opt, (void *)s);
-}
-
-static __inline int tcflow(int fd, int action) {
- return ioctl(fd, TCXONC, (void *)(intptr_t)action);
-}
-
-static __inline int tcflush(int fd, int __queue) {
- return ioctl(fd, TCFLSH, (void *)(intptr_t)__queue);
-}
-
-static __inline pid_t tcgetsid(int fd) {
- pid_t _pid;
- return ioctl(fd, TIOCGSID, &_pid) ? (pid_t)-1 : _pid;
-}
-
-static __inline int tcsendbreak(int fd, int __duration) {
- return ioctl(fd, TCSBRKP, (void *)(uintptr_t)__duration);
-}
-
-static __inline speed_t cfgetospeed(const struct termios *s) {
- return (speed_t)(s->c_cflag & CBAUD);
-}
-
-static __inline int cfsetospeed(struct termios *s, speed_t speed) {
- s->c_cflag = (s->c_cflag & ~CBAUD) | (speed & CBAUD);
- return 0;
-}
-
-static __inline speed_t cfgetispeed(const struct termios *s) {
- return (speed_t)(s->c_cflag & CBAUD);
-}
-
-static __inline int cfsetispeed(struct termios *s, speed_t speed) {
- s->c_cflag = (s->c_cflag & ~CBAUD) | (speed & CBAUD);
- return 0;
-}
-
-static __inline void cfmakeraw(struct termios *s) {
- s->c_iflag &=
- ~(IGNBRK | BRKINT | PARMRK | ISTRIP | INLCR | IGNCR | ICRNL | IXON);
- s->c_oflag &= ~OPOST;
- s->c_lflag &= ~(ECHO | ECHONL | ICANON | ISIG | IEXTEN);
- s->c_cflag &= ~(CSIZE | PARENB);
- s->c_cflag |= CS8;
-}
-
-static __inline int cfsetspeed(struct termios* s, speed_t speed) {
- // TODO: check 'speed' is valid.
- s->c_cflag = (s->c_cflag & ~CBAUD) | (speed & CBAUD);
- return 0;
-}
-
-static __inline int tcdrain(int fd) {
- // A non-zero argument to TCSBRK means "don't send a break".
- // The drain is a side-effect of the ioctl!
- return ioctl(fd, TCSBRK, __BIONIC_CAST(static_cast, unsigned long, 1));
-}
-
-__END_DECLS
-
+#define __BIONIC_TERMIOS_INLINE static __inline
+#include <bits/termios_inlines.h>
#endif
+
#endif /* _ANDROID_LEGACY_TERMIOS_INLINES_H_ */