1 /*
2  * Copyright (c) 1990 Regents of the University of California.
3  * All rights reserved.
4  *
5  * %sccs.include.redist.c%
6  */
7 
8 /*
9 FUNCTION
10 <<exit>>---end program execution
11 
12 INDEX
13 	exit
14 
15 SYNOPSIS
16 	#include <stdlib.h>
17 	void exit(int <[code]>);
18 
19 DESCRIPTION
20 Use <<exit>> to return control from a program to the host operating
21 environment.  Use the argument <[code]> to pass an exit status to the
22 operating environment: two particular values, <<EXIT_SUCCESS>> and
23 <<EXIT_FAILURE>>, are defined in `<<stdlib.h>>' to indicate success or
24 failure in a portable fashion.
25 
26 <<exit>> does two kinds of cleanup before ending execution of your
27 program.  First, it calls all application-defined cleanup functions
28 you have enrolled with <<atexit>>.  Second, files and streams are
29 cleaned up: any pending output is delivered to the host system, each
30 open file or stream is closed, and files created by <<tmpfile>> are
31 deleted.
32 
33 RETURNS
34 <<exit>> does not return to its caller.
35 
36 PORTABILITY
37 ANSI C requires <<exit>>, and specifies that <<EXIT_SUCCESS>> and
38 <<EXIT_FAILURE>> must be defined.
39 
40 Supporting OS subroutines required: <<_exit>>.
41 */
42 
43 #include <stdlib.h>
44 #include <unistd.h>	/* for _exit() declaration */
45 #ifndef TINY_STDIO
46 #include <stdio.h>
47 #endif
48 #include "atexit.h"
49 
50 /*
51  * Exit, flushing stdio buffers if necessary.
52  */
53 
54 void
exit(int code)55 exit (int code)
56 {
57 #ifdef _LITE_EXIT
58   /* Refer to comments in __atexit.c for more details of lite exit.  */
59   void __call_exitprocs (int, void *) __attribute__((weak));
60   if (__call_exitprocs)
61 #endif
62     __call_exitprocs (code, NULL);
63 
64 #ifndef TINY_STDIO
65   if (_GLOBAL_REENT->__cleanup)
66     (*_GLOBAL_REENT->__cleanup) (_GLOBAL_REENT);
67 #endif
68   _exit (code);
69 }
70