From bd5969fc876a10b18613302db7087ef3c40f18e1 Mon Sep 17 00:00:00 2001 From: Ian Moffett Date: Thu, 7 Mar 2024 17:28:00 -0500 Subject: lib: Add mlibc Signed-off-by: Ian Moffett --- lib/mlibc/options/ansi/include/stdlib.h | 128 ++++++++++++++++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 lib/mlibc/options/ansi/include/stdlib.h (limited to 'lib/mlibc/options/ansi/include/stdlib.h') diff --git a/lib/mlibc/options/ansi/include/stdlib.h b/lib/mlibc/options/ansi/include/stdlib.h new file mode 100644 index 0000000..d0e916a --- /dev/null +++ b/lib/mlibc/options/ansi/include/stdlib.h @@ -0,0 +1,128 @@ +#ifndef _STDLIB_H +#define _STDLIB_H + +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +// [7.22] General utilities + +typedef struct { + int quot, rem; +} div_t; + +typedef struct { + long quot, rem; +} ldiv_t; + +typedef struct { + long long quot, rem; +} lldiv_t; + +#define EXIT_FAILURE 1 +#define EXIT_SUCCESS 0 + +#define RAND_MAX 0x7FFFFFFF + +// TODO: this should not be a compile-time constant +#define MB_CUR_MAX 4 + +#ifndef __MLIBC_ABI_ONLY + +// [7.22.1] Numeric conversion functions + +double atof(const char *string); +int atoi(const char *string); +long atol(const char *string); +long long atoll(const char *string); +double strtod(const char *__restrict string, char **__restrict end); +float strtof(const char *__restrict string, char **__restrict end); +long double strtold(const char *__restrict string, char **__restrict end); +long strtol(const char *__restrict string, char **__restrict end, int base); +long long strtoll(const char *__restrict string, char **__restrict end, int base); +unsigned long strtoul(const char *__restrict string, char **__restrict end, int base); +unsigned long long strtoull(const char *__restrict string, char **__restrict end, int base); + +// [7.22.2] Pseudo-random sequence generation functions + +int rand(void); +int rand_r(unsigned *); +void srand(unsigned int); + +// [7.22.3] Memory management functions + +void *aligned_alloc(size_t alignment, size_t size); +void *calloc(size_t count, size_t size); +void free(void *pointer); +void *malloc(size_t size); +void *realloc(void *pointer, size_t size); + +int posix_memalign(void **, size_t, size_t); + +// [7.22.4] Communication with the environment + +__attribute__((__noreturn__)) void abort(void); +int atexit(void (*func)(void)); +int at_quick_exit(void (*func)(void)); +__attribute__((__noreturn__)) void exit(int status); +__attribute__((__noreturn__)) void _Exit(int status); +char *getenv(const char *name); +__attribute__((__noreturn__)) void quick_exit(int status); +int system(const char *string); + +// GLIBC extension. +char *mktemp(char *); + +// [7.22.5] Searching and sorting utilities + +void *bsearch(const void *key, const void *base, size_t count, size_t size, + int (*compare)(const void *, const void *)); +void qsort(void *base, size_t count, size_t size, + int (*compare)(const void *, const void *)); +void qsort_r(void *base, size_t nmemb, size_t size, + int (*compar)(const void *, const void *, void *), + void *arg); + +// [7.22.6] Integer arithmetic functions + +int abs(int number); +long labs(long number); +long long llabs(long long number); + +div_t div(int number, int denom); +ldiv_t ldiv(long number, long denom); +lldiv_t lldiv(long long number, long long denom); + +// [7.22.7] Multibyte character conversion functions + +int mblen(const char *, size_t); +int mbtowc(wchar_t *__restrict wc, const char *__restrict mb_chr, size_t max_size); +int wctomb(char *mb_chr, wchar_t wc); + +// [7.22.8] Multibyte string conversion functions + +size_t mbstowcs(wchar_t *__restrict wc_string, const char *__restrict mb_string, size_t max_size); +size_t wcstombs(char *mb_string, const wchar_t *__restrict wc_string, size_t max_size); + +#endif /* !__MLIBC_ABI_ONLY */ + +#if __MLIBC_GLIBC_OPTION +typedef int (*comparison_fn_t) (const void *, const void *); +#endif + +#ifdef __cplusplus +} +#endif + +#if __MLIBC_POSIX_OPTION +# include +#endif + +#endif // _STDLIB_H + -- cgit v1.2.3