Test POSIX 1003.1 2016 chapter 13 "Headers".
And fix one thing that this found: apparently <stdlib.h> should also
make the various *WAIT* macros available.
Bug: N/A
Test: builds
Change-Id: Id879bf3c1bddd1170261a809e7280150a74d6b3d
diff --git a/tests/headers/posix/termios_h.c b/tests/headers/posix/termios_h.c
new file mode 100644
index 0000000..1255c16
--- /dev/null
+++ b/tests/headers/posix/termios_h.c
@@ -0,0 +1,167 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <termios.h>
+
+#include "header_checks.h"
+
+static void termios_h() {
+ TYPE(cc_t);
+ TYPE(speed_t);
+ TYPE(tcflag_t);
+
+ TYPE(struct termios);
+ STRUCT_MEMBER(struct termios, tcflag_t, c_iflag);
+ STRUCT_MEMBER(struct termios, tcflag_t, c_oflag);
+ STRUCT_MEMBER(struct termios, tcflag_t, c_cflag);
+ STRUCT_MEMBER(struct termios, tcflag_t, c_lflag);
+ STRUCT_MEMBER_ARRAY(struct termios, cc_t/*[]*/, c_cc);
+
+ MACRO(NCCS);
+
+ MACRO(VEOF);
+ MACRO(VEOL);
+ MACRO(VERASE);
+ MACRO(VINTR);
+ MACRO(VKILL);
+ MACRO(VMIN);
+ MACRO(VQUIT);
+ MACRO(VSTART);
+ MACRO(VSTOP);
+ MACRO(VSUSP);
+ MACRO(VTIME);
+
+ MACRO(BRKINT);
+ MACRO(ICRNL);
+ MACRO(IGNBRK);
+ MACRO(IGNCR);
+ MACRO(IGNPAR);
+ MACRO(INLCR);
+ MACRO(INPCK);
+ MACRO(ISTRIP);
+ MACRO(IXANY);
+ MACRO(IXOFF);
+ MACRO(IXON);
+ MACRO(PARMRK);
+
+ MACRO(OPOST);
+ MACRO(ONLCR);
+ MACRO(OCRNL);
+ MACRO(ONOCR);
+ MACRO(ONLRET);
+ MACRO(OFDEL);
+ MACRO(OFILL);
+ MACRO(NLDLY);
+ MACRO(NL0);
+ MACRO(NL1);
+ MACRO(CRDLY);
+ MACRO(CR0);
+ MACRO(CR1);
+ MACRO(CR2);
+ MACRO(CR3);
+ MACRO(TABDLY);
+ MACRO(TAB0);
+ MACRO(TAB1);
+ MACRO(TAB2);
+ MACRO(TAB3);
+ MACRO(BSDLY);
+ MACRO(BS0);
+ MACRO(BS1);
+ MACRO(VTDLY);
+ MACRO(VT0);
+ MACRO(VT1);
+ MACRO(FFDLY);
+ MACRO(FF0);
+ MACRO(FF1);
+
+ MACRO(B0);
+ MACRO(B50);
+ MACRO(B75);
+ MACRO(B110);
+ MACRO(B134);
+ MACRO(B150);
+ MACRO(B200);
+ MACRO(B300);
+ MACRO(B600);
+ MACRO(B1200);
+ MACRO(B1800);
+ MACRO(B2400);
+ MACRO(B4800);
+ MACRO(B9600);
+ MACRO(B19200);
+ MACRO(B38400);
+
+ MACRO(CSIZE);
+ MACRO(CS5);
+ MACRO(CS6);
+ MACRO(CS7);
+ MACRO(CS8);
+ MACRO(CSTOPB);
+ MACRO(CREAD);
+ MACRO(PARENB);
+ MACRO(PARODD);
+ MACRO(HUPCL);
+ MACRO(CLOCAL);
+
+ MACRO(ECHO);
+ MACRO(ECHOE);
+ MACRO(ECHOK);
+ MACRO(ECHONL);
+ MACRO(ICANON);
+ MACRO(IEXTEN);
+ MACRO(ISIG);
+ MACRO(NOFLSH);
+ MACRO(TOSTOP);
+
+ MACRO(TCSANOW);
+ MACRO(TCSADRAIN);
+ MACRO(TCSAFLUSH);
+
+ MACRO(TCIFLUSH);
+ MACRO(TCIOFLUSH);
+ MACRO(TCOFLUSH);
+
+ MACRO(TCIOFF);
+ MACRO(TCION);
+ MACRO(TCOOFF);
+ MACRO(TCOON);
+
+ TYPE(pid_t);
+
+ FUNCTION(cfgetispeed, speed_t (*f)(const struct termios*));
+ FUNCTION(cfgetospeed, speed_t (*f)(const struct termios*));
+ FUNCTION(cfsetispeed, int (*f)(struct termios*, speed_t));
+ FUNCTION(cfsetospeed, int (*f)(struct termios*, speed_t));
+ FUNCTION(tcdrain, int (*f)(int));
+ FUNCTION(tcflow, int (*f)(int, int));
+ FUNCTION(tcflush, int (*f)(int, int));
+ FUNCTION(tcgetattr, int (*f)(int, struct termios*));
+ FUNCTION(tcgetsid, pid_t (*f)(int));
+ FUNCTION(tcsendbreak, int (*f)(int, int));
+ FUNCTION(tcsetattr, int (*f)(int, int, const struct termios*));
+}