/*
 * onexit.c
 */

#include <stdlib.h>
#include <unistd.h>
#include "atexit.h"

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;

    return 0;
}
