blob: 6aec2b371918d087d2f334ee97f83ee954f2a4cc [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 */
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
21typedef struct {
22 int quot, rem;
23} div_t;
24
25typedef struct {
26 long quot, rem;
27} ldiv_t;
28
29typedef struct {
30 long long quot, rem;
31} lldiv_t;
32
33extern double atof(const char *nptr);
34extern int atoi(const char *nptr);
35extern long int atol(const char *nptr);
36extern long long int atoll(const char *nptr);
37extern double strtod(const char * restrict nptr, char ** restrict endptr);
38extern float strtof(const char * restrict nptr, char ** restrict endptr);
39extern long double strtold(const char * restrict nptr, char ** restrict endptr);
40extern long int strtol(const char * restrict nptr, char ** restrict endptr, int base);
41extern long long int strtoll(const char * restrict nptr, char ** restrict endptr,
42 int base);
43extern unsigned long int strtoul(const char * restrict nptr, char ** restrict endptr,
44 int base);
45extern unsigned long long int strtoull(const char * restrict nptr,
46 char ** restrict endptr, int base);
47extern int rand(void);
48extern void srand(unsigned int seed);
49extern void *calloc(size_t nmemb, size_t size);
50extern void free(void *ptr);
51extern void *malloc(size_t size);
52extern void *realloc(void *ptr, size_t size);
53extern void abort(void);
54extern int atexit(void (*func)(void));
55extern void exit(int status);
56extern void _Exit(int status);
57extern char *getenv(const char *name);
58extern int system(const char *string);
59extern void *bsearch(const void *key, const void *base, size_t nmemb, size_t size,
60 int (*compar)(const void *, const void *));
61extern void qsort(void *base, size_t nmemb, size_t size,
62 int (*compar)(const void *, const void *));
63extern int abs(int j);
64extern long int labs(long int j);
65extern long long int llabs(long long int j);
66extern div_t div(int numer, int denom);
67extern ldiv_t ldiv(long int numer, long int denom);
68extern lldiv_t lldiv(long long int numer, long long int denom);
69extern int mblen(const char *s, size_t n);
70extern int mbtowc(wchar_t * restrict pwc, const char * restrict s, size_t n);
71extern int wctomb(char *s, wchar_t wchar);
72extern size_t mbstowcs(wchar_t * restrict pwcs, const char * restrict s, size_t n);
73extern size_t wcstombs(char * restrict s, const wchar_t * restrict pwcs, size_t n);
74
75#ifdef __USE_MACROS
76extern int __abs;
77extern long __labs;
78extern 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