/*
 * atexit — зарегистрировать функцию, вызываемую при нормальном
 * завершении (exit()), максимум 8, порядок LIFO.  Возвращает 0 или -1
 * при переполнении стека хендлеров.
 *
 * Внимание: возврат из main() без явного exit() уходит в inline RST
 * 10h #41 в crt0.s и цепочку atexit НЕ выполняет — программам с
 * хендлерами нужно завершаться через exit().
 */

#include <stdlib.h>
#include "_atexit.h"

int atexit(void (*fn)(void))
{
    if (_atexit_top >= ATEXIT_MAX) {
        return -1;
    }
    _atexit_stack[_atexit_top++] = fn;
    return 0;
}
