summaryrefslogtreecommitdiff
path: root/lib/libc/stdlib/exit.c
blob: 800546372329293b5d2925335ffe74bb7f41a3ef (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <libc.h>   // for weak_reference
#include <stdlib.h> // for free, exit
#include <unistd.h> // for _exit, close, write, STDERR_FILENO

void (*__dummy_atexit_fvec)(void);
weak_reference(__dummy_atexit_fvec, __atexit_fvec);

void exit(int status)
{
	void (*fptr)(void);

	if (__atexit_fvec) {
		fptr = __atexit_fvec;
		while (fptr) {
			fptr();
			fptr++;
		}
	}

	_exit(status);
}