aboutsummaryrefslogtreecommitdiff
path: root/lib/mlibc/options/ansi/include/stdlib.h
diff options
context:
space:
mode:
authorIan Moffett <ian@osmora.org>2024-03-07 17:28:00 -0500
committerIan Moffett <ian@osmora.org>2024-03-07 17:28:32 -0500
commitbd5969fc876a10b18613302db7087ef3c40f18e1 (patch)
tree7c2b8619afe902abf99570df2873fbdf40a4d1a1 /lib/mlibc/options/ansi/include/stdlib.h
parenta95b38b1b92b172e6cc4e8e56a88a30cc65907b0 (diff)
lib: Add mlibc
Signed-off-by: Ian Moffett <ian@osmora.org>
Diffstat (limited to 'lib/mlibc/options/ansi/include/stdlib.h')
-rw-r--r--lib/mlibc/options/ansi/include/stdlib.h128
1 files changed, 128 insertions, 0 deletions
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 <alloca.h>
+#include <mlibc-config.h>
+#include <bits/null.h>
+#include <bits/size_t.h>
+#include <bits/wchar_t.h>
+
+#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 <bits/posix/posix_stdlib.h>
+#endif
+
+#endif // _STDLIB_H
+