summaryrefslogtreecommitdiffstats
path: root/newlib/libc/stdlib/on_exit.c
diff options
context:
space:
mode:
Diffstat (limited to 'newlib/libc/stdlib/on_exit.c')
-rw-r--r--newlib/libc/stdlib/on_exit.c39
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);
}