X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Usermode%2Finclude%2Fstdlib.h;h=160993d1470c074ad668ab163875c2061ed20756;hb=7d76ac580a19c897ea849d4bc684068ab1fdc6f3;hp=87744271cb5a5bba3c9c297a9b4f70be98b48623;hpb=17e16b3110b4c5124b0707435e0427993d696545;p=tpg%2Facess2.git diff --git a/Usermode/include/stdlib.h b/Usermode/include/stdlib.h index 87744271..160993d1 100644 --- a/Usermode/include/stdlib.h +++ b/Usermode/include/stdlib.h @@ -1,47 +1,40 @@ /* -AcessOS LibC - -stdlib.h -*/ + * AcessOS LibC + * stdlib.h + */ #ifndef __STDLIB_H #define __STDLIB_H +#include #include #include -#ifndef NULL -# define NULL ((void*)0) -#endif - -typedef unsigned int size_t; +#define EXIT_FAILURE 1 +#define EXIT_SUCCESS 0 -// --- Spinlock Macros --- +/* --- Spinlock Macros --- */ +/* TODO: Support non-x86 architectures */ #define DEFLOCK(_name) static int _spinlock_##_name=0; -//#define LOCK(_name) __asm__ __volatile__("jmp ._tst;\n\t._lp:call yield;\n\t._tst:lock btsl $1,(%0);\n\tjc ._lp"::"D"(&_spinlock_##_name)) -#define LOCK(_name) do{int v=1;while(v){__asm__ __volatile__("lock cmpxchgl %%eax, (%1)":"=a"(v):"D"((&_spinlock_##_name)),"a"(1));yield();}}while(0) +#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) #define UNLOCK(_name) __asm__ __volatile__("lock andl $0, (%0)"::"D"(&_spinlock_##_name)) -// --- StdLib --- +/* --- StdLib --- */ +extern void _exit(int code) __attribute__((noreturn)); /* NOTE: Also defined in acess/sys.h */ extern int atoi(const char *ptr); +extern void exit(int status) __attribute__((noreturn)); +extern void atexit(void (*__func)(void)); +extern void qsort(void *base, size_t nmemb, size_t size, int(*compar)(const void *, const void *)); -extern void *memcpy(void *dest, void *src, size_t count); -extern void *memmove(void *dest, void *src, size_t count); - -// --- Environment --- +/* --- Environment --- */ extern char *getenv(const char *name); -// --- Heap --- -extern void free(void *mem); -extern void *malloc(unsigned int bytes); -extern void *realloc(void *oldPos, unsigned int bytes); +/* --- Heap --- */ +extern void free(void *mem); +extern void *malloc(size_t bytes); +extern void *calloc(size_t __nmemb, size_t __size); +extern void *realloc(void *__ptr, size_t __size); extern int IsHeap(void *ptr); -// --- Strings --- -extern int strlen(const char *string); -extern int strcmp(char *str1, char *str2); -extern int strncmp(char *str1, char *str2, size_t len); -extern char *strcpy(char *dst, const char *src); - #ifndef SEEK_CUR # define SEEK_CUR 0 # define SEEK_SET 1