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