#ifndef _STDLIB_H #define _STDLIB_H #ifdef __wasilibc_unmodified_upstream /* Use alternate WASI libc headers */ #else #include <__functions_malloc.h> #include <__header_stdlib.h> #endif #ifdef __cplusplus extern "C" { #endif #include #ifdef __wasilibc_unmodified_upstream /* Use the compiler's definition of NULL */ #if __cplusplus >= 201103L #define NULL nullptr #elif defined(__cplusplus) #define NULL 0L #else #define NULL ((void*)0) #endif #else #define __need_NULL #include #endif #define __NEED_size_t #define __NEED_wchar_t #include int atoi (const char *); long atol (const char *); long long atoll (const char *); double atof (const char *); float strtof (const char *__restrict, char **__restrict); double strtod (const char *__restrict, char **__restrict); long double strtold (const char *__restrict, char **__restrict); long strtol (const char *__restrict, char **__restrict, int); unsigned long strtoul (const char *__restrict, char **__restrict, int); long long strtoll (const char *__restrict, char **__restrict, int); unsigned long long strtoull (const char *__restrict, char **__restrict, int); int rand (void); void srand (unsigned); #ifdef __wasilibc_unmodified_upstream /* Use alternate WASI libc headers */ void *malloc (size_t); void *calloc (size_t, size_t); void *realloc (void *, size_t); void free (void *); #endif void *aligned_alloc(size_t, size_t); _Noreturn void abort (void); int atexit (void (*) (void)); _Noreturn void exit (int); _Noreturn void _Exit (int); int at_quick_exit (void (*) (void)); _Noreturn void quick_exit (int); char *getenv (const char *); int system (const char *); void *bsearch (const void *, const void *, size_t, size_t, int (*)(const void *, const void *)); void qsort (void *, size_t, size_t, int (*)(const void *, const void *)); int abs (int); long labs (long); long long llabs (long long); typedef struct { int quot, rem; } div_t; typedef struct { long quot, rem; } ldiv_t; typedef struct { long long quot, rem; } lldiv_t; div_t div (int, int); ldiv_t ldiv (long, long); lldiv_t lldiv (long long, long long); int mblen (const char *, size_t); int mbtowc (wchar_t *__restrict, const char *__restrict, size_t); int wctomb (char *, wchar_t); size_t mbstowcs (wchar_t *__restrict, const char *__restrict, size_t); size_t wcstombs (char *__restrict, const wchar_t *__restrict, size_t); #define EXIT_FAILURE 1 #define EXIT_SUCCESS 0 size_t __ctype_get_mb_cur_max(void); #define MB_CUR_MAX (__ctype_get_mb_cur_max()) #define RAND_MAX (0x7fffffff) #if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \ || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \ || defined(_BSD_SOURCE) #ifdef __wasilibc_unmodified_upstream /* WASI has no wait */ #define WNOHANG 1 #define WUNTRACED 2 #define WEXITSTATUS(s) (((s) & 0xff00) >> 8) #define WTERMSIG(s) ((s) & 0x7f) #define WSTOPSIG(s) WEXITSTATUS(s) #define WIFEXITED(s) (!WTERMSIG(s)) #define WIFSTOPPED(s) ((short)((((s)&0xffff)*0x10001)>>8) > 0x7f00) #define WIFSIGNALED(s) (((s)&0xffff)-1U < 0xffu) #endif int posix_memalign (void **, size_t, size_t); int setenv (const char *, const char *, int); int unsetenv (const char *); #ifdef __wasilibc_unmodified_upstream /* WASI has no temp directories */ int mkstemp (char *); int mkostemp (char *, int); char *mkdtemp (char *); #endif int getsubopt (char **, char *const *, char **); int rand_r (unsigned *); #endif #if defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \ || defined(_BSD_SOURCE) char *realpath (const char *__restrict, char *__restrict); long int random (void); void srandom (unsigned int); char *initstate (unsigned int, char *, size_t); char *setstate (char *); int putenv (char *); #ifdef __wasilibc_unmodified_upstream /* WASI has no pseudo-terminals */ int posix_openpt (int); int grantpt (int); int unlockpt (int); char *ptsname (int); #endif char *l64a (long); long a64l (const char *); void setkey (const char *); double drand48 (void); double erand48 (unsigned short [3]); long int lrand48 (void); long int nrand48 (unsigned short [3]); long mrand48 (void); long jrand48 (unsigned short [3]); void srand48 (long); unsigned short *seed48 (unsigned short [3]); void lcong48 (unsigned short [7]); #endif #if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) #include #ifdef __wasilibc_unmodified_upstream /* WASI has no temp directories */ char *mktemp (char *); int mkstemps (char *, int); int mkostemps (char *, int, int); #endif #ifdef __wasilibc_unmodified_upstream /* WASI libc doesn't build the legacy functions */ void *valloc (size_t); void *memalign(size_t, size_t); int getloadavg(double *, int); #endif int clearenv(void); #ifdef __wasilibc_unmodified_upstream /* WASI has no wait */ #define WCOREDUMP(s) ((s) & 0x80) #define WIFCONTINUED(s) ((s) == 0xffff) void *reallocarray (void *, size_t, size_t); void qsort_r (void *, size_t, size_t, int (*)(const void *, const void *, void *), void *); #endif #endif #ifdef _GNU_SOURCE #ifdef __wasilibc_unmodified_upstream /* WASI has no pseudo-terminals */ int ptsname_r(int, char *, size_t); #endif char *ecvt(double, int, int *, int *); char *fcvt(double, int, int *, int *); char *gcvt(double, int, char *); char *secure_getenv(const char *); struct __locale_struct; float strtof_l(const char *__restrict, char **__restrict, struct __locale_struct *); double strtod_l(const char *__restrict, char **__restrict, struct __locale_struct *); long double strtold_l(const char *__restrict, char **__restrict, struct __locale_struct *); #endif #ifdef __wasilibc_unmodified_upstream /* WASI has no temp directories */ #if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE) #define mkstemp64 mkstemp #define mkostemp64 mkostemp #if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) #define mkstemps64 mkstemps #define mkostemps64 mkostemps #endif #endif #endif #ifdef __wasilibc_unmodified_upstream /* Declare arc4random functions */ #else #if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) #include uint32_t arc4random(void); void arc4random_buf(void *, size_t); uint32_t arc4random_uniform(uint32_t); #endif #endif #ifdef __cplusplus } #endif #endif