1 /* 2 * Copyright (c) 2012-2017 Roberto E. Vargas Caballero 3 * 4 * SPDX-License-Identifier: BSD-3-Clause 5 */ 6 /* 7 * Portions copyright (c) 2018, ARM Limited and Contributors. 8 * All rights reserved. 9 */ 10 11 #ifndef _STDLIB_H 12 #define _STDLIB_H 13 14 #include <stdlib_.h> 15 16 #ifndef NULL 17 #define NULL ((void *) 0) 18 #endif 19 20 #define _ATEXIT_MAX 32 21 22 #define MB_CUR_MAX 1 23 #define RAND_MAX 32767 24 25 typedef struct { 26 int quot, rem; 27 } div_t; 28 29 typedef struct { 30 long quot, rem; 31 } ldiv_t; 32 33 typedef struct { 34 long long quot, rem; 35 } lldiv_t; 36 37 extern double atof(const char *nptr); 38 extern int atoi(const char *nptr); 39 extern long int atol(const char *nptr); 40 extern long long int atoll(const char *nptr); 41 extern double strtod(const char * restrict nptr, char ** restrict endptr); 42 extern float strtof(const char * restrict nptr, char ** restrict endptr); 43 extern long double strtold(const char * restrict nptr, char ** restrict endptr); 44 extern long int strtol(const char * restrict nptr, char ** restrict endptr, int base); 45 extern long long int strtoll(const char * restrict nptr, char ** restrict endptr, 46 int base); 47 extern unsigned long int strtoul(const char * restrict nptr, char ** restrict endptr, 48 int base); 49 extern unsigned long long int strtoull(const char * restrict nptr, 50 char ** restrict endptr, int base); 51 extern int rand(void); 52 extern void srand(unsigned int seed); 53 extern void *calloc(size_t nmemb, size_t size); 54 extern void free(void *ptr); 55 extern void *malloc(size_t size); 56 extern void *realloc(void *ptr, size_t size); 57 extern void abort(void); 58 extern int atexit(void (*func)(void)); 59 extern void exit(int status); 60 extern void _Exit(int status); 61 extern char *getenv(const char *name); 62 extern int system(const char *string); 63 extern void *bsearch(const void *key, const void *base, size_t nmemb, size_t size, 64 int (*compar)(const void *, const void *)); 65 extern void qsort(void *base, size_t nmemb, size_t size, 66 int (*compar)(const void *, const void *)); 67 extern int abs(int j); 68 extern long int labs(long int j); 69 extern long long int llabs(long long int j); 70 extern div_t div(int numer, int denom); 71 extern ldiv_t ldiv(long int numer, long int denom); 72 extern lldiv_t lldiv(long long int numer, long long int denom); 73 extern int mblen(const char *s, size_t n); 74 extern int mbtowc(wchar_t * restrict pwc, const char * restrict s, size_t n); 75 extern int wctomb(char *s, wchar_t wchar); 76 extern size_t mbstowcs(wchar_t * restrict pwcs, const char * restrict s, size_t n); 77 extern size_t wcstombs(char * restrict s, const wchar_t * restrict pwcs, size_t n); 78 79 #ifdef __USE_MACROS 80 extern int __abs; 81 extern long __labs; 82 extern long long __llabs; 83 84 #define abs(x) (__abs = (x), (__abs) < 0 ? -__abs : __abs) 85 #define labs(x) (__labs = (x), (__labs) < 0 ? -__labs : __labs) 86 #define llabs(x) (__llabs = (x), (__llabs) < 0 ? -__llabs : __llabs) 87 #endif 88 89 #endif 90