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