ack/lang/cem/libcc.ansi/stdlib/exit.c

36 lines
617 B
C
Raw Normal View History

1989-05-16 13:13:53 +00:00
/*
* (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
* See the copyright notice in the ACK home directory, in the file "Copyright".
*/
1994-06-24 14:02:31 +00:00
/* $Id$ */
1989-05-16 13:13:53 +00:00
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
1989-05-16 13:13:53 +00:00
2018-06-21 20:33:47 +00:00
#define NEXITS 32
1989-05-16 13:13:53 +00:00
1989-12-18 15:14:14 +00:00
void (*__functab[NEXITS])(void);
int __funccnt = 0;
1989-05-16 13:13:53 +00:00
/* only flush output buffers when necessary */
int (*_clean)(void) = NULL;
1989-05-16 13:13:53 +00:00
static void
_calls(void)
{
1989-12-18 15:14:14 +00:00
register int i = __funccnt;
2018-06-21 20:33:47 +00:00
1989-05-16 13:13:53 +00:00
/* "Called in reversed order of their registration" */
while (--i >= 0)
1989-12-18 15:14:14 +00:00
(*__functab[i])();
1989-05-16 13:13:53 +00:00
}
2018-06-21 20:33:47 +00:00
void exit(int status)
1989-05-16 13:13:53 +00:00
{
_calls();
2018-06-21 20:33:47 +00:00
if (_clean)
_clean();
_exit(status);
1989-05-16 13:13:53 +00:00
}