signals adjustements
This commit is contained in:
@@ -13,7 +13,6 @@
|
|||||||
#ifndef MINISHELL_PROTOTYPES_H
|
#ifndef MINISHELL_PROTOTYPES_H
|
||||||
# define MINISHELL_PROTOTYPES_H
|
# define MINISHELL_PROTOTYPES_H
|
||||||
|
|
||||||
// variable globale
|
|
||||||
int g_switch_heredoc_sigint;
|
int g_switch_heredoc_sigint;
|
||||||
extern char **environ;
|
extern char **environ;
|
||||||
|
|
||||||
@@ -24,7 +23,7 @@ char **retrieve_path(void);
|
|||||||
int set_terminal_attributes(struct termios *ori_termios,
|
int set_terminal_attributes(struct termios *ori_termios,
|
||||||
struct termios *interactive_termios,
|
struct termios *interactive_termios,
|
||||||
int *termios_changed); // WIP, TEST, TEMP, PLACEHOLDER, NOT IMPORTANT, :)
|
int *termios_changed); // WIP, TEST, TEMP, PLACEHOLDER, NOT IMPORTANT, :)
|
||||||
int set_signals_handling(struct sigaction *signal_behaviour);
|
void set_signals_behaviour(void);
|
||||||
|
|
||||||
// Shell modes
|
// Shell modes
|
||||||
void shell_loop(t_all *c);
|
void shell_loop(t_all *c);
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ typedef struct s_all
|
|||||||
// struct termios interactive_termios;
|
// struct termios interactive_termios;
|
||||||
// int termios_changed;
|
// int termios_changed;
|
||||||
// struct sigaction ori_signal_behaviour;
|
// struct sigaction ori_signal_behaviour;
|
||||||
struct sigaction signal_behaviour;
|
// struct sigaction signal_behaviour;
|
||||||
} t_all;
|
} t_all;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -14,13 +14,17 @@
|
|||||||
|
|
||||||
int cmd_exec_in_subshell(t_cmd *cmd, t_all *c)
|
int cmd_exec_in_subshell(t_cmd *cmd, t_all *c)
|
||||||
{
|
{
|
||||||
|
struct sigaction signal_behaviour;
|
||||||
|
|
||||||
cmd->pid = fork();
|
cmd->pid = fork();
|
||||||
if (cmd->pid == -1)
|
if (cmd->pid == -1)
|
||||||
perror("fork()");
|
perror("fork()");
|
||||||
if (cmd->pid == 0)
|
if (cmd->pid == 0)
|
||||||
{
|
{
|
||||||
c->signal_behaviour.sa_handler = SIG_DFL;
|
ft_bzero(&signal_behaviour, sizeof signal_behaviour);
|
||||||
sigaction(SIGINT, &c->signal_behaviour, NULL);
|
signal_behaviour.sa_handler = SIG_DFL;
|
||||||
|
sigaction(SIGINT, &signal_behaviour, NULL);
|
||||||
|
sigaction(SIGQUIT, &signal_behaviour, NULL);
|
||||||
if (cmd->fd_in != STDIN_FILENO)
|
if (cmd->fd_in != STDIN_FILENO)
|
||||||
if (dup2(cmd->fd_in, STDIN_FILENO) == -1)
|
if (dup2(cmd->fd_in, STDIN_FILENO) == -1)
|
||||||
return (ft_reti_perror(EXIT_FAILURE, "dup2()"));
|
return (ft_reti_perror(EXIT_FAILURE, "dup2()"));
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ int init(t_all *c)
|
|||||||
c->prompt = init_prompt(c->prompt_base);
|
c->prompt = init_prompt(c->prompt_base);
|
||||||
if (!c->prompt)
|
if (!c->prompt)
|
||||||
return (ft_reti_perror(0, "init_prompt() error"));
|
return (ft_reti_perror(0, "init_prompt() error"));
|
||||||
set_signals_handling(&c->signal_behaviour);
|
set_signals_behaviour();
|
||||||
return (1);
|
return (1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -24,23 +24,15 @@ void sigint_handler_interactive(int signum)
|
|||||||
void sigint_handler_heredoc(int signum)
|
void sigint_handler_heredoc(int signum)
|
||||||
{
|
{
|
||||||
(void)signum;
|
(void)signum;
|
||||||
g_switch_heredoc_sigint = 1;
|
|
||||||
rl_done = 1;
|
rl_done = 1;
|
||||||
// write (1, rl_line_buffer, ft_strlen(rl_line_buffer) + 1);
|
g_switch_heredoc_sigint = 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();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int set_signals_handling(struct sigaction *signal_behaviour)
|
void set_signals_behaviour(void)
|
||||||
{
|
{
|
||||||
signal_behaviour->sa_handler = sigint_handler_interactive;
|
struct sigaction signal_behaviour;
|
||||||
sigaction(SIGINT, signal_behaviour, NULL);
|
|
||||||
signal_behaviour->sa_handler = SIG_IGN;
|
ft_bzero(&signal_behaviour, sizeof signal_behaviour);
|
||||||
sigaction(SIGQUIT, signal_behaviour, NULL);
|
signal_behaviour.sa_handler = SIG_IGN;
|
||||||
return (1);
|
sigaction(SIGQUIT, &signal_behaviour, NULL);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user