From bcc82aabaf1659a1579b0a2aca904c8f2e7cd76d Mon Sep 17 00:00:00 2001 From: LuckyLaszlo Date: Wed, 8 Dec 2021 04:45:12 +0100 Subject: [PATCH] signals adjustements --- headers/minishell_prototypes.h | 3 +-- headers/minishell_structs.h | 2 +- srcs/exec/subshell_exec.c | 8 ++++++-- srcs/init.c | 2 +- srcs/signals.c | 22 +++++++--------------- 5 files changed, 16 insertions(+), 21 deletions(-) diff --git a/headers/minishell_prototypes.h b/headers/minishell_prototypes.h index 27e2cbe..48b9d30 100644 --- a/headers/minishell_prototypes.h +++ b/headers/minishell_prototypes.h @@ -13,7 +13,6 @@ #ifndef MINISHELL_PROTOTYPES_H # define MINISHELL_PROTOTYPES_H -// variable globale int g_switch_heredoc_sigint; extern char **environ; @@ -24,7 +23,7 @@ char **retrieve_path(void); int set_terminal_attributes(struct termios *ori_termios, struct termios *interactive_termios, int *termios_changed); // WIP, TEST, TEMP, PLACEHOLDER, NOT IMPORTANT, :) -int set_signals_handling(struct sigaction *signal_behaviour); +void set_signals_behaviour(void); // Shell modes void shell_loop(t_all *c); diff --git a/headers/minishell_structs.h b/headers/minishell_structs.h index 18f55ee..69b5f79 100644 --- a/headers/minishell_structs.h +++ b/headers/minishell_structs.h @@ -46,7 +46,7 @@ typedef struct s_all // struct termios interactive_termios; // int termios_changed; // struct sigaction ori_signal_behaviour; - struct sigaction signal_behaviour; +// struct sigaction signal_behaviour; } t_all; #endif diff --git a/srcs/exec/subshell_exec.c b/srcs/exec/subshell_exec.c index 273f9bf..1e1374d 100644 --- a/srcs/exec/subshell_exec.c +++ b/srcs/exec/subshell_exec.c @@ -14,13 +14,17 @@ int cmd_exec_in_subshell(t_cmd *cmd, t_all *c) { + struct sigaction signal_behaviour; + cmd->pid = fork(); if (cmd->pid == -1) perror("fork()"); if (cmd->pid == 0) { - c->signal_behaviour.sa_handler = SIG_DFL; - sigaction(SIGINT, &c->signal_behaviour, NULL); + ft_bzero(&signal_behaviour, sizeof signal_behaviour); + signal_behaviour.sa_handler = SIG_DFL; + sigaction(SIGINT, &signal_behaviour, NULL); + sigaction(SIGQUIT, &signal_behaviour, NULL); if (cmd->fd_in != STDIN_FILENO) if (dup2(cmd->fd_in, STDIN_FILENO) == -1) return (ft_reti_perror(EXIT_FAILURE, "dup2()")); diff --git a/srcs/init.c b/srcs/init.c index a93c524..052b17a 100644 --- a/srcs/init.c +++ b/srcs/init.c @@ -32,7 +32,7 @@ int init(t_all *c) c->prompt = init_prompt(c->prompt_base); if (!c->prompt) return (ft_reti_perror(0, "init_prompt() error")); - set_signals_handling(&c->signal_behaviour); + set_signals_behaviour(); return (1); } diff --git a/srcs/signals.c b/srcs/signals.c index 3834374..e21e689 100644 --- a/srcs/signals.c +++ b/srcs/signals.c @@ -24,23 +24,15 @@ void sigint_handler_interactive(int signum) void sigint_handler_heredoc(int signum) { (void)signum; - g_switch_heredoc_sigint = 1; rl_done = 1; -// write (1, rl_line_buffer, ft_strlen(rl_line_buffer) + 1); -// rl_line_buffer = "\004"; -// write(1, "\004", 1); -// rl_on_new_line(); -// rl_replace_line((char *)NULL, 1); -// rl_replace_line("\004", 1); -// rl_replace_line("", 1); -// rl_redisplay(); + g_switch_heredoc_sigint = 1; } -int set_signals_handling(struct sigaction *signal_behaviour) +void set_signals_behaviour(void) { - signal_behaviour->sa_handler = sigint_handler_interactive; - sigaction(SIGINT, signal_behaviour, NULL); - signal_behaviour->sa_handler = SIG_IGN; - sigaction(SIGQUIT, signal_behaviour, NULL); - return (1); + struct sigaction signal_behaviour; + + ft_bzero(&signal_behaviour, sizeof signal_behaviour); + signal_behaviour.sa_handler = SIG_IGN; + sigaction(SIGQUIT, &signal_behaviour, NULL); }