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