summaryrefslogtreecommitdiffstats
path: root/mdk-stage1/dietlibc/lib/atexit.c
blob: 8204af06c529ec56ac6cf041ea335e2665bf7b35 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
typedef void (*function)(void);

static function __atexitlist[4];

int atexit(function t) {
  int i;
  for (i=0; i<4; i++)
    if (__atexitlist[i]==0) {
      __atexitlist[i]=t;
      return 0;
    }
  return -1;
}

extern void _exit(int code) __attribute__((noreturn));

void exit(int code) {
  if (__atexitlist[3]) __atexitlist[3]();
  if (__atexitlist[2]) __atexitlist[2]();
  if (__atexitlist[1]) __atexitlist[1]();
  if (__atexitlist[0]) __atexitlist[0]();
  _exit(code);
}