#include #include #include "finalize.h" struct Node { struct Node *next; void (*callback)(void); }; static struct Node *list; void finalizeRegister(void (*callback)(void)) { struct Node *n = malloc(sizeof(*n)); if (!n) { fprintf(stderr, "finalizeRegister: out of memory\n"); finalizeExit(1); } // initialize list node and prepend to list n->next = list; n->callback = callback; list = n; } void finalize(void) { for (struct Node *n = list, *next; n; n = next) { // keep copy of pointer to next node next = n->next; // callback n->callback(); // free node itself free(n); } } void finalizeExit(int code) { finalize(); exit(code); }