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 (_REENT_CLEANUP(_GLOBAL_REENT))
66       (*_REENT_CLEANUP(_GLOBAL_REENT)) (_GLOBAL_REENT);
67   if (__stdio_exit_handler != NULL)
68     (*__stdio_exit_handler) ();
69 #endif
70   _exit (code);
71 }
72