f692dddb80d33a3707520772cbfd8700702d3b1f
[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 srand  acess_srand\r
41 # define rand   acess_rand\r
42 # define rand_p acess_rand_p\r
43 #endif\r
44 \r
45 /* --- Spinlock Macros --- */\r
46 /* TODO: Support non-x86 architectures */\r
47 #define DEFLOCK(_name)  static int _spinlock_##_name=0;\r
48 #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
49 #define UNLOCK(_name) __asm__ __volatile__("lock andl $0, (%0)"::"D"(&_spinlock_##_name))\r
50 \r
51 /* --- StdLib --- */\r
52 extern void     _exit(int code) __attribute__((noreturn));      /* NOTE: Also defined in acess/sys.h */\r
53 \r
54 extern long long        strtoll(const char *ptr, char **end, int base);\r
55 extern long     strtol(const char *ptr, char **end, int base);\r
56 extern unsigned long long       strtoull(const char *ptr, char **end, int base);\r
57 extern unsigned long    strtoul(const char *ptr, char **end, int base);\r
58 extern int      atoi(const char *ptr);\r
59 \r
60 extern double   strtod(const char *ptr, char **end);\r
61 extern float    strtof(const char *ptr, char **end);\r
62 extern float    atof(const char *ptr);\r
63 \r
64 extern void     exit(int status) __attribute__((noreturn));\r
65 extern void     abort(void);\r
66 extern void     atexit(void (*__func)(void));\r
67 extern int      abs(int j);\r
68 extern long int labs(long int j);\r
69 extern long long int    llabs(long long int j);\r
70 \r
71 /* --- Environment --- */\r
72 extern char     *getenv(const char *name);\r
73 \r
74 /* --- Search/Sort --- */\r
75 typedef int (*_stdlib_compar_t)(const void *, const void *);\r
76 extern void     *bsearch(const void *key, const void *base, size_t nmemb, size_t size, _stdlib_compar_t compar);\r
77 extern void     qsort(void *base, size_t nmemb, size_t size, _stdlib_compar_t compar);\r
78 \r
79 /* --- Heap --- */\r
80 extern void     free(void *mem);\r
81 extern void     *malloc(size_t bytes);\r
82 extern void     *calloc(size_t __nmemb, size_t __size);\r
83 extern void     *realloc(void *__ptr, size_t __size);\r
84 extern int      IsHeap(void *ptr);\r
85 \r
86 /* --- Random --- */\r
87 extern void     srand(unsigned int seed);\r
88 extern int      rand(void);\r
89 extern int      rand_p(unsigned int *seedp);\r
90 \r
91 #ifndef SEEK_CUR\r
92 # define SEEK_CUR       0\r
93 # define SEEK_SET       1\r
94 # define SEEK_END       (-1)\r
95 #endif\r
96 \r
97 #endif\r

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