100db7afdSDavid E. O'Brien // -*- C++ -*- forwarding header.
200db7afdSDavid E. O'Brien 
3*f8a1b7d9SAlexander Kabaev // Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
400db7afdSDavid E. O'Brien // Free Software Foundation, Inc.
500db7afdSDavid E. O'Brien //
600db7afdSDavid E. O'Brien // This file is part of the GNU ISO C++ Library.  This library is free
700db7afdSDavid E. O'Brien // software; you can redistribute it and/or modify it under the
800db7afdSDavid E. O'Brien // terms of the GNU General Public License as published by the
900db7afdSDavid E. O'Brien // Free Software Foundation; either version 2, or (at your option)
1000db7afdSDavid E. O'Brien // any later version.
1100db7afdSDavid E. O'Brien 
1200db7afdSDavid E. O'Brien // This library is distributed in the hope that it will be useful,
1300db7afdSDavid E. O'Brien // but WITHOUT ANY WARRANTY; without even the implied warranty of
1400db7afdSDavid E. O'Brien // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1500db7afdSDavid E. O'Brien // GNU General Public License for more details.
1600db7afdSDavid E. O'Brien 
1700db7afdSDavid E. O'Brien // You should have received a copy of the GNU General Public License along
1800db7afdSDavid E. O'Brien // with this library; see the file COPYING.  If not, write to the Free
19*f8a1b7d9SAlexander Kabaev // Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
2000db7afdSDavid E. O'Brien // USA.
2100db7afdSDavid E. O'Brien 
2200db7afdSDavid E. O'Brien // As a special exception, you may use this file as part of a free software
2300db7afdSDavid E. O'Brien // library without restriction.  Specifically, if other files instantiate
2400db7afdSDavid E. O'Brien // templates or use macros or inline functions from this file, or you compile
2500db7afdSDavid E. O'Brien // this file and link it with other files to produce an executable, this
2600db7afdSDavid E. O'Brien // file does not by itself cause the resulting executable to be covered by
2700db7afdSDavid E. O'Brien // the GNU General Public License.  This exception does not however
2800db7afdSDavid E. O'Brien // invalidate any other reasons why the executable file might be covered by
2900db7afdSDavid E. O'Brien // the GNU General Public License.
3000db7afdSDavid E. O'Brien 
31*f8a1b7d9SAlexander Kabaev /** @file include/cstdlib
3200db7afdSDavid E. O'Brien  *  This is a Standard C++ Library file.  You should @c #include this file
3300db7afdSDavid E. O'Brien  *  in your programs, rather than any of the "*.h" implementation files.
3400db7afdSDavid E. O'Brien  *
3500db7afdSDavid E. O'Brien  *  This is the C++ version of the Standard C Library header @c stdlib.h,
3600db7afdSDavid E. O'Brien  *  and its contents are (mostly) the same as that header, but are all
37*f8a1b7d9SAlexander Kabaev  *  contained in the namespace @c std (except for names which are defined
38*f8a1b7d9SAlexander Kabaev  *  as macros in C).
3900db7afdSDavid E. O'Brien  */
4000db7afdSDavid E. O'Brien 
41*f8a1b7d9SAlexander Kabaev //
42*f8a1b7d9SAlexander Kabaev // ISO C++ 14882: 20.4.6  C library
43*f8a1b7d9SAlexander Kabaev //
44*f8a1b7d9SAlexander Kabaev 
45ffeaf689SAlexander Kabaev #ifndef _GLIBCXX_CSTDLIB
46ffeaf689SAlexander Kabaev #define _GLIBCXX_CSTDLIB 1
4700db7afdSDavid E. O'Brien 
4800db7afdSDavid E. O'Brien #pragma GCC system_header
4900db7afdSDavid E. O'Brien 
5000db7afdSDavid E. O'Brien #include <bits/c++config.h>
5100db7afdSDavid E. O'Brien #include <cstddef>
5200db7afdSDavid E. O'Brien 
53*f8a1b7d9SAlexander Kabaev #if !_GLIBCXX_HOSTED
54*f8a1b7d9SAlexander Kabaev // The C standard does not require a freestanding implementation to
55*f8a1b7d9SAlexander Kabaev // provide <stdlib.h>.  However, the C++ standard does still require
56*f8a1b7d9SAlexander Kabaev // <cstdlib> -- but only the functionality mentioned in
57*f8a1b7d9SAlexander Kabaev // [lib.support.start.term].
58*f8a1b7d9SAlexander Kabaev 
59*f8a1b7d9SAlexander Kabaev #define EXIT_SUCCESS 0
60*f8a1b7d9SAlexander Kabaev #define EXIT_FAILURE 1
61*f8a1b7d9SAlexander Kabaev 
62*f8a1b7d9SAlexander Kabaev _GLIBCXX_BEGIN_NAMESPACE(std)
63*f8a1b7d9SAlexander Kabaev 
64*f8a1b7d9SAlexander Kabaev   extern "C" void abort(void);
65*f8a1b7d9SAlexander Kabaev   extern "C" int atexit(void (*)());
66*f8a1b7d9SAlexander Kabaev   extern "C" void exit(int);
67*f8a1b7d9SAlexander Kabaev 
68*f8a1b7d9SAlexander Kabaev _GLIBCXX_END_NAMESPACE
69*f8a1b7d9SAlexander Kabaev 
70*f8a1b7d9SAlexander Kabaev #else
71*f8a1b7d9SAlexander Kabaev 
7200db7afdSDavid E. O'Brien #include <stdlib.h>
7300db7afdSDavid E. O'Brien 
7400db7afdSDavid E. O'Brien // Get rid of those macros defined in <stdlib.h> in lieu of real functions.
7500db7afdSDavid E. O'Brien #undef abort
7600db7afdSDavid E. O'Brien #undef abs
7700db7afdSDavid E. O'Brien #undef atexit
7800db7afdSDavid E. O'Brien #undef atof
7900db7afdSDavid E. O'Brien #undef atoi
8000db7afdSDavid E. O'Brien #undef atol
8100db7afdSDavid E. O'Brien #undef bsearch
8200db7afdSDavid E. O'Brien #undef calloc
8300db7afdSDavid E. O'Brien #undef div
8400db7afdSDavid E. O'Brien #undef exit
8500db7afdSDavid E. O'Brien #undef free
8600db7afdSDavid E. O'Brien #undef getenv
8700db7afdSDavid E. O'Brien #undef labs
8800db7afdSDavid E. O'Brien #undef ldiv
8900db7afdSDavid E. O'Brien #undef malloc
9000db7afdSDavid E. O'Brien #undef mblen
9100db7afdSDavid E. O'Brien #undef mbstowcs
9200db7afdSDavid E. O'Brien #undef mbtowc
9300db7afdSDavid E. O'Brien #undef qsort
9400db7afdSDavid E. O'Brien #undef rand
9500db7afdSDavid E. O'Brien #undef realloc
9600db7afdSDavid E. O'Brien #undef srand
9700db7afdSDavid E. O'Brien #undef strtod
9800db7afdSDavid E. O'Brien #undef strtol
9900db7afdSDavid E. O'Brien #undef strtoul
10000db7afdSDavid E. O'Brien #undef system
10100db7afdSDavid E. O'Brien #undef wcstombs
10200db7afdSDavid E. O'Brien #undef wctomb
10300db7afdSDavid E. O'Brien 
104*f8a1b7d9SAlexander Kabaev _GLIBCXX_BEGIN_NAMESPACE(std)
105*f8a1b7d9SAlexander Kabaev 
10600db7afdSDavid E. O'Brien   using ::div_t;
10700db7afdSDavid E. O'Brien   using ::ldiv_t;
10800db7afdSDavid E. O'Brien 
10900db7afdSDavid E. O'Brien   using ::abort;
11000db7afdSDavid E. O'Brien   using ::abs;
11100db7afdSDavid E. O'Brien   using ::atexit;
11200db7afdSDavid E. O'Brien   using ::atof;
11300db7afdSDavid E. O'Brien   using ::atoi;
11400db7afdSDavid E. O'Brien   using ::atol;
11500db7afdSDavid E. O'Brien   using ::bsearch;
11600db7afdSDavid E. O'Brien   using ::calloc;
11700db7afdSDavid E. O'Brien   using ::div;
11800db7afdSDavid E. O'Brien   using ::exit;
11900db7afdSDavid E. O'Brien   using ::free;
12000db7afdSDavid E. O'Brien   using ::getenv;
12100db7afdSDavid E. O'Brien   using ::labs;
12200db7afdSDavid E. O'Brien   using ::ldiv;
12300db7afdSDavid E. O'Brien   using ::malloc;
124ffeaf689SAlexander Kabaev #ifdef _GLIBCXX_HAVE_MBSTATE_T
12500db7afdSDavid E. O'Brien   using ::mblen;
12600db7afdSDavid E. O'Brien   using ::mbstowcs;
12700db7afdSDavid E. O'Brien   using ::mbtowc;
128ffeaf689SAlexander Kabaev #endif // _GLIBCXX_HAVE_MBSTATE_T
12900db7afdSDavid E. O'Brien   using ::qsort;
13000db7afdSDavid E. O'Brien   using ::rand;
13100db7afdSDavid E. O'Brien   using ::realloc;
13200db7afdSDavid E. O'Brien   using ::srand;
13300db7afdSDavid E. O'Brien   using ::strtod;
13400db7afdSDavid E. O'Brien   using ::strtol;
13500db7afdSDavid E. O'Brien   using ::strtoul;
13600db7afdSDavid E. O'Brien   using ::system;
137ffeaf689SAlexander Kabaev #ifdef _GLIBCXX_USE_WCHAR_T
13800db7afdSDavid E. O'Brien   using ::wcstombs;
13900db7afdSDavid E. O'Brien   using ::wctomb;
140ffeaf689SAlexander Kabaev #endif // _GLIBCXX_USE_WCHAR_T
14100db7afdSDavid E. O'Brien 
14200db7afdSDavid E. O'Brien   inline long
14300db7afdSDavid E. O'Brien   abs(long __i) { return labs(__i); }
14400db7afdSDavid E. O'Brien 
14500db7afdSDavid E. O'Brien   inline ldiv_t
14600db7afdSDavid E. O'Brien   div(long __i, long __j) { return ldiv(__i, __j); }
147*f8a1b7d9SAlexander Kabaev 
148*f8a1b7d9SAlexander Kabaev _GLIBCXX_END_NAMESPACE
14900db7afdSDavid E. O'Brien 
150ffeaf689SAlexander Kabaev #if _GLIBCXX_USE_C99
15100db7afdSDavid E. O'Brien 
15200db7afdSDavid E. O'Brien #undef _Exit
15300db7afdSDavid E. O'Brien #undef llabs
15400db7afdSDavid E. O'Brien #undef lldiv
15500db7afdSDavid E. O'Brien #undef atoll
15600db7afdSDavid E. O'Brien #undef strtoll
15700db7afdSDavid E. O'Brien #undef strtoull
15800db7afdSDavid E. O'Brien #undef strtof
15900db7afdSDavid E. O'Brien #undef strtold
16000db7afdSDavid E. O'Brien 
161*f8a1b7d9SAlexander Kabaev _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
162*f8a1b7d9SAlexander Kabaev 
163ffeaf689SAlexander Kabaev #if !_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC
16400db7afdSDavid E. O'Brien   using ::lldiv_t;
1651b86b14eSAlexander Kabaev #endif
166ffeaf689SAlexander Kabaev #if _GLIBCXX_USE_C99_CHECK || _GLIBCXX_USE_C99_DYNAMIC
1671b86b14eSAlexander Kabaev   extern "C" void (_Exit)(int);
1681b86b14eSAlexander Kabaev #endif
169ffeaf689SAlexander Kabaev #if !_GLIBCXX_USE_C99_DYNAMIC
17000db7afdSDavid E. O'Brien   using ::_Exit;
1711b86b14eSAlexander Kabaev #endif
17200db7afdSDavid E. O'Brien 
17300db7afdSDavid E. O'Brien   inline long long
17400db7afdSDavid E. O'Brien   abs(long long __x) { return __x >= 0 ? __x : -__x; }
17500db7afdSDavid E. O'Brien 
176ffeaf689SAlexander Kabaev #if !_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC
177*f8a1b7d9SAlexander Kabaev   using ::llabs;
178*f8a1b7d9SAlexander Kabaev 
17900db7afdSDavid E. O'Brien   inline lldiv_t
18000db7afdSDavid E. O'Brien   div(long long __n, long long __d)
18100db7afdSDavid E. O'Brien   { lldiv_t __q; __q.quot = __n / __d; __q.rem = __n % __d; return __q; }
18200db7afdSDavid E. O'Brien 
183*f8a1b7d9SAlexander Kabaev   using ::lldiv;
1841b86b14eSAlexander Kabaev #endif
18500db7afdSDavid E. O'Brien 
186ffeaf689SAlexander Kabaev #if _GLIBCXX_USE_C99_LONG_LONG_CHECK || _GLIBCXX_USE_C99_LONG_LONG_DYNAMIC
1871b86b14eSAlexander Kabaev   extern "C" long long int (atoll)(const char *);
1881b86b14eSAlexander Kabaev   extern "C" long long int
1891b86b14eSAlexander Kabaev     (strtoll)(const char * restrict, char ** restrict, int);
1901b86b14eSAlexander Kabaev   extern "C" unsigned long long int
1911b86b14eSAlexander Kabaev     (strtoull)(const char * restrict, char ** restrict, int);
1921b86b14eSAlexander Kabaev #endif
193ffeaf689SAlexander Kabaev #if !_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC
19400db7afdSDavid E. O'Brien   using ::atoll;
19500db7afdSDavid E. O'Brien   using ::strtoll;
19600db7afdSDavid E. O'Brien   using ::strtoull;
1971b86b14eSAlexander Kabaev #endif
1981b86b14eSAlexander Kabaev   using ::strtof;
19900db7afdSDavid E. O'Brien   using ::strtold;
20000db7afdSDavid E. O'Brien 
201*f8a1b7d9SAlexander Kabaev _GLIBCXX_END_NAMESPACE
202*f8a1b7d9SAlexander Kabaev 
203*f8a1b7d9SAlexander Kabaev _GLIBCXX_BEGIN_NAMESPACE(std)
204*f8a1b7d9SAlexander Kabaev 
205ffeaf689SAlexander Kabaev #if !_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC
206*f8a1b7d9SAlexander Kabaev   using ::__gnu_cxx::lldiv_t;
2071b86b14eSAlexander Kabaev #endif
208*f8a1b7d9SAlexander Kabaev   using ::__gnu_cxx::_Exit;
209*f8a1b7d9SAlexander Kabaev   using ::__gnu_cxx::abs;
210ffeaf689SAlexander Kabaev #if !_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC
211*f8a1b7d9SAlexander Kabaev   using ::__gnu_cxx::llabs;
212*f8a1b7d9SAlexander Kabaev   using ::__gnu_cxx::div;
213*f8a1b7d9SAlexander Kabaev   using ::__gnu_cxx::lldiv;
2141b86b14eSAlexander Kabaev #endif
215*f8a1b7d9SAlexander Kabaev   using ::__gnu_cxx::atoll;
216*f8a1b7d9SAlexander Kabaev   using ::__gnu_cxx::strtof;
217*f8a1b7d9SAlexander Kabaev   using ::__gnu_cxx::strtoll;
218*f8a1b7d9SAlexander Kabaev   using ::__gnu_cxx::strtoull;
219*f8a1b7d9SAlexander Kabaev   using ::__gnu_cxx::strtold;
220*f8a1b7d9SAlexander Kabaev 
221*f8a1b7d9SAlexander Kabaev _GLIBCXX_END_NAMESPACE
222*f8a1b7d9SAlexander Kabaev 
223*f8a1b7d9SAlexander Kabaev #endif // _GLIBCXX_USE_C99
224*f8a1b7d9SAlexander Kabaev 
225*f8a1b7d9SAlexander Kabaev #endif // !_GLIBCXX_HOSTED
22600db7afdSDavid E. O'Brien 
22700db7afdSDavid E. O'Brien #endif
228