+++ /dev/null
-/*
- * onexit.c
- */
-
-#include <stdlib.h>
-#include <unistd.h>
-#include "atexit.h"
-
-extern __noreturn (*__exit_handler)(int);
-static struct atexit *__atexit_list;
-
-static __noreturn on_exit_exit(int rv)
-{
- struct atexit *ap;
-
- for ( ap = __atexit_list ; ap ; ap = ap->next ) {
- ap->fctn(rv, ap->arg); /* This assumes extra args are harmless */
- }
-
- _exit(rv);
-}
-
-int on_exit(void (*fctn)(int, void *), void *arg)
-{
- struct atexit *as = malloc(sizeof(struct atexit));
-
- if ( !as )
- return -1;
-
- as->fctn = fctn;
- as->arg = arg;
-
- as->next = __atexit_list;
- __atexit_list = as;
-
- __exit_handler = on_exit_exit;
-
- return 0;
-}