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