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
33 /** \addtogroup lightlibcpp_18_5 */
38 /* Types from the C Standard library header stdlib.h */
42 * div_t type from the C Standard library
45 * div_t Typ aus der C Standardbibliothek
48 typedef ::div_t div_t;
52 * ldiv_t type from the C Standard library
55 * ldiv_t Typ aus der C Standardbibliothek
58 typedef ::ldiv_t ldiv_t;
62 * lldiv_t type from the C Standard library
65 * lldiv_t Typ aus der C Standardbibliothek
68 typedef ::lldiv_t lldiv_t;
72 /* Functions from the C Standard library header stdlib.h */
122 #ifndef _LIGHTLIBCPP_CPP03_STRICT
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.
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.
134 * Implementation limits: The implementation shall support the registration
135 * of at least 32 functions.
137 * \param[in] f pointer to the function that should be registered
138 * \return zero if the registration succeeds, non-zero if it fails.
141 * Die at_quick_exit() Funktion registriert die Funktion f, damit diese von
142 * quick_exit() aufgerufen werden kann. Diese Funktion ist threadsicher.
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.
148 * Eine Implementation dieser Funktion muss mindestens 32 Registrationen
150 * \param[in] f Zeiger auf die zu registrierende Funktion
151 * \return 0, falls erfolgreich, nicht 0 andernfalls
154 int at_quick_exit(void (*f)(void));
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.
166 * After calling registered functions, quick_exit() shall call _Exit(status).
168 * The function quick_exit() never returns to its caller.
169 * \param[in] status the status code that is passed to _Exit
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.
179 * Falls eine der registrierten Funktionen eine Ausnahme wirft, wird
180 * terminate() aufgerufen.
182 * Nachdem alle registrierten Funktionen aufgerufen wurden wird
183 * _Exit(status) aufgerufen.
185 * Diese Funktion kehrt nicht zum Aufrufenden zurück.
186 * \param[in] status der Statuscode der _Exit als Parameter übergeben wird
189 void quick_exit(int status) _LIGHTLIBCPP_NORETURN;