Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Johnston <jjohnstn@redhat.com>2004-09-09 23:46:54 +0400
committerJeff Johnston <jjohnstn@redhat.com>2004-09-09 23:46:54 +0400
commit0c8593cf11a16ca75c72977a6f5e3983896940c4 (patch)
tree8133764892ae91831d48980ef216fc4935e45b5f /newlib/libc/stdlib/atexit.c
parent582dde69f31fb0dbe4beca5461b2b08924ae4e20 (diff)
2004-09-09 Paul Brook <paul@codesourcery.com>
* libc/include/sys/reent.h (struct _on_exit_args): Add _dso_handle and _is_cxa. (struct _atexit): Add _next when _REENT_SMALL. (struct _reent): Add _atexit0 when _REENT_SMALL. (_REENT_INIT_PTR): Adjust. * libc/stdlib/Makefile.am (GENERAL_SOURCES): Add __atexit.c and __call_exit.c. (EXTENDED_SOURCES): Add cxa_atexit.c and cxa_finalize.c. * libc/stdlib/Makefile.in: Regenerate. * libc/stdlib/__atexit.c: New file. * libc/stdlib/__call_atexit.c: New file. * libc/stdlib/atexit.h: Remove old definitions. Add new. * libc/stdlib/atexit.c (atexit): Use __register_exitproc. * libc/stdlib/cxa_atexit.c: New file. * libc/stdlib/cxa_finalize.c: New file. * libc/stdlib/exit.c (exit): Use __call_exitprocs. * libc/stdlib/on_exit.c (on_exit): Use __register_exitproc. 2004-09-09 Jeff Johnston <jjohnstn@redhat.com> * libc/reent/reent.c [_REENT_SMALL]: Fix reference to _on_exit_args_ptr.
Diffstat (limited to 'newlib/libc/stdlib/atexit.c')
-rw-r--r--newlib/libc/stdlib/atexit.c46
1 files changed, 2 insertions, 44 deletions
diff --git a/newlib/libc/stdlib/atexit.c b/newlib/libc/stdlib/atexit.c
index 3a9cdc6a3..21ffd6e7b 100644
--- a/newlib/libc/stdlib/atexit.c
+++ b/newlib/libc/stdlib/atexit.c
@@ -50,10 +50,8 @@ Supporting OS subroutines required: <<close>>, <<fstat>>, <<isatty>>,
<<lseek>>, <<read>>, <<sbrk>>, <<write>>.
*/
-#include <stddef.h>
#include <stdlib.h>
-#include <reent.h>
-#include <sys/lock.h>
+#include "atexit.h"
/*
* Register a function to be performed at exit.
@@ -64,45 +62,5 @@ _DEFUN (atexit,
(fn),
_VOID _EXFUN ((*fn), (_VOID)))
{
- register struct _atexit *p;
-
-#ifndef __SINGLE_THREAD__
- __LOCK_INIT(static, lock);
-
- __lock_acquire(lock);
-#endif
-
- /* _REENT_SMALL atexit() doesn't allow more than the required 32 entries. */
-#ifndef _REENT_SMALL
- 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)
- {
-#ifndef __SINGLE_THREAD__
- __lock_release(lock);
-#endif
- return -1;
- }
- p->_ind = 0;
- p->_on_exit_args._fntypes = 0;
- p->_next = _GLOBAL_REENT->_atexit;
- _GLOBAL_REENT->_atexit = p;
- }
-#else
- p = &_GLOBAL_REENT->_atexit;
- if (p->_ind >= _ATEXIT_SIZE)
- {
-#ifndef __SINGLE_THREAD__
- __lock_release(lock);
-#endif
- return -1;
- }
-#endif
- p->_fns[p->_ind++] = fn;
-#ifndef __SINGLE_THREAD__
- __lock_release(lock);
-#endif
- return 0;
+ return __register_exitproc (__et_atexit, fn, NULL, NULL);
}