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