xref: /aosp_15_r20/bionic/libc/include/stdlib.h (revision 8d67ca893c1523eb926b9080dbe4e2ffd2a27ba1)
1*8d67ca89SAndroid Build Coastguard Worker /*
2*8d67ca89SAndroid Build Coastguard Worker  * Copyright (C) 2008 The Android Open Source Project
3*8d67ca89SAndroid Build Coastguard Worker  * All rights reserved.
4*8d67ca89SAndroid Build Coastguard Worker  *
5*8d67ca89SAndroid Build Coastguard Worker  * Redistribution and use in source and binary forms, with or without
6*8d67ca89SAndroid Build Coastguard Worker  * modification, are permitted provided that the following conditions
7*8d67ca89SAndroid Build Coastguard Worker  * are met:
8*8d67ca89SAndroid Build Coastguard Worker  *  * Redistributions of source code must retain the above copyright
9*8d67ca89SAndroid Build Coastguard Worker  *    notice, this list of conditions and the following disclaimer.
10*8d67ca89SAndroid Build Coastguard Worker  *  * Redistributions in binary form must reproduce the above copyright
11*8d67ca89SAndroid Build Coastguard Worker  *    notice, this list of conditions and the following disclaimer in
12*8d67ca89SAndroid Build Coastguard Worker  *    the documentation and/or other materials provided with the
13*8d67ca89SAndroid Build Coastguard Worker  *    distribution.
14*8d67ca89SAndroid Build Coastguard Worker  *
15*8d67ca89SAndroid Build Coastguard Worker  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
16*8d67ca89SAndroid Build Coastguard Worker  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
17*8d67ca89SAndroid Build Coastguard Worker  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
18*8d67ca89SAndroid Build Coastguard Worker  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
19*8d67ca89SAndroid Build Coastguard Worker  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
20*8d67ca89SAndroid Build Coastguard Worker  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
21*8d67ca89SAndroid Build Coastguard Worker  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
22*8d67ca89SAndroid Build Coastguard Worker  * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
23*8d67ca89SAndroid Build Coastguard Worker  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
24*8d67ca89SAndroid Build Coastguard Worker  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
25*8d67ca89SAndroid Build Coastguard Worker  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26*8d67ca89SAndroid Build Coastguard Worker  * SUCH DAMAGE.
27*8d67ca89SAndroid Build Coastguard Worker  */
28*8d67ca89SAndroid Build Coastguard Worker 
29*8d67ca89SAndroid Build Coastguard Worker #ifndef _STDLIB_H
30*8d67ca89SAndroid Build Coastguard Worker #define _STDLIB_H
31*8d67ca89SAndroid Build Coastguard Worker 
32*8d67ca89SAndroid Build Coastguard Worker #include <sys/cdefs.h>
33*8d67ca89SAndroid Build Coastguard Worker 
34*8d67ca89SAndroid Build Coastguard Worker #include <alloca.h>
35*8d67ca89SAndroid Build Coastguard Worker #include <bits/wait.h>
36*8d67ca89SAndroid Build Coastguard Worker #include <malloc.h>
37*8d67ca89SAndroid Build Coastguard Worker #include <stddef.h>
38*8d67ca89SAndroid Build Coastguard Worker #include <xlocale.h>
39*8d67ca89SAndroid Build Coastguard Worker 
40*8d67ca89SAndroid Build Coastguard Worker __BEGIN_DECLS
41*8d67ca89SAndroid Build Coastguard Worker 
42*8d67ca89SAndroid Build Coastguard Worker #define EXIT_FAILURE 1
43*8d67ca89SAndroid Build Coastguard Worker #define EXIT_SUCCESS 0
44*8d67ca89SAndroid Build Coastguard Worker 
45*8d67ca89SAndroid Build Coastguard Worker __noreturn void abort(void) __attribute__((__nomerge__));
46*8d67ca89SAndroid Build Coastguard Worker __noreturn void exit(int __status);
47*8d67ca89SAndroid Build Coastguard Worker __noreturn void _Exit(int __status);
48*8d67ca89SAndroid Build Coastguard Worker 
49*8d67ca89SAndroid Build Coastguard Worker int atexit(void (* _Nonnull __fn)(void));
50*8d67ca89SAndroid Build Coastguard Worker 
51*8d67ca89SAndroid Build Coastguard Worker int at_quick_exit(void (* _Nonnull __fn)(void));
52*8d67ca89SAndroid Build Coastguard Worker void quick_exit(int __status) __noreturn;
53*8d67ca89SAndroid Build Coastguard Worker 
54*8d67ca89SAndroid Build Coastguard Worker char* _Nullable getenv(const char* _Nonnull __name);
55*8d67ca89SAndroid Build Coastguard Worker int putenv(char* _Nonnull __assignment);
56*8d67ca89SAndroid Build Coastguard Worker int setenv(const char* _Nonnull __name, const char* _Nonnull __value, int __overwrite);
57*8d67ca89SAndroid Build Coastguard Worker int unsetenv(const char* _Nonnull __name);
58*8d67ca89SAndroid Build Coastguard Worker int clearenv(void);
59*8d67ca89SAndroid Build Coastguard Worker 
60*8d67ca89SAndroid Build Coastguard Worker char* _Nullable mkdtemp(char* _Nonnull __template);
61*8d67ca89SAndroid Build Coastguard Worker char* _Nullable mktemp(char* _Nonnull __template) __attribute__((__deprecated__("mktemp is unsafe, use mkstemp or tmpfile instead")));
62*8d67ca89SAndroid Build Coastguard Worker 
63*8d67ca89SAndroid Build Coastguard Worker 
64*8d67ca89SAndroid Build Coastguard Worker #if __BIONIC_AVAILABILITY_GUARD(23)
65*8d67ca89SAndroid Build Coastguard Worker int mkostemp64(char* _Nonnull __template, int __flags) __INTRODUCED_IN(23);
66*8d67ca89SAndroid Build Coastguard Worker int mkostemp(char* _Nonnull __template, int __flags) __INTRODUCED_IN(23);
67*8d67ca89SAndroid Build Coastguard Worker int mkostemps64(char* _Nonnull __template, int __suffix_length, int __flags) __INTRODUCED_IN(23);
68*8d67ca89SAndroid Build Coastguard Worker int mkostemps(char* _Nonnull __template, int __suffix_length, int __flags) __INTRODUCED_IN(23);
69*8d67ca89SAndroid Build Coastguard Worker #endif /* __BIONIC_AVAILABILITY_GUARD(23) */
70*8d67ca89SAndroid Build Coastguard Worker 
71*8d67ca89SAndroid Build Coastguard Worker int mkstemp64(char* _Nonnull __template);
72*8d67ca89SAndroid Build Coastguard Worker int mkstemp(char* _Nonnull __template);
73*8d67ca89SAndroid Build Coastguard Worker 
74*8d67ca89SAndroid Build Coastguard Worker #if __BIONIC_AVAILABILITY_GUARD(23)
75*8d67ca89SAndroid Build Coastguard Worker int mkstemps64(char* _Nonnull __template, int __flags) __INTRODUCED_IN(23);
76*8d67ca89SAndroid Build Coastguard Worker #endif /* __BIONIC_AVAILABILITY_GUARD(23) */
77*8d67ca89SAndroid Build Coastguard Worker 
78*8d67ca89SAndroid Build Coastguard Worker int mkstemps(char* _Nonnull __template, int __flags);
79*8d67ca89SAndroid Build Coastguard Worker 
80*8d67ca89SAndroid Build Coastguard Worker int posix_memalign(void* _Nullable * _Nullable __memptr, size_t __alignment, size_t __size);
81*8d67ca89SAndroid Build Coastguard Worker 
82*8d67ca89SAndroid Build Coastguard Worker /**
83*8d67ca89SAndroid Build Coastguard Worker  * [aligned_alloc(3)](https://man7.org/linux/man-pages/man3/aligned_alloc.3.html)
84*8d67ca89SAndroid Build Coastguard Worker  * allocates the given number of bytes with the given alignment.
85*8d67ca89SAndroid Build Coastguard Worker  *
86*8d67ca89SAndroid Build Coastguard Worker  * Returns a pointer to the allocated memory on success and returns a null
87*8d67ca89SAndroid Build Coastguard Worker  * pointer and sets `errno` on failure.
88*8d67ca89SAndroid Build Coastguard Worker  *
89*8d67ca89SAndroid Build Coastguard Worker  * Available since API level 28.
90*8d67ca89SAndroid Build Coastguard Worker  */
91*8d67ca89SAndroid Build Coastguard Worker 
92*8d67ca89SAndroid Build Coastguard Worker #if __BIONIC_AVAILABILITY_GUARD(28)
93*8d67ca89SAndroid Build Coastguard Worker __nodiscard void* _Nullable aligned_alloc(size_t __alignment, size_t __size) __INTRODUCED_IN(28);
94*8d67ca89SAndroid Build Coastguard Worker #endif /* __BIONIC_AVAILABILITY_GUARD(28) */
95*8d67ca89SAndroid Build Coastguard Worker 
96*8d67ca89SAndroid Build Coastguard Worker 
97*8d67ca89SAndroid Build Coastguard Worker __nodiscard char* _Nullable realpath(const char* _Nonnull __path, char* _Nullable __resolved);
98*8d67ca89SAndroid Build Coastguard Worker 
99*8d67ca89SAndroid Build Coastguard Worker /**
100*8d67ca89SAndroid Build Coastguard Worker  * [system(3)](https://man7.org/linux/man-pages/man3/system.3.html) executes
101*8d67ca89SAndroid Build Coastguard Worker  * the given command in a new shell process.
102*8d67ca89SAndroid Build Coastguard Worker  *
103*8d67ca89SAndroid Build Coastguard Worker  * On Android, the special case of `system(NULL)` always returns 1,
104*8d67ca89SAndroid Build Coastguard Worker  * as specified by POSIX. Passing `NULL` to determine whether or
105*8d67ca89SAndroid Build Coastguard Worker  * not a shell is available is not portable. Callers should just try
106*8d67ca89SAndroid Build Coastguard Worker  * the command they actually want to run, since there are many reasons
107*8d67ca89SAndroid Build Coastguard Worker  * why it might fail, both temporarily (for lack of resources, say)
108*8d67ca89SAndroid Build Coastguard Worker  * or permanently (for lack of permission, say).
109*8d67ca89SAndroid Build Coastguard Worker  *
110*8d67ca89SAndroid Build Coastguard Worker  * Returns -1 and sets errno if process creation fails; returns a
111*8d67ca89SAndroid Build Coastguard Worker  * [waitpid(2)](https://man7.org/linux/man-pages/man2/waitpid.2.html)
112*8d67ca89SAndroid Build Coastguard Worker  * status otherwise.
113*8d67ca89SAndroid Build Coastguard Worker  */
114*8d67ca89SAndroid Build Coastguard Worker int system(const char* _Nonnull __command);
115*8d67ca89SAndroid Build Coastguard Worker 
116*8d67ca89SAndroid Build Coastguard Worker /**
117*8d67ca89SAndroid Build Coastguard Worker  * [bsearch(3)](https://man7.org/linux/man-pages/man3/bsearch.3.html) searches
118*8d67ca89SAndroid Build Coastguard Worker  * a sorted array.
119*8d67ca89SAndroid Build Coastguard Worker  *
120*8d67ca89SAndroid Build Coastguard Worker  * Returns a pointer to a matching item on success,
121*8d67ca89SAndroid Build Coastguard Worker  * or NULL if no matching item is found.
122*8d67ca89SAndroid Build Coastguard Worker  */
123*8d67ca89SAndroid Build Coastguard Worker __nodiscard void* _Nullable bsearch(const void* _Nonnull __key, const void* _Nullable __base, size_t __nmemb, size_t __size, int (* _Nonnull __comparator)(const void* _Nonnull __lhs, const void* _Nonnull __rhs));
124*8d67ca89SAndroid Build Coastguard Worker 
125*8d67ca89SAndroid Build Coastguard Worker /**
126*8d67ca89SAndroid Build Coastguard Worker  * [qsort(3)](https://man7.org/linux/man-pages/man3/qsort.3.html) sorts an array
127*8d67ca89SAndroid Build Coastguard Worker  * of n elements each of the given size, using the given comparator.
128*8d67ca89SAndroid Build Coastguard Worker  */
129*8d67ca89SAndroid Build Coastguard Worker void qsort(void* _Nullable __array, size_t __n, size_t __size, int (* _Nonnull __comparator)(const void* _Nullable __lhs, const void* _Nullable __rhs));
130*8d67ca89SAndroid Build Coastguard Worker 
131*8d67ca89SAndroid Build Coastguard Worker /**
132*8d67ca89SAndroid Build Coastguard Worker  * [qsort_r(3)](https://man7.org/linux/man-pages/man3/qsort_r.3.html) sorts an
133*8d67ca89SAndroid Build Coastguard Worker  * array of n elements each of the given size, using the given comparator,
134*8d67ca89SAndroid Build Coastguard Worker  * and passing the given context argument to the comparator.
135*8d67ca89SAndroid Build Coastguard Worker  *
136*8d67ca89SAndroid Build Coastguard Worker  * Available since API level 36.
137*8d67ca89SAndroid Build Coastguard Worker  */
138*8d67ca89SAndroid Build Coastguard Worker 
139*8d67ca89SAndroid Build Coastguard Worker #if __BIONIC_AVAILABILITY_GUARD(36)
140*8d67ca89SAndroid Build Coastguard Worker void qsort_r(void* _Nullable __array, size_t __n, size_t __size, int (* _Nonnull __comparator)(const void* _Nullable __lhs, const void* _Nullable __rhs, void* _Nullable __context), void* _Nullable __context) __INTRODUCED_IN(36);
141*8d67ca89SAndroid Build Coastguard Worker #endif /* __BIONIC_AVAILABILITY_GUARD(36) */
142*8d67ca89SAndroid Build Coastguard Worker 
143*8d67ca89SAndroid Build Coastguard Worker 
144*8d67ca89SAndroid Build Coastguard Worker uint32_t arc4random(void);
145*8d67ca89SAndroid Build Coastguard Worker uint32_t arc4random_uniform(uint32_t __upper_bound);
146*8d67ca89SAndroid Build Coastguard Worker void arc4random_buf(void* _Nonnull __buf, size_t __n);
147*8d67ca89SAndroid Build Coastguard Worker 
148*8d67ca89SAndroid Build Coastguard Worker #define RAND_MAX 0x7fffffff
149*8d67ca89SAndroid Build Coastguard Worker 
150*8d67ca89SAndroid Build Coastguard Worker int rand_r(unsigned int* _Nonnull __seed_ptr);
151*8d67ca89SAndroid Build Coastguard Worker 
152*8d67ca89SAndroid Build Coastguard Worker double drand48(void);
153*8d67ca89SAndroid Build Coastguard Worker double erand48(unsigned short __xsubi[_Nonnull 3]);
154*8d67ca89SAndroid Build Coastguard Worker long jrand48(unsigned short __xsubi[_Nonnull 3]);
155*8d67ca89SAndroid Build Coastguard Worker 
156*8d67ca89SAndroid Build Coastguard Worker #if __BIONIC_AVAILABILITY_GUARD(23)
157*8d67ca89SAndroid Build Coastguard Worker void lcong48(unsigned short __param[_Nonnull 7]) __INTRODUCED_IN(23);
158*8d67ca89SAndroid Build Coastguard Worker #endif /* __BIONIC_AVAILABILITY_GUARD(23) */
159*8d67ca89SAndroid Build Coastguard Worker 
160*8d67ca89SAndroid Build Coastguard Worker long lrand48(void);
161*8d67ca89SAndroid Build Coastguard Worker long mrand48(void);
162*8d67ca89SAndroid Build Coastguard Worker long nrand48(unsigned short __xsubi[_Nonnull 3]);
163*8d67ca89SAndroid Build Coastguard Worker unsigned short* _Nonnull seed48(unsigned short __seed16v[_Nonnull 3]);
164*8d67ca89SAndroid Build Coastguard Worker void srand48(long __seed);
165*8d67ca89SAndroid Build Coastguard Worker 
166*8d67ca89SAndroid Build Coastguard Worker char* _Nullable initstate(unsigned int __seed, char* _Nonnull __state, size_t __n);
167*8d67ca89SAndroid Build Coastguard Worker char* _Nullable setstate(char* _Nonnull __state);
168*8d67ca89SAndroid Build Coastguard Worker 
169*8d67ca89SAndroid Build Coastguard Worker int getpt(void);
170*8d67ca89SAndroid Build Coastguard Worker int posix_openpt(int __flags);
171*8d67ca89SAndroid Build Coastguard Worker char* _Nullable ptsname(int __fd);
172*8d67ca89SAndroid Build Coastguard Worker int ptsname_r(int __fd, char* _Nonnull __buf, size_t __n);
173*8d67ca89SAndroid Build Coastguard Worker int unlockpt(int __fd);
174*8d67ca89SAndroid Build Coastguard Worker 
175*8d67ca89SAndroid Build Coastguard Worker 
176*8d67ca89SAndroid Build Coastguard Worker #if __BIONIC_AVAILABILITY_GUARD(26)
177*8d67ca89SAndroid Build Coastguard Worker int getsubopt(char* _Nonnull * _Nonnull __option, char* _Nonnull const* _Nonnull __tokens, char* _Nullable * _Nonnull __value_ptr) __INTRODUCED_IN(26);
178*8d67ca89SAndroid Build Coastguard Worker #endif /* __BIONIC_AVAILABILITY_GUARD(26) */
179*8d67ca89SAndroid Build Coastguard Worker 
180*8d67ca89SAndroid Build Coastguard Worker 
181*8d67ca89SAndroid Build Coastguard Worker typedef struct {
182*8d67ca89SAndroid Build Coastguard Worker   int quot;
183*8d67ca89SAndroid Build Coastguard Worker   int rem;
184*8d67ca89SAndroid Build Coastguard Worker } div_t;
185*8d67ca89SAndroid Build Coastguard Worker 
186*8d67ca89SAndroid Build Coastguard Worker div_t div(int __numerator, int __denominator) __attribute_const__;
187*8d67ca89SAndroid Build Coastguard Worker 
188*8d67ca89SAndroid Build Coastguard Worker typedef struct {
189*8d67ca89SAndroid Build Coastguard Worker   long int quot;
190*8d67ca89SAndroid Build Coastguard Worker   long int rem;
191*8d67ca89SAndroid Build Coastguard Worker } ldiv_t;
192*8d67ca89SAndroid Build Coastguard Worker 
193*8d67ca89SAndroid Build Coastguard Worker ldiv_t ldiv(long __numerator, long __denominator) __attribute_const__;
194*8d67ca89SAndroid Build Coastguard Worker 
195*8d67ca89SAndroid Build Coastguard Worker typedef struct {
196*8d67ca89SAndroid Build Coastguard Worker   long long int quot;
197*8d67ca89SAndroid Build Coastguard Worker   long long int rem;
198*8d67ca89SAndroid Build Coastguard Worker } lldiv_t;
199*8d67ca89SAndroid Build Coastguard Worker 
200*8d67ca89SAndroid Build Coastguard Worker lldiv_t lldiv(long long __numerator, long long __denominator) __attribute_const__;
201*8d67ca89SAndroid Build Coastguard Worker 
202*8d67ca89SAndroid Build Coastguard Worker /**
203*8d67ca89SAndroid Build Coastguard Worker  * [getloadavg(3)](https://man7.org/linux/man-pages/man3/getloadavg.3.html) queries the
204*8d67ca89SAndroid Build Coastguard Worker  * number of runnable processes averaged over time. The Linux kernel supports averages
205*8d67ca89SAndroid Build Coastguard Worker  * over the last 1, 5, and 15 minutes.
206*8d67ca89SAndroid Build Coastguard Worker  *
207*8d67ca89SAndroid Build Coastguard Worker  * Returns the number of samples written to `__averages` (at most 3), and returns -1 on failure.
208*8d67ca89SAndroid Build Coastguard Worker  */
209*8d67ca89SAndroid Build Coastguard Worker 
210*8d67ca89SAndroid Build Coastguard Worker #if __BIONIC_AVAILABILITY_GUARD(29)
211*8d67ca89SAndroid Build Coastguard Worker int getloadavg(double __averages[_Nonnull], int __n) __INTRODUCED_IN(29);
212*8d67ca89SAndroid Build Coastguard Worker #endif /* __BIONIC_AVAILABILITY_GUARD(29) */
213*8d67ca89SAndroid Build Coastguard Worker 
214*8d67ca89SAndroid Build Coastguard Worker 
215*8d67ca89SAndroid Build Coastguard Worker /* BSD compatibility. */
216*8d67ca89SAndroid Build Coastguard Worker const char* _Nullable getprogname(void);
217*8d67ca89SAndroid Build Coastguard Worker void setprogname(const char* _Nonnull __name);
218*8d67ca89SAndroid Build Coastguard Worker 
219*8d67ca89SAndroid Build Coastguard Worker 
220*8d67ca89SAndroid Build Coastguard Worker #if __BIONIC_AVAILABILITY_GUARD(26)
221*8d67ca89SAndroid Build Coastguard Worker int mblen(const char* _Nullable __s, size_t __n) __INTRODUCED_IN(26);
222*8d67ca89SAndroid Build Coastguard Worker #endif /* __BIONIC_AVAILABILITY_GUARD(26) */
223*8d67ca89SAndroid Build Coastguard Worker 
224*8d67ca89SAndroid Build Coastguard Worker size_t mbstowcs(wchar_t* _Nullable __dst, const char* _Nullable __src, size_t __n);
225*8d67ca89SAndroid Build Coastguard Worker int mbtowc(wchar_t* _Nullable __wc_ptr, const char*  _Nullable __s, size_t __n);
226*8d67ca89SAndroid Build Coastguard Worker int wctomb(char* _Nullable __dst, wchar_t __wc);
227*8d67ca89SAndroid Build Coastguard Worker 
228*8d67ca89SAndroid Build Coastguard Worker size_t wcstombs(char* _Nullable __dst, const wchar_t* _Nullable __src, size_t __n);
229*8d67ca89SAndroid Build Coastguard Worker 
230*8d67ca89SAndroid Build Coastguard Worker size_t __ctype_get_mb_cur_max(void);
231*8d67ca89SAndroid Build Coastguard Worker #define MB_CUR_MAX __ctype_get_mb_cur_max()
232*8d67ca89SAndroid Build Coastguard Worker 
233*8d67ca89SAndroid Build Coastguard Worker #if defined(__BIONIC_INCLUDE_FORTIFY_HEADERS)
234*8d67ca89SAndroid Build Coastguard Worker #include <bits/fortify/stdlib.h>
235*8d67ca89SAndroid Build Coastguard Worker #endif
236*8d67ca89SAndroid Build Coastguard Worker 
237*8d67ca89SAndroid Build Coastguard Worker int abs(int __x) __attribute_const__;
238*8d67ca89SAndroid Build Coastguard Worker long labs(long __x) __attribute_const__;
239*8d67ca89SAndroid Build Coastguard Worker long long llabs(long long __x) __attribute_const__;
240*8d67ca89SAndroid Build Coastguard Worker 
241*8d67ca89SAndroid Build Coastguard Worker int rand(void);
242*8d67ca89SAndroid Build Coastguard Worker void srand(unsigned int __seed);
243*8d67ca89SAndroid Build Coastguard Worker long random(void);
244*8d67ca89SAndroid Build Coastguard Worker void srandom(unsigned int __seed);
245*8d67ca89SAndroid Build Coastguard Worker int grantpt(int __fd);
246*8d67ca89SAndroid Build Coastguard Worker 
247*8d67ca89SAndroid Build Coastguard Worker /**
248*8d67ca89SAndroid Build Coastguard Worker  * [atof(3)](https://man7.org/linux/man-pages/man3/atof.3.html) converts a
249*8d67ca89SAndroid Build Coastguard Worker  * string to a double.
250*8d67ca89SAndroid Build Coastguard Worker  *
251*8d67ca89SAndroid Build Coastguard Worker  * Returns the double; use strtof() or strtod() if you need to detect errors.
252*8d67ca89SAndroid Build Coastguard Worker  */
253*8d67ca89SAndroid Build Coastguard Worker double atof(const char* _Nonnull __s) __attribute_pure__;
254*8d67ca89SAndroid Build Coastguard Worker 
255*8d67ca89SAndroid Build Coastguard Worker /**
256*8d67ca89SAndroid Build Coastguard Worker  * [atoi(3)](https://man7.org/linux/man-pages/man3/atoi.3.html) converts a
257*8d67ca89SAndroid Build Coastguard Worker  * string to an int.
258*8d67ca89SAndroid Build Coastguard Worker  *
259*8d67ca89SAndroid Build Coastguard Worker  * Returns the int or 0 on error; use strtol() if you need to detect errors.
260*8d67ca89SAndroid Build Coastguard Worker  */
261*8d67ca89SAndroid Build Coastguard Worker int atoi(const char* _Nonnull __s) __attribute_pure__;
262*8d67ca89SAndroid Build Coastguard Worker 
263*8d67ca89SAndroid Build Coastguard Worker /**
264*8d67ca89SAndroid Build Coastguard Worker  * [atol(3)](https://man7.org/linux/man-pages/man3/atol.3.html) converts a
265*8d67ca89SAndroid Build Coastguard Worker  * string to a long.
266*8d67ca89SAndroid Build Coastguard Worker  *
267*8d67ca89SAndroid Build Coastguard Worker  * Returns the long or 0 on error; use strtol() if you need to detect errors.
268*8d67ca89SAndroid Build Coastguard Worker  */
269*8d67ca89SAndroid Build Coastguard Worker long atol(const char* _Nonnull __s) __attribute_pure__;
270*8d67ca89SAndroid Build Coastguard Worker 
271*8d67ca89SAndroid Build Coastguard Worker /**
272*8d67ca89SAndroid Build Coastguard Worker  * [atoll(3)](https://man7.org/linux/man-pages/man3/atoll.3.html) converts a
273*8d67ca89SAndroid Build Coastguard Worker  * string to a long long.
274*8d67ca89SAndroid Build Coastguard Worker  *
275*8d67ca89SAndroid Build Coastguard Worker  * Returns the long long or 0 on error; use strtol() if you need to detect errors.
276*8d67ca89SAndroid Build Coastguard Worker  */
277*8d67ca89SAndroid Build Coastguard Worker long long atoll(const char* _Nonnull __s) __attribute_pure__;
278*8d67ca89SAndroid Build Coastguard Worker 
279*8d67ca89SAndroid Build Coastguard Worker /**
280*8d67ca89SAndroid Build Coastguard Worker  * [strtol(3)](https://man7.org/linux/man-pages/man3/strtol.3.html) converts a
281*8d67ca89SAndroid Build Coastguard Worker  * string to a long.
282*8d67ca89SAndroid Build Coastguard Worker  *
283*8d67ca89SAndroid Build Coastguard Worker  * Returns the long.
284*8d67ca89SAndroid Build Coastguard Worker  * `__end_ptr` is set to the last character in `__s` that was converted.
285*8d67ca89SAndroid Build Coastguard Worker  * errno is set to ERANGE if the result overflowed or underflowed.
286*8d67ca89SAndroid Build Coastguard Worker  */
287*8d67ca89SAndroid Build Coastguard Worker long strtol(const char* _Nonnull __s, char* _Nullable * _Nullable __end_ptr, int __base);
288*8d67ca89SAndroid Build Coastguard Worker 
289*8d67ca89SAndroid Build Coastguard Worker /** Equivalent to strtol() on Android. */
290*8d67ca89SAndroid Build Coastguard Worker long strtol_l(const char* _Nonnull __s, char* _Nullable * _Nullable __end_ptr, int, locale_t _Nonnull __l) __RENAME(strtol);
291*8d67ca89SAndroid Build Coastguard Worker 
292*8d67ca89SAndroid Build Coastguard Worker /**
293*8d67ca89SAndroid Build Coastguard Worker  * [strtoll(3)](https://man7.org/linux/man-pages/man3/strtoll.3.html) converts a
294*8d67ca89SAndroid Build Coastguard Worker  * string to a long long.
295*8d67ca89SAndroid Build Coastguard Worker  *
296*8d67ca89SAndroid Build Coastguard Worker  * Returns the long long.
297*8d67ca89SAndroid Build Coastguard Worker  * `__end_ptr` is set to the last character in `__s` that was converted.
298*8d67ca89SAndroid Build Coastguard Worker  * errno is set to ERANGE if the result overflowed or underflowed.
299*8d67ca89SAndroid Build Coastguard Worker  */
300*8d67ca89SAndroid Build Coastguard Worker long long strtoll(const char* _Nonnull __s, char* _Nullable * _Nullable __end_ptr, int __base);
301*8d67ca89SAndroid Build Coastguard Worker 
302*8d67ca89SAndroid Build Coastguard Worker /** Equivalent to strtoll() on Android. */
303*8d67ca89SAndroid Build Coastguard Worker long long strtoll_l(const char* _Nonnull __s, char* _Nullable * _Nullable __end_ptr, int __base, locale_t _Nonnull __l);
304*8d67ca89SAndroid Build Coastguard Worker 
305*8d67ca89SAndroid Build Coastguard Worker /**
306*8d67ca89SAndroid Build Coastguard Worker  * [strtoul(3)](https://man7.org/linux/man-pages/man3/strtoul.3.html) converts a
307*8d67ca89SAndroid Build Coastguard Worker  * string to an unsigned long.
308*8d67ca89SAndroid Build Coastguard Worker  *
309*8d67ca89SAndroid Build Coastguard Worker  * Returns the unsigned long.
310*8d67ca89SAndroid Build Coastguard Worker  * `__end_ptr` is set to the last character in `__s` that was converted.
311*8d67ca89SAndroid Build Coastguard Worker  * errno is set to ERANGE if the result overflowed or underflowed.
312*8d67ca89SAndroid Build Coastguard Worker  */
313*8d67ca89SAndroid Build Coastguard Worker unsigned long strtoul(const char* _Nonnull __s, char* _Nullable * _Nullable __end_ptr, int __base);
314*8d67ca89SAndroid Build Coastguard Worker 
315*8d67ca89SAndroid Build Coastguard Worker /** Equivalent to strtoul() on Android. */
316*8d67ca89SAndroid Build Coastguard Worker unsigned long strtoul_l(const char* _Nonnull __s, char* _Nullable * _Nullable __end_ptr, int __base, locale_t _Nonnull __l) __RENAME(strtoul);
317*8d67ca89SAndroid Build Coastguard Worker 
318*8d67ca89SAndroid Build Coastguard Worker /**
319*8d67ca89SAndroid Build Coastguard Worker  * [strtoull(3)](https://man7.org/linux/man-pages/man3/strtoull.3.html) converts a
320*8d67ca89SAndroid Build Coastguard Worker  * string to an unsigned long long.
321*8d67ca89SAndroid Build Coastguard Worker  *
322*8d67ca89SAndroid Build Coastguard Worker  * Returns the unsigned long long.
323*8d67ca89SAndroid Build Coastguard Worker  * `__end_ptr` is set to the last character in `__s` that was converted.
324*8d67ca89SAndroid Build Coastguard Worker  * errno is set to ERANGE if the result overflowed or underflowed.
325*8d67ca89SAndroid Build Coastguard Worker  */
326*8d67ca89SAndroid Build Coastguard Worker unsigned long long strtoull(const char* _Nonnull __s, char* _Nullable * _Nullable __end_ptr, int __base);
327*8d67ca89SAndroid Build Coastguard Worker 
328*8d67ca89SAndroid Build Coastguard Worker /** Equivalent to strtoull() on Android. */
329*8d67ca89SAndroid Build Coastguard Worker unsigned long long strtoull_l(const char* _Nonnull __s, char* _Nullable * _Nullable __end_ptr, int __base, locale_t _Nonnull __l);
330*8d67ca89SAndroid Build Coastguard Worker 
331*8d67ca89SAndroid Build Coastguard Worker /**
332*8d67ca89SAndroid Build Coastguard Worker  * [strtof(3)](https://man7.org/linux/man-pages/man3/strtof.3.html) converts a
333*8d67ca89SAndroid Build Coastguard Worker  * string to a float.
334*8d67ca89SAndroid Build Coastguard Worker  *
335*8d67ca89SAndroid Build Coastguard Worker  * Returns the float.
336*8d67ca89SAndroid Build Coastguard Worker  * `__end_ptr` is set to the last character in `__s` that was converted.
337*8d67ca89SAndroid Build Coastguard Worker  * errno is set to ERANGE if the result overflowed or underflowed.
338*8d67ca89SAndroid Build Coastguard Worker  */
339*8d67ca89SAndroid Build Coastguard Worker float strtof(const char* _Nonnull __s, char* _Nullable * _Nullable __end_ptr);
340*8d67ca89SAndroid Build Coastguard Worker 
341*8d67ca89SAndroid Build Coastguard Worker /**
342*8d67ca89SAndroid Build Coastguard Worker  * [strtod(3)](https://man7.org/linux/man-pages/man3/strtod.3.html) converts a
343*8d67ca89SAndroid Build Coastguard Worker  * string to a double.
344*8d67ca89SAndroid Build Coastguard Worker  *
345*8d67ca89SAndroid Build Coastguard Worker  * Returns the double.
346*8d67ca89SAndroid Build Coastguard Worker  * `__end_ptr` is set to the last character in `__s` that was converted.
347*8d67ca89SAndroid Build Coastguard Worker  * errno is set to ERANGE if the result overflowed or underflowed.
348*8d67ca89SAndroid Build Coastguard Worker  */
349*8d67ca89SAndroid Build Coastguard Worker double strtod(const char* _Nonnull __s, char* _Nullable * _Nullable __end_ptr);
350*8d67ca89SAndroid Build Coastguard Worker 
351*8d67ca89SAndroid Build Coastguard Worker /**
352*8d67ca89SAndroid Build Coastguard Worker  * [strtold(3)](https://man7.org/linux/man-pages/man3/strtold.3.html) converts a
353*8d67ca89SAndroid Build Coastguard Worker  * string to a long double.
354*8d67ca89SAndroid Build Coastguard Worker  *
355*8d67ca89SAndroid Build Coastguard Worker  * Returns the long double.
356*8d67ca89SAndroid Build Coastguard Worker  * `__end_ptr` is set to the last character in `__s` that was converted.
357*8d67ca89SAndroid Build Coastguard Worker  * errno is set to ERANGE if the result overflowed or underflowed.
358*8d67ca89SAndroid Build Coastguard Worker  */
359*8d67ca89SAndroid Build Coastguard Worker long double strtold(const char* _Nonnull __s, char* _Nullable * _Nullable __end_ptr);
360*8d67ca89SAndroid Build Coastguard Worker 
361*8d67ca89SAndroid Build Coastguard Worker /** Equivalent to strtold() on Android. */
362*8d67ca89SAndroid Build Coastguard Worker long double strtold_l(const char* _Nonnull __s, char* _Nullable * _Nullable __end_ptr, locale_t _Nonnull __l);
363*8d67ca89SAndroid Build Coastguard Worker 
364*8d67ca89SAndroid Build Coastguard Worker #if __ANDROID_API__ >= 26
365*8d67ca89SAndroid Build Coastguard Worker /** Equivalent to strtod() on Android. */
366*8d67ca89SAndroid Build Coastguard Worker double strtod_l(const char* _Nonnull __s, char* _Nullable * _Nullable __end_ptr, locale_t _Nonnull __l) __INTRODUCED_IN(26);
367*8d67ca89SAndroid Build Coastguard Worker /** Equivalent to strtof() on Android. */
368*8d67ca89SAndroid Build Coastguard Worker float strtof_l(const char* _Nonnull __s, char* _Nullable * _Nullable __end_ptr, locale_t _Nonnull __l) __INTRODUCED_IN(26);
369*8d67ca89SAndroid Build Coastguard Worker #else
370*8d67ca89SAndroid Build Coastguard Worker // Implemented as static inlines before 26.
371*8d67ca89SAndroid Build Coastguard Worker #endif
372*8d67ca89SAndroid Build Coastguard Worker 
373*8d67ca89SAndroid Build Coastguard Worker __END_DECLS
374*8d67ca89SAndroid Build Coastguard Worker 
375*8d67ca89SAndroid Build Coastguard Worker #include <android/legacy_stdlib_inlines.h>
376*8d67ca89SAndroid Build Coastguard Worker 
377*8d67ca89SAndroid Build Coastguard Worker #endif /* _STDLIB_H */
378