signals adjustements

This commit is contained in:
LuckyLaszlo
2021-12-08 04:45:12 +01:00
parent 8125e43065
commit bcc82aabaf
5 changed files with 16 additions and 21 deletions

View File

@@ -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);

View File

@@ -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

View File

@@ -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()"));

View File

@@ -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);
}

View File

@@ -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);
}