/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* signals.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: tordner +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/01/27 00:00:00 by lfirmin #+# #+# */ /* Updated: 2025/06/02 01:05:49 by tordner ### ########.fr */ /* */ /* ************************************************************************** */ #include "../../includes/minishell.h" int g_signal = 0; void if_sigint(int sig) { g_signal = 128 + sig; rl_done = 1; } void set_status_if_signal(t_shell *shell) { shell->exit_status = g_signal; g_signal = 0; } void set_signal_child(void) { rl_event_hook = sig_event; signal(SIGQUIT, SIG_DFL); signal(SIGINT, SIG_DFL); signal(SIGTSTP, SIG_IGN); } void set_signal_parent_exec(void) { struct sigaction sa; struct sigaction sb; rl_event_hook = sig_event; ft_memset(&sa, 0, sizeof(sa)); sa.sa_handler = handle_signal_parent; sa.sa_flags = SA_RESTART; sigaction(SIGINT, &sa, NULL); ft_memset(&sb, 0, sizeof(sb)); sb.sa_handler = handle_signal_parent; sb.sa_flags = SA_RESTART; sigaction(SIGQUIT, &sb, NULL); } void set_signal_parent(void) { struct sigaction sa; rl_event_hook = sig_event; ft_memset(&sa, 0, sizeof(sa)); sa.sa_handler = if_sigint; sa.sa_flags = SA_RESTART; sigaction(SIGINT, &sa, NULL); signal(SIGQUIT, SIG_IGN); signal(SIGTSTP, SIG_IGN); }