xref: /rk3399_ARM-atf/include/lib/libc/stdlib.h (revision 27989a8e34a44ff8e6a2e5b011123a09fd8a82c7)
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