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