1// -*- C++ -*- forwarding header. 2 3// Copyright (C) 1997-2018 Free Software Foundation, Inc. 4// 5// This file is part of the GNU ISO C++ Library. This library is free 6// software; you can redistribute it and/or modify it under the 7// terms of the GNU General Public License as published by the 8// Free Software Foundation; either version 3, or (at your option) 9// any later version. 10 11// This library is distributed in the hope that it will be useful, 12// but WITHOUT ANY WARRANTY; without even the implied warranty of 13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14// GNU General Public License for more details. 15 16// Under Section 7 of GPL version 3, you are granted additional 17// permissions described in the GCC Runtime Library Exception, version 18// 3.1, as published by the Free Software Foundation. 19 20// You should have received a copy of the GNU General Public License and 21// a copy of the GCC Runtime Library Exception along with this program; 22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 23// <http://www.gnu.org/licenses/>. 24 25/** @file include/cstdlib 26 * This is a Standard C++ Library file. You should @c \#include this file 27 * in your programs, rather than any of the @a *.h implementation files. 28 * 29 * This is the C++ version of the Standard C Library header @c stdlib.h, 30 * and its contents are (mostly) the same as that header, but are all 31 * contained in the namespace @c std (except for names which are defined 32 * as macros in C). 33 */ 34 35// 36// ISO C++ 14882: 20.4.6 C library 37// 38 39#pragma GCC system_header 40 41#include <bits/c++config.h> 42 43#ifndef _GLIBCXX_CSTDLIB 44#define _GLIBCXX_CSTDLIB 1 45 46#if !_GLIBCXX_HOSTED 47// The C standard does not require a freestanding implementation to 48// provide <stdlib.h>. However, the C++ standard does still require 49// <cstdlib> -- but only the functionality mentioned in 50// [lib.support.start.term]. 51 52#define EXIT_SUCCESS 0 53#define EXIT_FAILURE 1 54 55namespace std 56{ 57 extern "C" void abort(void) _GLIBCXX_NORETURN; 58 extern "C" int atexit(void (*)(void)); 59 extern "C" void exit(int) _GLIBCXX_NORETURN; 60#if __cplusplus >= 201103L 61# ifdef _GLIBCXX_HAVE_AT_QUICK_EXIT 62 extern "C" int at_quick_exit(void (*)(void)); 63# endif 64# ifdef _GLIBCXX_HAVE_QUICK_EXIT 65 extern "C" void quick_exit(int) _GLIBCXX_NORETURN; 66# endif 67#endif 68} // namespace std 69 70#else 71 72// Need to ensure this finds the C library's <stdlib.h> not a libstdc++ 73// wrapper that might already be installed later in the include search path. 74#define _GLIBCXX_INCLUDE_NEXT_C_HEADERS 75#include_next <stdlib.h> 76#undef _GLIBCXX_INCLUDE_NEXT_C_HEADERS 77#include <bits/std_abs.h> 78 79// Get rid of those macros defined in <stdlib.h> in lieu of real functions. 80#undef abort 81#if __cplusplus >= 201703L && defined(_GLIBCXX_HAVE_ALIGNED_ALLOC) 82# undef aligned_alloc 83#endif 84#undef atexit 85#if __cplusplus >= 201103L 86# ifdef _GLIBCXX_HAVE_AT_QUICK_EXIT 87# undef at_quick_exit 88# endif 89#endif 90#undef atof 91#undef atoi 92#undef atol 93#undef bsearch 94#undef calloc 95#undef div 96#undef exit 97#undef free 98#undef getenv 99#undef labs 100#undef ldiv 101#undef malloc 102#undef mblen 103#undef mbstowcs 104#undef mbtowc 105#undef qsort 106#if __cplusplus >= 201103L 107# ifdef _GLIBCXX_HAVE_QUICK_EXIT 108# undef quick_exit 109# endif 110#endif 111#undef rand 112#undef realloc 113#undef srand 114#undef strtod 115#undef strtol 116#undef strtoul 117#undef system 118#undef wcstombs 119#undef wctomb 120 121extern "C++" 122{ 123namespace std _GLIBCXX_VISIBILITY(default) 124{ 125_GLIBCXX_BEGIN_NAMESPACE_VERSION 126 127 using ::div_t; 128 using ::ldiv_t; 129 130 using ::abort; 131#if __cplusplus >= 201703L && defined(_GLIBCXX_HAVE_ALIGNED_ALLOC) 132 using ::aligned_alloc; 133#endif 134 using ::atexit; 135#if __cplusplus >= 201103L 136# ifdef _GLIBCXX_HAVE_AT_QUICK_EXIT 137 using ::at_quick_exit; 138# endif 139#endif 140 using ::atof; 141 using ::atoi; 142 using ::atol; 143 using ::bsearch; 144 using ::calloc; 145 using ::div; 146 using ::exit; 147 using ::free; 148 using ::getenv; 149 using ::labs; 150 using ::ldiv; 151 using ::malloc; 152#ifdef _GLIBCXX_HAVE_MBSTATE_T 153 using ::mblen; 154 using ::mbstowcs; 155 using ::mbtowc; 156#endif // _GLIBCXX_HAVE_MBSTATE_T 157 using ::qsort; 158#if __cplusplus >= 201103L 159# ifdef _GLIBCXX_HAVE_QUICK_EXIT 160 using ::quick_exit; 161# endif 162#endif 163 using ::rand; 164 using ::realloc; 165 using ::srand; 166 using ::strtod; 167 using ::strtol; 168 using ::strtoul; 169 using ::system; 170#ifdef _GLIBCXX_USE_WCHAR_T 171 using ::wcstombs; 172 using ::wctomb; 173#endif // _GLIBCXX_USE_WCHAR_T 174 175#ifndef __CORRECT_ISO_CPP_STDLIB_H_PROTO 176 inline ldiv_t 177 div(long __i, long __j) { return ldiv(__i, __j); } 178#endif 179 180 181_GLIBCXX_END_NAMESPACE_VERSION 182} // namespace 183 184#if _GLIBCXX_USE_C99_STDLIB 185 186#undef _Exit 187#undef llabs 188#undef lldiv 189#undef atoll 190#undef strtoll 191#undef strtoull 192#undef strtof 193#undef strtold 194 195namespace __gnu_cxx _GLIBCXX_VISIBILITY(default) 196{ 197_GLIBCXX_BEGIN_NAMESPACE_VERSION 198 199#if !_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC 200 using ::lldiv_t; 201#endif 202#if _GLIBCXX_USE_C99_CHECK || _GLIBCXX_USE_C99_DYNAMIC 203 extern "C" void (_Exit)(int) _GLIBCXX_NORETURN; 204#endif 205#if !_GLIBCXX_USE_C99_DYNAMIC 206 using ::_Exit; 207#endif 208 209#if !_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC 210 using ::llabs; 211 212 inline lldiv_t 213 div(long long __n, long long __d) 214 { lldiv_t __q; __q.quot = __n / __d; __q.rem = __n % __d; return __q; } 215 216 using ::lldiv; 217#endif 218 219#if _GLIBCXX_USE_C99_LONG_LONG_CHECK || _GLIBCXX_USE_C99_LONG_LONG_DYNAMIC 220 extern "C" long long int (atoll)(const char *); 221 extern "C" long long int 222 (strtoll)(const char * __restrict, char ** __restrict, int); 223 extern "C" unsigned long long int 224 (strtoull)(const char * __restrict, char ** __restrict, int); 225#endif 226#if !_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC 227 using ::atoll; 228 using ::strtoll; 229 using ::strtoull; 230#endif 231 using ::strtof; 232 using ::strtold; 233 234_GLIBCXX_END_NAMESPACE_VERSION 235} // namespace __gnu_cxx 236 237namespace std 238{ 239#if !_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC 240 using ::__gnu_cxx::lldiv_t; 241#endif 242 using ::__gnu_cxx::_Exit; 243#if !_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC 244 using ::__gnu_cxx::llabs; 245 using ::__gnu_cxx::div; 246 using ::__gnu_cxx::lldiv; 247#endif 248 using ::__gnu_cxx::atoll; 249 using ::__gnu_cxx::strtof; 250 using ::__gnu_cxx::strtoll; 251 using ::__gnu_cxx::strtoull; 252 using ::__gnu_cxx::strtold; 253} // namespace std 254 255#endif // _GLIBCXX_USE_C99_STDLIB 256 257} // extern "C++" 258 259#endif // !_GLIBCXX_HOSTED 260 261#endif 262