Usermode/libc - Fixing errors from clang, disabled heap for native build
[tpg/acess2.git] / Usermode / Libraries / libc.so_src / include_exp / stdlib.h
1 /*\r
2  * AcessOS LibC\r
3  * stdlib.h\r
4  */\r
5 #ifndef __STDLIB_H\r
6 #define __STDLIB_H\r
7 \r
8 #include <stddef.h>\r
9 #include <stdarg.h>\r
10 #include <sys/types.h>\r
11 \r
12 #define EXIT_FAILURE    1\r
13 #define EXIT_SUCCESS    0\r
14 \r
15 #ifdef ARCHDIR_is_native\r
16 # define _exit  acess__exit\r
17 \r
18 //# define strtoll      acess_strtoll\r
19 //# define strtol       acess_strtol\r
20 //# define strtoul      acess_strtoul\r
21 //# define strtoull     acess_strtoull\r
22 \r
23 # define strtod acess_strtod\r
24 # define strtof acess_strtof\r
25 # define atof   acess_atof\r
26 \r
27 # define exit   acess_exit\r
28 # define atexit acess_atexit\r
29 # define abort  acess_abort\r
30 # define abs    acess_abs\r
31 # define labs   acess_labs\r
32 # define llabs  acess_llabs\r
33 \r
34 # define getenv acess_getenv\r
35 # define putenv acess_putenv\r
36 \r
37 # define bsearch        acess_bsearch\r
38 # define qsort  acess_qsort\r
39 \r
40 # define free   acess_free\r
41 # define malloc acess_malloc\r
42 # define calloc acess_calloc\r
43 # define realloc        acess_realloc\r
44 # define IsHeap acess_IsHeap\r
45 \r
46 # define srand  acess_srand\r
47 # define rand   acess_rand\r
48 # define rand_p acess_rand_p\r
49 #endif\r
50 \r
51 /* --- Spinlock Macros --- */\r
52 /* TODO: Support non-x86 architectures */\r
53 #define DEFLOCK(_name)  static int _spinlock_##_name=0;\r
54 #define LOCK(_name)     do{int v=1;while(v){__asm__ __volatile__("lock cmpxchgl %0, (%1)":"=a"(v):"D"((&_spinlock_##_name)),"a"(1));yield();}}while(0)\r
55 #define UNLOCK(_name) __asm__ __volatile__("lock andl $0, (%0)"::"D"(&_spinlock_##_name))\r
56 \r
57 /* --- StdLib --- */\r
58 extern void     _exit(int code) __attribute__((noreturn));      /* NOTE: Also defined in acess/sys.h */\r
59 \r
60 extern long long        strtoll(const char *ptr, char **end, int base);\r
61 extern long     strtol(const char *ptr, char **end, int base);\r
62 extern unsigned long long       strtoull(const char *ptr, char **end, int base);\r
63 extern unsigned long    strtoul(const char *ptr, char **end, int base);\r
64 extern int      atoi(const char *ptr);\r
65 \r
66 extern double   strtod(const char *ptr, char **end);\r
67 extern float    strtof(const char *ptr, char **end);\r
68 extern float    atof(const char *ptr);\r
69 \r
70 extern void     exit(int status) __attribute__((noreturn));\r
71 extern void     abort(void);\r
72 extern void     atexit(void (*__func)(void));\r
73 extern int      abs(int j);\r
74 extern long int labs(long int j);\r
75 extern long long int    llabs(long long int j);\r
76 \r
77 /* --- Environment --- */\r
78 extern char     *getenv(const char *name);\r
79 \r
80 /* --- Search/Sort --- */\r
81 typedef int (*_stdlib_compar_t)(const void *, const void *);\r
82 extern void     *bsearch(const void *key, const void *base, size_t nmemb, size_t size, _stdlib_compar_t compar);\r
83 extern void     qsort(void *base, size_t nmemb, size_t size, _stdlib_compar_t compar);\r
84 \r
85 /* --- Heap --- */\r
86 extern void     free(void *mem);\r
87 extern void     *malloc(size_t bytes);\r
88 extern void     *calloc(size_t __nmemb, size_t __size);\r
89 extern void     *realloc(void *__ptr, size_t __size);\r
90 extern int      IsHeap(void *ptr);\r
91 \r
92 /* --- Random --- */\r
93 extern void     srand(unsigned int seed);\r
94 extern int      rand(void);\r
95 extern int      rand_p(unsigned int *seedp);\r
96 \r
97 #ifndef SEEK_CUR\r
98 # define SEEK_CUR       0\r
99 # define SEEK_SET       1\r
100 # define SEEK_END       (-1)\r
101 #endif\r
102 \r
103 #endif\r

UCC git Repository :: git.ucc.asn.au