1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
|
/* trap.h -- data structures used in the trap mechanism. */
/* Copyright (C) 1993-2023 Free Software Foundation, Inc.
This file is part of GNU Bash, the Bourne Again SHell.
Bash is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Bash is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Bash. If not, see <http://www.gnu.org/licenses/>.
*/
#if !defined (_TRAP_H_)
#define _TRAP_H_
#include "stdc.h"
#if !defined (SIG_DFL)
#include "bashtypes.h"
#include <signal.h>
#endif /* SIG_DFL */
#if !defined (NSIG)
#define NSIG 64
#endif /* !NSIG */
#define NO_SIG -1
#define DEFAULT_SIG SIG_DFL
#define IGNORE_SIG SIG_IGN
/* Special shell trap names. */
#define DEBUG_TRAP NSIG
#define ERROR_TRAP NSIG+1
#define RETURN_TRAP NSIG+2
#define EXIT_TRAP 0
/* system signals plus special bash traps */
#define BASH_NSIG NSIG+3
/* Flags values for decode_signal() */
#define DSIG_SIGPREFIX 0x01 /* don't allow `SIG' PREFIX */
#define DSIG_NOCASE 0x02 /* case-insensitive comparison */
/* A value which can never be the target of a trap handler. */
#define IMPOSSIBLE_TRAP_HANDLER (SigHandler *)initialize_traps
#define signal_object_p(x,f) (decode_signal (x,f) != NO_SIG)
#define TRAP_STRING(s) \
(signal_is_trapped (s) && signal_is_ignored (s) == 0) ? trap_list[s] \
: (char *)NULL
extern char *trap_list[];
extern int trapped_signal_received;
extern int wait_signal_received;
extern int running_trap;
extern int trap_return_context;
extern int trap_saved_exit_value;
extern int suppress_debug_trap_verbose;
/* Externally-visible functions declared in trap.c. */
extern void initialize_traps (void);
extern void run_pending_traps (void);
extern void queue_sigchld_trap (int);
extern void set_impossible_sigchld_trap (void);
extern void set_sigchld_trap (const char *);
extern void set_debug_trap (const char *);
extern void set_error_trap (const char *);
extern void set_return_trap (const char *);
extern void uw_set_error_trap (void *);
extern void uw_maybe_set_sigchld_trap (void *);
extern void uw_maybe_set_debug_trap (void *);
extern void uw_maybe_set_error_trap (void *);
extern void uw_maybe_set_return_trap (void *);
extern void set_sigint_trap (const char *);
extern void set_signal (int, const char *);
extern void restore_default_signal (int);
extern void ignore_signal (int);
extern int run_exit_trap (void);
extern void run_trap_cleanup (int);
extern int run_debug_trap (void);
extern void run_error_trap (void);
extern void run_return_trap (void);
extern void free_trap_strings (void);
extern void reset_signal_handlers (void);
extern void restore_original_signals (void);
extern void restore_traps (void);
extern void get_original_signal (int);
extern void get_all_original_signals (void);
extern char *signal_name (int);
extern int decode_signal (const char *, int);
extern void run_interrupt_trap (int);
extern int maybe_call_trap_handler (int);
extern int signal_is_special (int);
extern int signal_is_trapped (int);
extern int signal_is_pending (int);
extern int signal_is_ignored (int);
extern int signal_is_hard_ignored (int);
extern void set_signal_hard_ignored (int);
extern void set_signal_ignored (int);
extern void set_signal_async_ignored (int);
extern int signal_is_async_ignored (int);
extern int signal_in_progress (int);
extern void set_trap_state (int);
extern int next_pending_trap (int);
extern int first_pending_trap (void);
extern void clear_pending_traps (void);
extern int any_signals_trapped (void);
extern void check_signals (void);
extern void check_signals_and_traps (void);
#endif /* _TRAP_H_ */
|