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