diff options
Diffstat (limited to 'include')
| -rw-r--r-- | include/handler.h | 3 | ||||
| -rw-r--r-- | include/util/io.h | 16 |
2 files changed, 19 insertions, 0 deletions
diff --git a/include/handler.h b/include/handler.h index 100c548..8878eec 100644 --- a/include/handler.h +++ b/include/handler.h @@ -9,6 +9,7 @@ #include <sys/types.h> #include <sys/wait.h> #include <errno.h> +#include <atomic> #include "all.h" @@ -22,6 +23,8 @@ extern sigset_t block_job, block_io; +inline std::atomic_int exit_code, exit_required_pid; + void signal_init(); handler_t *Signal(int signum, handler_t *handler); void sigchld_handler(int sig); diff --git a/include/util/io.h b/include/util/io.h index e995af5..5c0a129 100644 --- a/include/util/io.h +++ b/include/util/io.h @@ -99,6 +99,22 @@ void safe_output(T x, T_arg ...arg) errno = errno_old; } +// async-signal-safe output function +// example: +// safe_output("string", 123, variable); +template <typename ...T_arg> +void safe_logger(T_arg ...arg) +{ + int errno_old = errno; + + if (GLOBAL_DEBUG && verbose) + { + safe_output(arg...); + } + + errno = errno_old; +} + void unix_error(const char *msg); void app_error(const char *msg); |
