2016-05-04 04:02:26 +08:00
|
|
|
// The library for various signal related issues.
|
2006-10-30 05:09:11 +08:00
|
|
|
#ifndef FISH_SIGNALH
|
|
|
|
#define FISH_SIGNALH
|
2005-10-06 15:30:50 +08:00
|
|
|
|
2012-08-15 15:57:56 +08:00
|
|
|
#include <signal.h>
|
|
|
|
|
2016-05-04 04:02:26 +08:00
|
|
|
/// Get the integer signal value representing the specified signal, or -1 of no signal was found.
|
2012-11-19 08:30:30 +08:00
|
|
|
int wcs2sig(const wchar_t *str);
|
2005-10-06 15:30:50 +08:00
|
|
|
|
2016-05-04 04:02:26 +08:00
|
|
|
/// Get string representation of a signal.
|
2012-11-19 08:30:30 +08:00
|
|
|
const wchar_t *sig2wcs(int sig);
|
2005-10-06 15:30:50 +08:00
|
|
|
|
2016-05-04 04:02:26 +08:00
|
|
|
/// Returns a description of the specified signal.
|
2012-11-19 08:30:30 +08:00
|
|
|
const wchar_t *signal_get_desc(int sig);
|
2005-10-06 15:30:50 +08:00
|
|
|
|
2016-05-04 04:02:26 +08:00
|
|
|
/// Set all signal handlers to SIG_DFL.
|
2005-10-06 19:54:16 +08:00
|
|
|
void signal_reset_handlers();
|
|
|
|
|
2016-05-04 04:02:26 +08:00
|
|
|
/// Set signal handlers to fish default handlers.
|
2005-10-06 15:30:50 +08:00
|
|
|
void signal_set_handlers();
|
2005-10-06 19:54:16 +08:00
|
|
|
|
2016-05-04 04:02:26 +08:00
|
|
|
/// Tell fish what to do on the specified signal.
|
|
|
|
///
|
|
|
|
/// \param sig The signal to specify the action of
|
|
|
|
/// \param do_handle If true fish will catch the specified signal and fire an event, otherwise the
|
|
|
|
/// default action (SIG_DFL) will be set
|
2012-11-19 08:30:30 +08:00
|
|
|
void signal_handle(int sig, int do_handle);
|
2005-10-14 19:40:33 +08:00
|
|
|
|
2017-05-03 11:55:41 +08:00
|
|
|
/// Ensure we did not inherit any blocked signals. See issue #3964.
|
|
|
|
void signal_unblock_all();
|
|
|
|
|
2016-05-04 04:02:26 +08:00
|
|
|
/// Block all signals.
|
2017-08-07 05:46:12 +08:00
|
|
|
void signal_block();
|
2005-10-14 19:40:33 +08:00
|
|
|
|
2016-05-04 04:02:26 +08:00
|
|
|
/// Unblock all signals.
|
2017-08-07 05:46:12 +08:00
|
|
|
void signal_unblock();
|
2006-10-30 05:09:11 +08:00
|
|
|
|
2016-05-04 04:02:26 +08:00
|
|
|
/// Returns true if signals are being blocked.
|
2012-12-05 08:00:35 +08:00
|
|
|
bool signal_is_blocked();
|
2006-10-30 05:09:11 +08:00
|
|
|
|
2016-05-04 04:02:26 +08:00
|
|
|
/// Returns signals with non-default handlers.
|
2012-08-15 15:57:56 +08:00
|
|
|
void get_signals_with_handlers(sigset_t *set);
|
2018-10-03 02:20:48 +08:00
|
|
|
|
|
|
|
/// A RAII wrapper for signal_block/signal_unblock that triggers a signal block on creation, and then
|
|
|
|
/// automatically releases the block when the object is destroyed, handling control flow and exceptions.
|
|
|
|
struct signal_block_t {
|
|
|
|
signal_block_t() {
|
|
|
|
signal_block();
|
|
|
|
}
|
|
|
|
|
|
|
|
~signal_block_t() {
|
|
|
|
signal_unblock();
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2006-10-30 05:09:11 +08:00
|
|
|
#endif
|