Add GNU LGPL headers to all .c .C and .h files
[oweals/cde.git] / cde / programs / dtksh / ksh93 / src / lib / libast / vmalloc / vmexit.c
1 /*
2  * CDE - Common Desktop Environment
3  *
4  * Copyright (c) 1993-2012, The Open Group. All rights reserved.
5  *
6  * These libraries and programs are free software; you can
7  * redistribute them and/or modify them under the terms of the GNU
8  * Lesser General Public License as published by the Free Software
9  * Foundation; either version 2 of the License, or (at your option)
10  * any later version.
11  *
12  * These libraries and programs are distributed in the hope that
13  * they will be useful, but WITHOUT ANY WARRANTY; without even the
14  * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15  * PURPOSE. See the GNU Lesser General Public License for more
16  * details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with these librararies and programs; if not, write
20  * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
21  * Floor, Boston, MA 02110-1301 USA
22  */
23 /* $XConsortium: vmexit.c /main/2 1996/05/08 20:03:01 drk $ */
24 /***************************************************************
25 *                                                              *
26 *                      AT&T - PROPRIETARY                      *
27 *                                                              *
28 *         THIS IS PROPRIETARY SOURCE CODE LICENSED BY          *
29 *                          AT&T CORP.                          *
30 *                                                              *
31 *                Copyright (c) 1995 AT&T Corp.                 *
32 *                     All Rights Reserved                      *
33 *                                                              *
34 *           This software is licensed by AT&T Corp.            *
35 *       under the terms and conditions of the license in       *
36 *       http://www.research.att.com/orgs/ssr/book/reuse        *
37 *                                                              *
38 *               This software was created by the               *
39 *           Software Engineering Research Department           *
40 *                    AT&T Bell Laboratories                    *
41 *                                                              *
42 *               For further information contact                *
43 *                     gsf@research.att.com                     *
44 *                                                              *
45 ***************************************************************/
46 #include        "vmhdr.h"
47
48 /*
49 **      Any required functions for process exiting.
50 **      Written by Kiem-Phong Vo (05/25/93).
51 */
52 #if PACKAGE_ast || _lib_atexit
53 int     Vm_atexit_already_defined;
54 #else
55
56 _BEGIN_EXTERNS_
57 extern int      onexit _ARG_(( void(*)() ));
58 extern int      on_exit _ARG_(( void(*)(), char* ));
59 extern void     _exit _ARG_((int));
60 extern void     _cleanup();
61 _END_EXTERNS_
62
63 #if _lib_onexit || _lib_on_exit
64
65 #if __STD_C
66 atexit(void (*exitf)(void))
67 #else
68 atexit(exitf)
69 void    (*exitf)();
70 #endif
71 {
72 #if _lib_onexit
73         return onexit(exitf);
74 #else
75 #if _lib_on_exit
76         return on_exit(exitf,NIL(char*));
77 #endif
78 #endif
79 }
80
81 #else /*!(_lib_onexit || _lib_onexit)*/
82
83 typedef struct _exit_s
84 {       struct _exit_s* next;
85         void(*          exitf)_ARG_((void));
86 } Exit_t;
87 static Exit_t*  Exit;
88
89 #if __STD_C
90 atexit(void (*exitf)(void))
91 #else
92 atexit(exitf)
93 void    (*exitf)();
94 #endif
95 {       Exit_t* e;
96
97         if(!(e = (Exit_t*)malloc(sizeof(Exit_t))) )
98                 return -1;
99         e->exitf = exitf;
100         e->next = Exit;
101         Exit = e;
102         return 0;
103 }
104
105 #if __STD_C
106 exit(int type)
107 #else
108 exit(type)
109 int     type;
110 #endif
111 {
112         Exit_t* e;
113
114         for(e = Exit; e; e = e->next)
115                 (*e->exitf)();
116
117 #if _exit_cleanup
118         _cleanup();
119 #endif
120
121         _exit(type);
122         return type;
123 }
124
125 #endif  /* _lib_onexit || _lib_on_exit */
126
127 #endif /*!PACKAGE_ast*/