13e519524SHoward Hinnant// -*- C++ -*-
23e519524SHoward Hinnant//===--------------------------- cstdlib ----------------------------------===//
33e519524SHoward Hinnant//
45b08a8a4SHoward Hinnant//                     The LLVM Compiler Infrastructure
53e519524SHoward Hinnant//
6412dbebeSHoward Hinnant// This file is dual licensed under the MIT and the University of Illinois Open
7412dbebeSHoward Hinnant// Source Licenses. See LICENSE.TXT for details.
83e519524SHoward Hinnant//
93e519524SHoward Hinnant//===----------------------------------------------------------------------===//
103e519524SHoward Hinnant
113e519524SHoward Hinnant#ifndef _LIBCPP_CSTDLIB
123e519524SHoward Hinnant#define _LIBCPP_CSTDLIB
133e519524SHoward Hinnant
143e519524SHoward Hinnant/*
153e519524SHoward Hinnant    cstdlib synopsis
163e519524SHoward Hinnant
173e519524SHoward HinnantMacros:
183e519524SHoward Hinnant
193e519524SHoward Hinnant    EXIT_FAILURE
203e519524SHoward Hinnant    EXIT_SUCCESS
213e519524SHoward Hinnant    MB_CUR_MAX
223e519524SHoward Hinnant    NULL
233e519524SHoward Hinnant    RAND_MAX
243e519524SHoward Hinnant
253e519524SHoward Hinnantnamespace std
263e519524SHoward Hinnant{
273e519524SHoward Hinnant
283e519524SHoward HinnantTypes:
293e519524SHoward Hinnant
303e519524SHoward Hinnant    size_t
313e519524SHoward Hinnant    div_t
323e519524SHoward Hinnant    ldiv_t
333e519524SHoward Hinnant    lldiv_t                                                               // C99
343e519524SHoward Hinnant
353e519524SHoward Hinnantdouble    atof (const char* nptr);
363e519524SHoward Hinnantint       atoi (const char* nptr);
373e519524SHoward Hinnantlong      atol (const char* nptr);
383e519524SHoward Hinnantlong long atoll(const char* nptr);                                        // C99
393e519524SHoward Hinnantdouble             strtod  (const char* restrict nptr, char** restrict endptr);
403e519524SHoward Hinnantfloat              strtof  (const char* restrict nptr, char** restrict endptr); // C99
413e519524SHoward Hinnantlong double        strtold (const char* restrict nptr, char** restrict endptr); // C99
423e519524SHoward Hinnantlong               strtol  (const char* restrict nptr, char** restrict endptr, int base);
433e519524SHoward Hinnantlong long          strtoll (const char* restrict nptr, char** restrict endptr, int base); // C99
443e519524SHoward Hinnantunsigned long      strtoul (const char* restrict nptr, char** restrict endptr, int base);
453e519524SHoward Hinnantunsigned long long strtoull(const char* restrict nptr, char** restrict endptr, int base); // C99
463e519524SHoward Hinnantint rand(void);
473e519524SHoward Hinnantvoid srand(unsigned int seed);
483e519524SHoward Hinnantvoid* calloc(size_t nmemb, size_t size);
493e519524SHoward Hinnantvoid free(void* ptr);
503e519524SHoward Hinnantvoid* malloc(size_t size);
513e519524SHoward Hinnantvoid* realloc(void* ptr, size_t size);
523e519524SHoward Hinnantvoid abort(void);
533e519524SHoward Hinnantint atexit(void (*func)(void));
543e519524SHoward Hinnantvoid exit(int status);
553e519524SHoward Hinnantvoid _Exit(int status);
563e519524SHoward Hinnantchar* getenv(const char* name);
573e519524SHoward Hinnantint system(const char* string);
583e519524SHoward Hinnantvoid* bsearch(const void* key, const void* base, size_t nmemb, size_t size,
593e519524SHoward Hinnant              int (*compar)(const void *, const void *));
603e519524SHoward Hinnantvoid qsort(void* base, size_t nmemb, size_t size,
613e519524SHoward Hinnant           int (*compar)(const void *, const void *));
623e519524SHoward Hinnantint         abs(      int j);
633e519524SHoward Hinnantlong        abs(     long j);
643e519524SHoward Hinnantlong long   abs(long long j);                                             // C++0X
653e519524SHoward Hinnantlong       labs(     long j);
663e519524SHoward Hinnantlong long llabs(long long j);                                             // C99
673e519524SHoward Hinnantdiv_t     div(      int numer,       int denom);
683e519524SHoward Hinnantldiv_t    div(     long numer,      long denom);
693e519524SHoward Hinnantlldiv_t   div(long long numer, long long denom);                          // C++0X
703e519524SHoward Hinnantldiv_t   ldiv(     long numer,      long denom);
713e519524SHoward Hinnantlldiv_t lldiv(long long numer, long long denom);                          // C99
723e519524SHoward Hinnantint mblen(const char* s, size_t n);
733e519524SHoward Hinnantint mbtowc(wchar_t* restrict pwc, const char* restrict s, size_t n);
743e519524SHoward Hinnantint wctomb(char* s, wchar_t wchar);
753e519524SHoward Hinnantsize_t mbstowcs(wchar_t* restrict pwcs, const char* restrict s, size_t n);
763e519524SHoward Hinnantsize_t wcstombs(char* restrict s, const wchar_t* restrict pwcs, size_t n);
777ba81603SHoward Hinnantint at_quick_exit(void (*func)(void))                                     // C++11
787ba81603SHoward Hinnantvoid quick_exit(int status);                                              // C++11
797ba81603SHoward Hinnantvoid *aligned_alloc(size_t alignment, size_t size);                       // C11
803e519524SHoward Hinnant
813e519524SHoward Hinnant}  // std
823e519524SHoward Hinnant
833e519524SHoward Hinnant*/
843e519524SHoward Hinnant
853e519524SHoward Hinnant#include <__config>
863e519524SHoward Hinnant#include <stdlib.h>
87e4383379SHoward Hinnant#ifdef _MSC_VER
889563a09cSHoward Hinnant#include "support/win32/locale_win32.h"
89e4383379SHoward Hinnant#endif // _MSC_VER
903e519524SHoward Hinnant
91073458b1SHoward Hinnant#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
923e519524SHoward Hinnant#pragma GCC system_header
93073458b1SHoward Hinnant#endif
943e519524SHoward Hinnant
953e519524SHoward Hinnant_LIBCPP_BEGIN_NAMESPACE_STD
963e519524SHoward Hinnant
973e519524SHoward Hinnantusing ::size_t;
983e519524SHoward Hinnantusing ::div_t;
993e519524SHoward Hinnantusing ::ldiv_t;
100*f8b24cf5SHoward Hinnant#ifndef _LIBCPP_HAS_NO_LONG_LONG
1013e519524SHoward Hinnantusing ::lldiv_t;
102*f8b24cf5SHoward Hinnant#endif // _LIBCPP_HAS_NO_LONG_LONG
1033e519524SHoward Hinnantusing ::atof;
1043e519524SHoward Hinnantusing ::atoi;
1053e519524SHoward Hinnantusing ::atol;
106*f8b24cf5SHoward Hinnant#ifndef _LIBCPP_HAS_NO_LONG_LONG
1073e519524SHoward Hinnantusing ::atoll;
108*f8b24cf5SHoward Hinnant#endif // _LIBCPP_HAS_NO_LONG_LONG
1093e519524SHoward Hinnantusing ::strtod;
1103e519524SHoward Hinnantusing ::strtof;
1113e519524SHoward Hinnantusing ::strtold;
1123e519524SHoward Hinnantusing ::strtol;
113*f8b24cf5SHoward Hinnant#ifndef _LIBCPP_HAS_NO_LONG_LONG
1143e519524SHoward Hinnantusing ::strtoll;
115*f8b24cf5SHoward Hinnant#endif // _LIBCPP_HAS_NO_LONG_LONG
1163e519524SHoward Hinnantusing ::strtoul;
117*f8b24cf5SHoward Hinnant#ifndef _LIBCPP_HAS_NO_LONG_LONG
1183e519524SHoward Hinnantusing ::strtoull;
119*f8b24cf5SHoward Hinnant#endif // _LIBCPP_HAS_NO_LONG_LONG
1203e519524SHoward Hinnantusing ::rand;
1213e519524SHoward Hinnantusing ::srand;
1223e519524SHoward Hinnantusing ::calloc;
1233e519524SHoward Hinnantusing ::free;
1243e519524SHoward Hinnantusing ::malloc;
1253e519524SHoward Hinnantusing ::realloc;
1263e519524SHoward Hinnantusing ::abort;
1273e519524SHoward Hinnantusing ::atexit;
1283e519524SHoward Hinnantusing ::exit;
1293e519524SHoward Hinnantusing ::_Exit;
1303e519524SHoward Hinnantusing ::getenv;
1313e519524SHoward Hinnantusing ::system;
1323e519524SHoward Hinnantusing ::bsearch;
1333e519524SHoward Hinnantusing ::qsort;
1343e519524SHoward Hinnantusing ::abs;
1353e519524SHoward Hinnantusing ::labs;
136*f8b24cf5SHoward Hinnant#ifndef _LIBCPP_HAS_NO_LONG_LONG
1373e519524SHoward Hinnantusing ::llabs;
138*f8b24cf5SHoward Hinnant#endif // _LIBCPP_HAS_NO_LONG_LONG
1393e519524SHoward Hinnantusing ::div;
1403e519524SHoward Hinnantusing ::ldiv;
141*f8b24cf5SHoward Hinnant#ifndef _LIBCPP_HAS_NO_LONG_LONG
1423e519524SHoward Hinnantusing ::lldiv;
143*f8b24cf5SHoward Hinnant#endif // _LIBCPP_HAS_NO_LONG_LONG
1443e519524SHoward Hinnantusing ::mblen;
1453e519524SHoward Hinnantusing ::mbtowc;
1463e519524SHoward Hinnantusing ::wctomb;
1473e519524SHoward Hinnantusing ::mbstowcs;
1483e519524SHoward Hinnantusing ::wcstombs;
1495f13d66fSDavid Chisnall#ifdef _LIBCPP_HAS_QUICK_EXIT
1505f13d66fSDavid Chisnallusing ::at_quick_exit;
1515f13d66fSDavid Chisnallusing ::quick_exit;
1525f13d66fSDavid Chisnall#endif
1537ba81603SHoward Hinnant#ifdef _LIBCPP_HAS_C11_FEATURES
1547ba81603SHoward Hinnantusing ::aligned_alloc;
1557ba81603SHoward Hinnant#endif
1563e519524SHoward Hinnant
15714c25b80SDavid Chisnall// MSVC already has the correct prototype in <stdlib.h.h> #ifdef __cplusplus
15814c25b80SDavid Chisnall#if !defined(_MSC_VER) && !defined(__sun__)
1599d6d1c68SHoward Hinnantinline _LIBCPP_INLINE_VISIBILITY long      abs(     long __x) _NOEXCEPT {return  labs(__x);}
160*f8b24cf5SHoward Hinnant#ifndef _LIBCPP_HAS_NO_LONG_LONG
1619d6d1c68SHoward Hinnantinline _LIBCPP_INLINE_VISIBILITY long long abs(long long __x) _NOEXCEPT {return llabs(__x);}
162*f8b24cf5SHoward Hinnant#endif // _LIBCPP_HAS_NO_LONG_LONG
1633e519524SHoward Hinnant
1649d6d1c68SHoward Hinnantinline _LIBCPP_INLINE_VISIBILITY  ldiv_t div(     long __x,      long __y) _NOEXCEPT {return  ldiv(__x, __y);}
165*f8b24cf5SHoward Hinnant#ifndef _LIBCPP_HAS_NO_LONG_LONG
1669d6d1c68SHoward Hinnantinline _LIBCPP_INLINE_VISIBILITY lldiv_t div(long long __x, long long __y) _NOEXCEPT {return lldiv(__x, __y);}
167*f8b24cf5SHoward Hinnant#endif // _LIBCPP_HAS_NO_LONG_LONG
168e4383379SHoward Hinnant#endif // _MSC_VER
1693e519524SHoward Hinnant
1703e519524SHoward Hinnant_LIBCPP_END_NAMESPACE_STD
1713e519524SHoward Hinnant
1723e519524SHoward Hinnant#endif  // _LIBCPP_CSTDLIB
173