diff options
Diffstat (limited to 'newlib/libc/stdlib/on_exit.c')
-rw-r--r-- | newlib/libc/stdlib/on_exit.c | 39 |
1 files changed, 2 insertions, 37 deletions
diff --git a/newlib/libc/stdlib/on_exit.c b/newlib/libc/stdlib/on_exit.c index f3383501f..3ac7f998b 100644 --- a/newlib/libc/stdlib/on_exit.c +++ b/newlib/libc/stdlib/on_exit.c @@ -56,7 +56,7 @@ Supporting OS subroutines required: None #include <stddef.h> #include <stdlib.h> -#include <reent.h> +#include "atexit.h" /* * Register a function to be performed at exit. @@ -68,40 +68,5 @@ _DEFUN (on_exit, _VOID _EXFUN ((*fn), (int, _PTR)) _AND _PTR arg) { - struct _on_exit_args * args; - register struct _atexit *p; - void (*x)(void) = (void (*)(void))fn; - -/* _REENT_SMALL on_exit() doesn't allow more than the required 32 entries. */ -#ifdef _REENT_SMALL - p = &_GLOBAL_REENT->_atexit; - if (p->_ind >= _ATEXIT_SIZE) - return -1; - args = p->_on_exit_args_ptr; - if (args == NULL) - { - args = malloc (sizeof * p->_on_exit_args_ptr); - if (args == NULL) - return -1; - args->_fntypes = 0; - p->_on_exit_args_ptr = args; - } -#else - if ((p = _GLOBAL_REENT->_atexit) == NULL) - _GLOBAL_REENT->_atexit = p = &_GLOBAL_REENT->_atexit0; - if (p->_ind >= _ATEXIT_SIZE) - { - if ((p = (struct _atexit *) malloc (sizeof *p)) == NULL) - return -1; - p->_ind = 0; - p->_on_exit_args._fntypes = 0; - p->_next = _GLOBAL_REENT->_atexit; - _GLOBAL_REENT->_atexit = p; - } - args = & p->_on_exit_args; -#endif - args->_fntypes |= (1 << p->_ind); - args->_fnargs[p->_ind] = arg; - p->_fns[p->_ind++] = x; - return 0; + return __register_exitproc (__et_onexit, (void (*)(void)) fn, arg, NULL); } |