Handle allow-header correctly.
[kopensolaris-gnu/glibc.git] / stdlib / exit.h
1 /* Copyright (C) 1991, 1996, 1997, 1999, 2001 Free Software Foundation, Inc.
2    This file is part of the GNU C Library.
3
4    The GNU C Library is free software; you can redistribute it and/or
5    modify it under the terms of the GNU Library General Public License as
6    published by the Free Software Foundation; either version 2 of the
7    License, or (at your option) any later version.
8
9    The GNU C Library is distributed in the hope that it will be useful,
10    but WITHOUT ANY WARRANTY; without even the implied warranty of
11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12    Library General Public License for more details.
13
14    You should have received a copy of the GNU Library General Public
15    License along with the GNU C Library; see the file COPYING.LIB.  If not,
16    write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17    Boston, MA 02111-1307, USA.  */
18
19 #ifndef _EXIT_H
20 #define _EXIT_H 1
21
22
23 enum
24 {
25   ef_free,      /* `ef_free' MUST be zero!  */
26   ef_us,
27   ef_on,
28   ef_at,
29   ef_cxa
30 };
31
32 struct exit_function
33   {
34     /* `flavour' should be of type of the `enum' above but since we need
35        this element in an atomic operation we have to use `long int'.  */
36     long int flavor;
37     union
38       {
39         void (*at) (void);
40         struct
41           {
42             void (*fn) (int status, void *arg);
43             void *arg;
44           } on;
45         struct
46           {
47             void (*fn) (void *arg, int status);
48             void *arg;
49             void *dso_handle;
50           } cxa;
51       } func;
52   };
53 struct exit_function_list
54   {
55     struct exit_function_list *next;
56     size_t idx;
57     struct exit_function fns[32];
58   };
59 extern struct exit_function_list *__exit_funcs;
60
61 extern struct exit_function *__new_exitfn (void);
62
63 #endif  /* exit.h  */