1/***********************************************************************
2*                                                                      *
3*               This software is part of the ast package               *
4*          Copyright (c) 1985-2011 AT&T Intellectual Property          *
5*                      and is licensed under the                       *
6*                 Eclipse Public License, Version 1.0                  *
7*                    by AT&T Intellectual Property                     *
8*                                                                      *
9*                A copy of the License is available at                 *
10*          http://www.eclipse.org/org/documents/epl-v10.html           *
11*         (with md5 checksum b35adb5213ca9657e911e9befb180842)         *
12*                                                                      *
13*              Information and Software Systems Research               *
14*                            AT&T Research                             *
15*                           Florham Park NJ                            *
16*                                                                      *
17*                 Glenn Fowler <gsf@research.att.com>                  *
18*                  David Korn <dgk@research.att.com>                   *
19*                   Phong Vo <kpv@research.att.com>                    *
20*                                                                      *
21***********************************************************************/
22#if defined(_UWIN) && defined(_BLD_ast)
23
24void _STUB_vmexit(){}
25
26#else
27
28#include	"vmhdr.h"
29
30/*
31**	Any required functions for process exiting.
32**	Written by Kiem-Phong Vo, kpv@research.att.com (05/25/93).
33*/
34#if _PACKAGE_ast || _lib_atexit
35
36void _STUB_vmexit(){}
37
38#else
39
40#if _lib_onexit
41
42#if __STD_C
43int atexit(void (*exitf)(void))
44#else
45int atexit(exitf)
46void	(*exitf)();
47#endif
48{
49	return onexit(exitf);
50}
51
52#else /*!_lib_onexit*/
53
54typedef struct _exit_s
55{	struct _exit_s*	next;
56	void(*		exitf)_ARG_((void));
57} Exit_t;
58static Exit_t*	Exit;
59
60#if __STD_C
61atexit(void (*exitf)(void))
62#else
63atexit(exitf)
64void	(*exitf)();
65#endif
66{	Exit_t*	e;
67
68	if(!(e = (Exit_t*)malloc(sizeof(Exit_t))) )
69		return -1;
70	e->exitf = exitf;
71	e->next = Exit;
72	Exit = e;
73	return 0;
74}
75
76#if __STD_C
77void exit(int type)
78#else
79void exit(type)
80int	type;
81#endif
82{
83	Exit_t*	e;
84
85	for(e = Exit; e; e = e->next)
86		(*e->exitf)();
87
88#if _exit_cleanup
89	_cleanup();
90#endif
91
92	_exit(type);
93	return type;
94}
95
96#endif	/* _lib_onexit || _lib_on_exit */
97
98#endif /*!PACKAGE_ast*/
99
100#endif
101