fix (heredoc): handling signals in heredoc better
This commit is contained in:
parent
72c66ffd56
commit
1679624f8d
@ -1,12 +1,12 @@
|
|||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
/* */
|
/* */
|
||||||
/* :::::::: */
|
/* ::: :::::::: */
|
||||||
/* signals.h :+: :+: */
|
/* signals.h :+: :+: :+: */
|
||||||
/* +:+ */
|
/* +:+ +:+ +:+ */
|
||||||
/* By: whaffman <whaffman@student.codam.nl> +#+ */
|
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||||
/* +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2025/02/19 12:26:09 by whaffman #+# #+# */
|
/* Created: 2025/02/19 12:26:09 by whaffman #+# #+# */
|
||||||
/* Updated: 2025/03/07 17:26:57 by whaffman ######## odam.nl */
|
/* Updated: 2025/03/18 14:12:49 by qmennen ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -22,5 +22,6 @@ void signal_init_child(void);
|
|||||||
void signal_init_parent(void);
|
void signal_init_parent(void);
|
||||||
void signal_init_minishell(void);
|
void signal_init_minishell(void);
|
||||||
void signal_init_heredoc(void);
|
void signal_init_heredoc(void);
|
||||||
|
void signal_init_heredoc_parent(void);
|
||||||
|
|
||||||
#endif // SIGNALS_H
|
#endif // SIGNALS_H
|
||||||
|
|||||||
@ -1,12 +1,12 @@
|
|||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
/* */
|
/* */
|
||||||
/* :::::::: */
|
/* ::: :::::::: */
|
||||||
/* redirect_process_heredoc.c :+: :+: */
|
/* redirect_process_heredoc.c :+: :+: :+: */
|
||||||
/* +:+ */
|
/* +:+ +:+ +:+ */
|
||||||
/* By: qmennen <qmennen@student.codam.nl> +#+ */
|
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||||
/* +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2025/02/26 16:46:32 by qmennen #+# #+# */
|
/* Created: 2025/02/26 16:46:32 by qmennen #+# #+# */
|
||||||
/* Updated: 2025/03/07 17:44:38 by whaffman ######## odam.nl */
|
/* Updated: 2025/03/18 14:32:19 by qmennen ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -44,8 +44,9 @@ int fork_for_heredoc(t_minishell *msh, t_token *heredoc, t_token *delim)
|
|||||||
process_heredoc(msh, heredoc, delim);
|
process_heredoc(msh, heredoc, delim);
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
signal_init_minishell();
|
signal_init_heredoc_parent();
|
||||||
waitpid(pid, &status, 0);
|
waitpid(pid, &status, 0);
|
||||||
|
signal_init_minishell();
|
||||||
heredoc->type = T_REDIRECT_IN;
|
heredoc->type = T_REDIRECT_IN;
|
||||||
delim->value = ft_strdup_safe(msh, ".ms_heredoc");
|
delim->value = ft_strdup_safe(msh, ".ms_heredoc");
|
||||||
return (0);
|
return (0);
|
||||||
@ -65,7 +66,12 @@ int process_heredoc(t_minishell *msh, t_token *heredoc, t_token *delim)
|
|||||||
while (TRUE)
|
while (TRUE)
|
||||||
{
|
{
|
||||||
line = readline(">");
|
line = readline(">");
|
||||||
if ((*line && ft_strcmp(line, delim->value) == 0) || !line)
|
if (!line)
|
||||||
|
{
|
||||||
|
error_msg("warning: here-document delimited by end-of-file, wanted", delim->value);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if ((*line && ft_strcmp(line, delim->value) == 0))
|
||||||
break ;
|
break ;
|
||||||
if (!*line)
|
if (!*line)
|
||||||
ft_strlcat(line, "\n", 1);
|
ft_strlcat(line, "\n", 1);
|
||||||
|
|||||||
@ -1,12 +1,12 @@
|
|||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
/* */
|
/* */
|
||||||
/* :::::::: */
|
/* ::: :::::::: */
|
||||||
/* signal.c :+: :+: */
|
/* signal.c :+: :+: :+: */
|
||||||
/* +:+ */
|
/* +:+ +:+ +:+ */
|
||||||
/* By: whaffman <whaffman@student.codam.nl> +#+ */
|
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||||
/* +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2025/02/19 12:18:47 by whaffman #+# #+# */
|
/* Created: 2025/02/19 12:18:47 by whaffman #+# #+# */
|
||||||
/* Updated: 2025/03/07 17:34:59 by whaffman ######## odam.nl */
|
/* Updated: 2025/03/18 14:17:03 by qmennen ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -24,8 +24,7 @@ void sigint_minishell_handler(int signum)
|
|||||||
void sigint_heredoc_handler(int signum)
|
void sigint_heredoc_handler(int signum)
|
||||||
{
|
{
|
||||||
(void)signum;
|
(void)signum;
|
||||||
rl_on_new_line();
|
ft_putstr_fd("\n", 1);
|
||||||
rl_replace_line("", 0);
|
|
||||||
exit(130);
|
exit(130);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2025/02/26 15:39:01 by whaffman #+# #+# */
|
/* Created: 2025/02/26 15:39:01 by whaffman #+# #+# */
|
||||||
/* Updated: 2025/03/06 14:42:28 by qmennen ### ########.fr */
|
/* Updated: 2025/03/18 14:11:50 by qmennen ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -35,3 +35,9 @@ void signal_init_heredoc(void)
|
|||||||
signal(SIGINT, sigint_heredoc_handler);
|
signal(SIGINT, sigint_heredoc_handler);
|
||||||
signal(SIGQUIT, SIG_IGN);
|
signal(SIGQUIT, SIG_IGN);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void signal_init_heredoc_parent(void)
|
||||||
|
{
|
||||||
|
signal(SIGINT, SIG_IGN);
|
||||||
|
signal(SIGQUIT, SIG_IGN);
|
||||||
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user