111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/*
211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Copyright (C) 2008 The Android Open Source Project
311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * All rights reserved.
411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert *
511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Redistribution and use in source and binary forms, with or without
611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * modification, are permitted provided that the following conditions
711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * are met:
811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert *  * Redistributions of source code must retain the above copyright
911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert *    notice, this list of conditions and the following disclaimer.
1011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert *  * Redistributions in binary form must reproduce the above copyright
1111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert *    notice, this list of conditions and the following disclaimer in
1211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert *    the documentation and/or other materials provided with the
1311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert *    distribution.
1411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert *
1511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
1611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
1711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
1811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
1911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
2011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
2111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
2211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
2311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
2411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
2511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
2611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * SUCH DAMAGE.
2711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */
2811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifndef _STDLIB_H_
2911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define _STDLIB_H_
3011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
3111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <sys/cdefs.h>
3211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
3311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <stddef.h>
3411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <string.h>
3511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <alloca.h>
3611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <strings.h>
3711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <memory.h>
3811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
3911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert__BEGIN_DECLS
4011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
4111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define EXIT_FAILURE 1
4211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define EXIT_SUCCESS 0
4311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
4411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertextern __noreturn void abort(void);
4511cd02dfb91661c65134cac258cf5924270e9d2Dan Albertextern __noreturn void exit(int);
4611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertextern __noreturn void _Exit(int);
4711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertextern int atexit(void (*)(void));
4811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
4911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if __ISO_C_VISIBLE >= 2011 || __cplusplus >= 201103L
5011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertint at_quick_exit(void (*)(void));
5111cd02dfb91661c65134cac258cf5924270e9d2Dan Albertvoid quick_exit(int) __noreturn;
5211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif
5311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
5411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertextern char* getenv(const char*);
5511cd02dfb91661c65134cac258cf5924270e9d2Dan Albertextern int putenv(char*);
5611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertextern int setenv(const char*, const char*, int);
5711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertextern int unsetenv(const char*);
5811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertextern int clearenv(void);
5911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
6011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertextern char* mkdtemp(char*);
6111cd02dfb91661c65134cac258cf5924270e9d2Dan Albertextern char* mktemp(char*) __warnattr("mktemp possibly used unsafely; consider using mkstemp");
6211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertextern int mkstemp(char*);
6311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertextern int mkstemp64(char*);
6411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
6511cd02dfb91661c65134cac258cf5924270e9d2Dan Albertextern long strtol(const char *, char **, int);
6611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertextern long long strtoll(const char *, char **, int);
6711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertextern unsigned long strtoul(const char *, char **, int);
6811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertextern unsigned long long strtoull(const char *, char **, int);
6911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
7011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertextern int posix_memalign(void **memptr, size_t alignment, size_t size);
7111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
7211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertextern double atof(const char*) __NDK_FPABI__;
7311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
7411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertextern double strtod(const char*, char**) __LIBC_ABI_PUBLIC__ __NDK_FPABI__;
7511cd02dfb91661c65134cac258cf5924270e9d2Dan Albertextern float strtof(const char*, char**) __LIBC_ABI_PUBLIC__ __NDK_FPABI__;
7611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertextern long double strtold(const char*, char**) __LIBC_ABI_PUBLIC__ __NDK_FPABI__;
7711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
7811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertextern long double strtold_l(const char *, char **, locale_t) __LIBC_ABI_PUBLIC__ __NDK_FPABI__;
7911cd02dfb91661c65134cac258cf5924270e9d2Dan Albertextern long long strtoll_l(const char *, char **, int, locale_t) __LIBC_ABI_PUBLIC__;
8011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertextern unsigned long long strtoull_l(const char *, char **, int, locale_t) __LIBC_ABI_PUBLIC__;
8111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
8211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertextern int atoi(const char*) __purefunc;
8311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertextern long atol(const char*) __purefunc;
8411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertextern long long atoll(const char*) __purefunc;
8511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
8611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertextern int abs(int) __pure2;
8711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertextern long labs(long) __pure2;
8811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertextern long long llabs(long long) __pure2;
8911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
9011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertextern char * realpath(const char *path, char *resolved);
9111cd02dfb91661c65134cac258cf5924270e9d2Dan Albertextern int system(const char * string);
9211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
9311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertextern void * bsearch(const void *key, const void *base0,
9411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert	size_t nmemb, size_t size,
9511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert	int (*compar)(const void *, const void *));
9611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
9711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertextern void qsort(void *, size_t, size_t, int (*)(const void *, const void *));
9811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
9911cd02dfb91661c65134cac258cf5924270e9d2Dan Albertextern long jrand48(unsigned short *);
10011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertextern long mrand48(void);
10111cd02dfb91661c65134cac258cf5924270e9d2Dan Albertextern long nrand48(unsigned short *);
10211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertextern long lrand48(void);
10311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertextern unsigned short *seed48(unsigned short*);
10411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertextern double erand48(unsigned short xsubi[3]) __NDK_FPABI__;
10511cd02dfb91661c65134cac258cf5924270e9d2Dan Albertextern double drand48(void) __NDK_FPABI__;
10611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertextern void srand48(long);
10711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
10811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertunsigned int arc4random(void);
10911cd02dfb91661c65134cac258cf5924270e9d2Dan Albertunsigned int arc4random_uniform(unsigned int);
11011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertvoid arc4random_buf(void*, size_t);
11111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
11211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define RAND_MAX 0x7fffffff
11311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
11411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertint rand(void);
11511cd02dfb91661c65134cac258cf5924270e9d2Dan Albertint rand_r(unsigned int*);
11611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertvoid srand(unsigned int);
11711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
11811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertchar* initstate(unsigned int, char*, size_t);
11911cd02dfb91661c65134cac258cf5924270e9d2Dan Albertlong random(void);
12011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertchar* setstate(char*);
12111cd02dfb91661c65134cac258cf5924270e9d2Dan Albertvoid srandom(unsigned int);
12211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
12311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertint getpt(void);
12411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertint grantpt(int);
12511cd02dfb91661c65134cac258cf5924270e9d2Dan Albertint posix_openpt(int);
12611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertchar* ptsname(int) __warnattr("ptsname is not thread-safe; use ptsname_r instead");
12711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertint ptsname_r(int, char*, size_t);
12811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertint unlockpt(int);
12911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
13011cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct {
13111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int  quot;
13211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int  rem;
13311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} div_t;
13411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
13511cd02dfb91661c65134cac258cf5924270e9d2Dan Albertextern div_t   div(int, int) __pure2;
13611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
13711cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct {
13811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    long int  quot;
13911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    long int  rem;
14011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} ldiv_t;
14111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
14211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertextern ldiv_t   ldiv(long, long) __pure2;
14311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
14411cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct {
14511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    long long int  quot;
14611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    long long int  rem;
14711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} lldiv_t;
14811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
14911cd02dfb91661c65134cac258cf5924270e9d2Dan Albertextern lldiv_t   lldiv(long long, long long) __pure2;
15011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
15111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* BSD compatibility. */
15211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertextern const char* getprogname(void);
15311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertextern void setprogname(const char*);
15411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
15511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* make STLPort happy */
15611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertextern int      mblen(const char *, size_t);
15711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertextern size_t   mbstowcs(wchar_t *, const char *, size_t);
15811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertextern int      mbtowc(wchar_t *, const char *, size_t);
15911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
16011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* Likewise, make libstdc++-v3 happy.  */
16111cd02dfb91661c65134cac258cf5924270e9d2Dan Albertextern int	wctomb(char *, wchar_t);
16211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertextern size_t	wcstombs(char *, const wchar_t *, size_t);
16311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
16411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertextern size_t __ctype_get_mb_cur_max(void);
16511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MB_CUR_MAX __ctype_get_mb_cur_max()
16611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
16711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert__END_DECLS
16811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
16911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif /* _STDLIB_H_ */
170