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