+ 19.3 Diagnostics library, Assertions: <cassert>
[lightlibc++.git] / include / cstdlib
blobfb0609ba7893b278908e31d48514aa4dd1613bb7
1 /*
2 Permission is granted to use, modify, and / or redistribute at will.
4 This includes removing authorship notices, re-use of code parts in
5 other software (with or without giving credit), and / or creating a
6 commercial product based on it.
8 This permission is not revocable by the author.
10 This software is provided as-is. Use it at your own risk. There is
11 no warranty whatsoever, neither expressed nor implied, and by using
12 this software you accept that the author(s) shall not be held liable
13 for any loss of data, loss of service, or other damages, be they
14 incidental or consequential. Your only option other than accepting
15 this is not to use the software at all.
17 #ifndef _LIGHTLIBCPP_CSTDLIB
18 #define _LIGHTLIBCPP_CSTDLIB
22 #include <lightlibc++/compiler.hpp>    // _LIGHTLIBCPP_NORETURN
23 #include <stdlib.h>                    // abort, atexit, exit
27 // NOTE: macros EXIT_FAILURE, EXIT_SUCCESS, RAND_MAX, MB_CUR_MAX taken from C Standard library
31 namespace std
33   /** \addtogroup lightlibcpp_18_5 */
34   /*@{*/
38   /* Types from the C Standard library header stdlib.h */
40   /**
41    *\english
42    *  div_t type from the C Standard library
43    *\endenglish
44    *\german
45    *  div_t Typ aus der C Standardbibliothek
46    *\endgerman
47    */
48   typedef ::div_t            div_t;
50   /**
51    *\english
52    *  ldiv_t type from the C Standard library
53    *\endenglish
54    *\german
55    *  ldiv_t Typ aus der C Standardbibliothek
56    *\endgerman
57    */
58   typedef ::ldiv_t           ldiv_t;
60   /**
61    *\english
62    *  lldiv_t type from the C Standard library
63    *\endenglish
64    *\german
65    *  lldiv_t Typ aus der C Standardbibliothek
66    *\endgerman
67    */
68   typedef ::lldiv_t          lldiv_t;
72   /* Functions from the C Standard library header stdlib.h */
74   using ::atof;
75   using ::atoi;
76   using ::atol;
77   using ::atoll;
79   using ::strtod;
80   using ::strtof;
81   using ::strtold;
83   using ::strtol;
84   using ::strtoll;
85   using ::strtoul;
86   using ::strtoull;
88   using ::rand;
89   using ::srand;
91   using ::calloc;
92   using ::free;
93   using ::malloc;
94   using ::realloc;
96   using ::abort;
97   using ::atexit;
98   using ::exit;
99   using ::_Exit;
100   using ::getenv;
101   using ::system;
103   using ::bsearch;
104   using ::qsort;
106   using ::abs;
107   using ::labs;
108   using ::llabs;
110   using ::div;
111   using ::ldiv;
112   using ::lldiv;
114   using ::mblen;
115   using ::mbtowc;
116   using ::wctomb;
117   using ::mbstowcs;
118   using ::wcstombs;
122 #ifndef _LIGHTLIBCPP_CPP03_STRICT
124   /**
125    *\english
126    *  The at_quick_exit() functions register the function pointed to by f to be
127    *  called without arguments when quick_exit is called. The at_quick_exit()
128    *  functions shall be thread safe.
129    *
130    *  The at_quick_exit() registrations are distinct from the atexit()
131    *  registrations, and applications may need to call both registration
132    *  functions with the same argument.
133    *
134    *  Implementation limits: The implementation shall support the registration
135    *  of at least 32 functions.
136    *
137    *  \param[in] f pointer to the function that should be registered
138    *  \return zero if the registration succeeds, non-zero if it fails.
139    *\endenglish
140    *\german
141    *  Die at_quick_exit() Funktion registriert die Funktion f, damit diese von
142    *  quick_exit() aufgerufen werden kann. Diese Funktion ist threadsicher.
143    *
144    *  Die Registrierung über at_quick_exit() is verschieden von der
145    *  Registrierung über atexit(). Folglich muss eine Anwendung eventuell beide
146    *  Funktionen mit dem gleichen Argument aufrufen.
147    *
148    *  Eine Implementation dieser Funktion muss mindestens 32 Registrationen
149    *  unterstützen.
150    *  \param[in] f Zeiger auf die zu registrierende Funktion
151    *  \return 0, falls erfolgreich, nicht 0 andernfalls
152    *\endgerman
153    */
154   int at_quick_exit(void (*f)(void));
156   /**
157    *\english
158    *  Functions registered by calls to at_quick_exit() are called in the reverse
159    *  order of their registration, except that a function shall be called
160    *  after any previously registered functions that had already been called
161    *  at the time it was registered. Objects shall not be destroyed as a result
162    *  of calling quick_exit(). If control leaves a registered function called by
163    *  quick_exit() because the function does not provide a handler for a thrown
164    *  exception, terminate() shall be called.
165    *
166    *  After calling registered functions, quick_exit() shall call _Exit(status).
167    *
168    *  The function quick_exit() never returns to its caller.
169    *  \param[in] status the status code that is passed to _Exit
170    *\endenglish
171    *\german
172    *  Die Funktionen, die durch einen Aufruf von at_quick_exit() registriert
173    *  wurden, werden in der umgekehrten Reihenfolge ihrer Registration
174    *  aufferufen. Ausgenommen davon sind Funktionen die registriert wurden,
175    *  nachdem bereits ein Teil der registrierten Funktionen aufgerufen wurden.
176    *  In diesem Fall wird die neu registrierte Funktion direkt nach allen
177    *  bereits aufgerufenen aufgerufen.
178    *
179    *  Falls eine der registrierten Funktionen eine Ausnahme wirft, wird
180    *  terminate() aufgerufen.
181    *
182    *  Nachdem alle registrierten Funktionen aufgerufen wurden wird
183    *  _Exit(status) aufgerufen.
184    *
185    *  Diese Funktion kehrt nicht zum Aufrufenden zurück.
186    *  \param[in] status der Statuscode der _Exit als Parameter übergeben wird
187    *\endgerman
188    */
189   void quick_exit(int status) _LIGHTLIBCPP_NORETURN;
191 #endif
195   /*@}*/
200 #endif