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*));
+}