blob: 9aff5d0135982045a718c59381c96006dc276a92 [file] [log] [blame]
Antonio Nino Diazcf0f8052018-08-17 10:45:47 +01001/*
2 * Copyright (c) 2012-2017 Roberto E. Vargas Caballero
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
Antonio Nino Diaz6ef16122018-08-15 19:51:09 +01006/*
7 * Portions copyright (c) 2018, ARM Limited and Contributors.
8 * All rights reserved.
9 */
Antonio Nino Diazcf0f8052018-08-17 10:45:47 +010010
11#ifndef _STDLIB_H
12#define _STDLIB_H
13
Antonio Nino Diaz6ef16122018-08-15 19:51:09 +010014#include <stdlib_.h>
Antonio Nino Diazcf0f8052018-08-17 10:45:47 +010015
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
25typedef struct {
26 int quot, rem;
27} div_t;
28
29typedef struct {
30 long quot, rem;
31} ldiv_t;
32
33typedef struct {
34 long long quot, rem;
35} lldiv_t;
36
37extern double atof(const char *nptr);
38extern int atoi(const char *nptr);
39extern long int atol(const char *nptr);
40extern long long int atoll(const char *nptr);
41extern double strtod(const char * restrict nptr, char ** restrict endptr);
42extern float strtof(const char * restrict nptr, char ** restrict endptr);
43extern long double strtold(const char * restrict nptr, char ** restrict endptr);
44extern long int strtol(const char * restrict nptr, char ** restrict endptr, int base);
45extern long long int strtoll(const char * restrict nptr, char ** restrict endptr,
46 int base);
47extern unsigned long int strtoul(const char * restrict nptr, char ** restrict endptr,
48 int base);
49extern unsigned long long int strtoull(const char * restrict nptr,
50 char ** restrict endptr, int base);
51extern int rand(void);
52extern void srand(unsigned int seed);
53extern void *calloc(size_t nmemb, size_t size);
54extern void free(void *ptr);
55extern void *malloc(size_t size);
56extern void *realloc(void *ptr, size_t size);
57extern void abort(void);
58extern int atexit(void (*func)(void));
59extern void exit(int status);
60extern void _Exit(int status);
61extern char *getenv(const char *name);
62extern int system(const char *string);
63extern void *bsearch(const void *key, const void *base, size_t nmemb, size_t size,
64 int (*compar)(const void *, const void *));
65extern void qsort(void *base, size_t nmemb, size_t size,
66 int (*compar)(const void *, const void *));
67extern int abs(int j);
68extern long int labs(long int j);
69extern long long int llabs(long long int j);
70extern div_t div(int numer, int denom);
71extern ldiv_t ldiv(long int numer, long int denom);
72extern lldiv_t lldiv(long long int numer, long long int denom);
73extern int mblen(const char *s, size_t n);
74extern int mbtowc(wchar_t * restrict pwc, const char * restrict s, size_t n);
75extern int wctomb(char *s, wchar_t wchar);
76extern size_t mbstowcs(wchar_t * restrict pwcs, const char * restrict s, size_t n);
77extern size_t wcstombs(char * restrict s, const wchar_t * restrict pwcs, size_t n);
78
79#ifdef __USE_MACROS
80extern int __abs;
81extern long __labs;
82extern 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