11aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania/*
21aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania * Copyright (C) 2009 The Android Open Source Project
31aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania * All rights reserved.
41aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania *
51aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania * Redistribution and use in source and binary forms, with or without
61aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania * modification, are permitted provided that the following conditions
71aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania * are met:
81aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania *  * Redistributions of source code must retain the above copyright
91aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania *    notice, this list of conditions and the following disclaimer.
101aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania *  * Redistributions in binary form must reproduce the above copyright
111aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania *    notice, this list of conditions and the following disclaimer in
121aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania *    the documentation and/or other materials provided with the
131aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania *    distribution.
141aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania *
151aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
161aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
171aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
181aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
191aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
201aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
211aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
221aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
231aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
241aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
251aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
261aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania * SUCH DAMAGE.
271aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania */
281aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania
291aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania#include <cstdio>
30b381ead492251a797d2df4b260cb01eb1f64cfadDavid 'Digit' Turner#if defined BIONIC && !defined BIONIC_LIBSTDCPP_INCLUDE_CSTDIO__
311aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania#error "Wrong header file included!!"
321aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania#endif
331aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania
341aa5708e437b96e04f31d9c9f167427411ba5510Niko Catanianamespace {
351aa5708e437b96e04f31d9c9f167427411ba5510Niko Cataniaconst int kPassed = 0;
361aa5708e437b96e04f31d9c9f167427411ba5510Niko Cataniaconst int kFailed = 1;
371aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania#define FAIL_UNLESS(f) if (!android::f()) return kFailed;
381aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania}  // anonymous namespace
391aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania
401aa5708e437b96e04f31d9c9f167427411ba5510Niko Catanianamespace android
411aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania{
421aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania#ifndef BUFSIZ
431aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania#error "BUFSIZ must be a macro"
441aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania#endif
451aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania
461aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania#ifndef EOF
471aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania#error "EOF must be a macro"
481aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania#endif
491aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania
501aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania#ifndef FILENAME_MAX
511aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania#error "FILENAME_MAX must be a macro"
521aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania#endif
531aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania
541aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania#ifndef FOPEN_MAX
551aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania#error "FOPEN_MAX must be a macro"
561aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania#endif
571aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania
581aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania#ifndef L_tmpnam
591aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania#error "L_tmpnam must be a macro"
601aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania#endif
611aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania
621aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania#ifndef NULL
631aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania#error "NULL must be a macro"
641aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania#endif
651aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania
661aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania#ifndef SEEK_CUR
671aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania#error "SEEK_CUR must be a macro"
681aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania#endif
691aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania
701aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania#ifndef SEEK_END
711aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania#error "SEEK_END must be a macro"
721aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania#endif
731aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania#ifndef SEEK_SET
741aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania#error "SEEK_SET must be a macro"
751aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania#endif
761aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania
771aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania#ifndef TMP_MAX
781aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania#error "TMP_MAX must be a macro"
791aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania#endif
801aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania
811aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania#ifndef _IOFBF
821aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania#error "_IOFBF must be a macro"
831aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania#endif
841aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania
851aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania#ifndef _IOLBF
861aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania#error "_IOLBF must be a macro"
871aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania#endif
881aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania
891aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania#ifndef _IONBF
901aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania#error "_IONBF must be a macro"
911aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania#endif
921aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania
931aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania#ifndef stderr
941aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania#error "stderr must be a macro"
951aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania#endif
961aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania
971aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania#ifndef stdin
981aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania#error "stdin must be a macro"
991aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania#endif
1001aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania
1011aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania#ifndef stdout
1021aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania#error "stdout must be a macro"
1031aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania#endif
1041aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania
1051aa5708e437b96e04f31d9c9f167427411ba5510Niko Cataniausing std::clearerr;
1061aa5708e437b96e04f31d9c9f167427411ba5510Niko Cataniausing std::fclose;
1071aa5708e437b96e04f31d9c9f167427411ba5510Niko Cataniausing std::feof;
1081aa5708e437b96e04f31d9c9f167427411ba5510Niko Cataniausing std::ferror;
1091aa5708e437b96e04f31d9c9f167427411ba5510Niko Cataniausing std::fflush;
1101aa5708e437b96e04f31d9c9f167427411ba5510Niko Cataniausing std::fgetc;
1111aa5708e437b96e04f31d9c9f167427411ba5510Niko Cataniausing std::fgetpos;
1121aa5708e437b96e04f31d9c9f167427411ba5510Niko Cataniausing std::fgets;
1131aa5708e437b96e04f31d9c9f167427411ba5510Niko Cataniausing std::fopen;
1141aa5708e437b96e04f31d9c9f167427411ba5510Niko Cataniausing std::fprintf;
1151aa5708e437b96e04f31d9c9f167427411ba5510Niko Cataniausing std::fputc;
1161aa5708e437b96e04f31d9c9f167427411ba5510Niko Cataniausing std::fputs;
1171aa5708e437b96e04f31d9c9f167427411ba5510Niko Cataniausing std::fread;
1181aa5708e437b96e04f31d9c9f167427411ba5510Niko Cataniausing std::freopen;
1191aa5708e437b96e04f31d9c9f167427411ba5510Niko Cataniausing std::fscanf;
1201aa5708e437b96e04f31d9c9f167427411ba5510Niko Cataniausing std::fseek;
1211aa5708e437b96e04f31d9c9f167427411ba5510Niko Cataniausing std::fsetpos;
1221aa5708e437b96e04f31d9c9f167427411ba5510Niko Cataniausing std::ftell;
1231aa5708e437b96e04f31d9c9f167427411ba5510Niko Cataniausing std::fwrite;
1241aa5708e437b96e04f31d9c9f167427411ba5510Niko Cataniausing std::getc;
1251aa5708e437b96e04f31d9c9f167427411ba5510Niko Cataniausing std::getchar;
1261aa5708e437b96e04f31d9c9f167427411ba5510Niko Cataniausing std::gets;
1271aa5708e437b96e04f31d9c9f167427411ba5510Niko Cataniausing std::perror;
1281aa5708e437b96e04f31d9c9f167427411ba5510Niko Cataniausing std::printf;
1291aa5708e437b96e04f31d9c9f167427411ba5510Niko Cataniausing std::putc;
1301aa5708e437b96e04f31d9c9f167427411ba5510Niko Cataniausing std::putchar;
1311aa5708e437b96e04f31d9c9f167427411ba5510Niko Cataniausing std::puts;
1321aa5708e437b96e04f31d9c9f167427411ba5510Niko Cataniausing std::remove;
1331aa5708e437b96e04f31d9c9f167427411ba5510Niko Cataniausing std::rename;
1341aa5708e437b96e04f31d9c9f167427411ba5510Niko Cataniausing std::rewind;
1351aa5708e437b96e04f31d9c9f167427411ba5510Niko Cataniausing std::scanf;
1361aa5708e437b96e04f31d9c9f167427411ba5510Niko Cataniausing std::setbuf;
1371aa5708e437b96e04f31d9c9f167427411ba5510Niko Cataniausing std::setvbuf;
1381aa5708e437b96e04f31d9c9f167427411ba5510Niko Cataniausing std::sprintf;
1391aa5708e437b96e04f31d9c9f167427411ba5510Niko Cataniausing std::sscanf;
1401aa5708e437b96e04f31d9c9f167427411ba5510Niko Cataniausing std::tmpfile;
1411aa5708e437b96e04f31d9c9f167427411ba5510Niko Cataniausing std::tmpnam;
1421aa5708e437b96e04f31d9c9f167427411ba5510Niko Cataniausing std::ungetc;
1431aa5708e437b96e04f31d9c9f167427411ba5510Niko Cataniausing std::vfprintf;
1441aa5708e437b96e04f31d9c9f167427411ba5510Niko Cataniausing std::vprintf;
1451aa5708e437b96e04f31d9c9f167427411ba5510Niko Cataniausing std::vsprintf;
1461aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania
1471aa5708e437b96e04f31d9c9f167427411ba5510Niko Cataniausing std::snprintf;
1481aa5708e437b96e04f31d9c9f167427411ba5510Niko Cataniausing std::vfscanf;
1491aa5708e437b96e04f31d9c9f167427411ba5510Niko Cataniausing std::vscanf;
1501aa5708e437b96e04f31d9c9f167427411ba5510Niko Cataniausing std::vsnprintf;
1511aa5708e437b96e04f31d9c9f167427411ba5510Niko Cataniausing std::vsscanf;
1521aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania
1531aa5708e437b96e04f31d9c9f167427411ba5510Niko Cataniabool testTypesStd()
1541aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania{
1551aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania    volatile std::size_t size;
1561aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania    volatile std::FILE file;
1571aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania    volatile std::fpos_t fpos_t;
1581aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania    return true;
1591aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania}
1601aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania}  // namespace android
1611aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania
1621aa5708e437b96e04f31d9c9f167427411ba5510Niko Cataniaint main(int argc, char **argv)
1631aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania{
1641aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania    FAIL_UNLESS(testTypesStd);
1651aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania    return kPassed;
1661aa5708e437b96e04f31d9c9f167427411ba5510Niko Catania}
167