X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Usermode%2FLibraries%2Flibc.so_src%2Fstdlib.c;h=191f5261bd7d588e5e711670941b59fe39ccf682;hb=71b1271511ad01f042d2e51673dd57cce1b0fd9c;hp=ce5a8d0c4492ea73f2a63269d317aa0f1bf5fa67;hpb=466eda7c917791866a29c253c6c22197faf41bf7;p=tpg%2Facess2.git diff --git a/Usermode/Libraries/libc.so_src/stdlib.c b/Usermode/Libraries/libc.so_src/stdlib.c index ce5a8d0c..191f5261 100644 --- a/Usermode/Libraries/libc.so_src/stdlib.c +++ b/Usermode/Libraries/libc.so_src/stdlib.c @@ -13,17 +13,31 @@ #define _stdout 1 #define _stdin 0 +extern void *_crt0_exit_handler; + // === PROTOTYPES === EXPORT int atoi(const char *str); EXPORT void exit(int status); +// === GLOBALS === +void (*g_stdlib_exithandler)(void); + // === CODE === +void atexit(void (*__func)(void)) +{ + g_stdlib_exithandler = __func; + // TODO: Replace with meta-function to allow multiple atexit() handlers + _crt0_exit_handler = __func; +} + /** * \fn EXPORT void exit(int status) * \brief Exit */ EXPORT void exit(int status) { + if( g_stdlib_exithandler ) + g_stdlib_exithandler(); _exit(status); }