From dad89c923e284020b338c174c4b5a5e3ea1f3066 Mon Sep 17 00:00:00 2001 From: tomoron Date: Wed, 27 Mar 2024 14:30:32 +0100 Subject: [PATCH] changement signaux et reactivation du echoctl quand exit --- srcs/.commands.c.swp | Bin 0 -> 12288 bytes srcs/.exec.c.swp | Bin 0 -> 12288 bytes srcs/exec.c | 5 ++++- srcs/here_doc.c | 4 ++-- srcs/main.c | 8 ++++++-- srcs/minishell.h | 4 +++- srcs/pipe.c | 3 ++- srcs/signal_handler.c | 26 +++++++++++++++++++++++--- srcs/utils.c | 3 ++- 9 files changed, 42 insertions(+), 11 deletions(-) create mode 100644 srcs/.commands.c.swp create mode 100644 srcs/.exec.c.swp diff --git a/srcs/.commands.c.swp b/srcs/.commands.c.swp new file mode 100644 index 0000000000000000000000000000000000000000..94fa74ead686b3a6c302253c8662aa71007a1792 GIT binary patch literal 12288 zcmeI2PiP!f9LHaxwVm47swmRa+bqQWll|MYnn`yt)}loUwX`A>T_(G4vtxE40=VIv^d84oC;21JVKMz-{P&)*$4cI|%t{4}!=4|AW8(KRHOq z3t$Xfy@!wma2Q-0BV-9Y48A`=$m`%WV1PC_4W0&7kOPx|f`ee=ZbE(o-+?u71-t<+ zfev8c95@S}0VPlXr4K9O=-~xCK%z#Hg0_*|ncMS!2i{Oi$pP;R<5d>HFvqgXoY%@b)(_rs=Q`~DCpyN;nUiUvp#7zm-ezGBIx!L0>l=Vhku_mz zW(ZMSo&zN#qJ#%QMUb5pvS{fIm}FRstR~)@t2J%Qs6i;@@=uzF`UWmq_rhg+Sd;%roZ57^ehO7`##is~D-F!!Q4nf#UX5`Pne&E@o zgZn)Z?sw#sYx&z@up|)p~yG4 z|1E|e;am5HZ#&O0>^qc0Ym&NIZ+9Dvj)!ml=3C?VB|k$myLQn`feY^96$qa1G&Gkr zR9Y^UrwYX*h4L|4oK{QI>Qs@=EmK3Y8!WeIhf^n$NtE&FU3f2Av;=}Du-$tEi$`hc zQMFuFOGk$a(qxt^1~(x`Z*9q0h>0%NC5Zty*yrZfHk|^;DjXM&Iiw9+2aMunB I4qbu#3(X|<>Hq)$ literal 0 HcmV?d00001 diff --git a/srcs/.exec.c.swp b/srcs/.exec.c.swp new file mode 100644 index 0000000000000000000000000000000000000000..be3c813b3fe01734e661be3e3643383785d5237a GIT binary patch literal 12288 zcmeI2Piz!b9LFEvA4VvG9weMzTT^FuyMNn&ENum$m`#KP`_K4?bvpaD`|QrlIx}0S zEf5ntm>7*QUOZ@s@uuNqqKPLB2eb!HCMMkU42dT%B!1tUH?!Na6cjF)H_fN>@4fH) zz3=b$ULc+M!ffRPJ(w#H9J>j*_V?EM`E6IWFO_zZ&~rTBbH$rYkJ6F-xzUp4E_m%G zb6BqK_ilb(3FeQnU@`Psd560^Xs~88ANY2VXJ?t6vwQc|PqhQuf%|Zv9oDnY_mPoO zQ7-ktfqwe*Q#1D=sJm(hv;*1!?SOVbJD?rV4rm9o0}q=6VQUMyfS|Xkz#Vnovf-?5 z^+`LR9ncPF2ebp)0quZxKs%rv&< zANX+>A&X!ixY|d^S@0bAZ6_h`gNwicb6^(i1ADI>!6Zn7XF)%B1l)Lnkn7-gum*ksSHWlCQ*Z%Hfx{pR_JCdBrhz`-d+;5& z488#$f+a8uroa%`1OD7j$QAH2_z8RkE`d+L2VfPf03TRj7UaRL#|ilrd<#AY?}5`` z7Q6t)z%yVs=mUQ|27kdtFb`e>N5Nr`0eit7unXKmj&6YKU=4f;-T`j`kw2Nkhp+~9 z$l8Jbr32^A5hGw>mDvr?4x45nbqEjmf@?L+sme>IW-8OeG`g=gEVtHVewDi+^DR5% zOKg4X%E`Mnc7jHBqQz?g9j65hRreV)lZQf1-qd?Ez%%h40UJD%!Bx`qb^fN3>(WDW zJQqDyh;gRDn~a*Aj#1mGRc){BhACq3xLeD|r0V9tsWuO(X?s4SwYJk@wbUE#fY9J| zbFOk6j+{L5^5iiy2(7Rkr0CEPotvI~g zPfZ`0o|%e!NO@}ZuWu@(E5}9a&Ug^)n*JG!hp@6^ALctuhoabqsZ8ZP%w2rbhUgpz z=@nYTln-~ggy@uenaoE2j5;dkEDxh@#mFekBuOY;U8T{T$ev2BNO!7?@!df;5d^DMFAmpE=$Vi+!%vea{gsL`-6uqI2Y89J1vv z1oG|e`7q)(Eh|hEcpb)zsCZDFZ}Voz-AE84WGBSLvJ;`V$lR2wBB{dNYPj5zOK_Mb zEk#5q`HeLx>lu!E?eI>$Rxp)jz@j>pBW%)mlOgUL7e)|~)wv&pVy;~+#mqJ>Nwp_* zsw&z!I)zp0QGx51rQEi9WV|ckNEpf&i%6W3I*H3bYz8#iXT@5U8=z<;@-2OrSrBU^ z3JzBy8!gLcu3Bgt*Jon7VPl_Di#XOq7(!Nf1}Tc&sh|qr_Qh+onD2YOIZ*ffMY-=O zw^h$<5nbgq6)j95EG8l7VLYN%dM(~!QcrBgDwe3~vJ)yPA~LD3hUBz=yyG6tQj9GJ zuZAK7vFyZplnbY`*syaoET5*+UDNNKj6v?&%{KPrv0ypKi@h}0m>|j1f#l2ITw?(L za85(>K^-)m7lIG)hy`a_H7jJbGA$KKqxr%}zO+?nR3)# lT|}o?@Lx&Ajmza&5?A8Di~ACcg}cv@;DcHxX)L-t`3LCC9#Q}R literal 0 HcmV?d00001 diff --git a/srcs/exec.c b/srcs/exec.c index 18b9d8e..2159f76 100755 --- a/srcs/exec.c +++ b/srcs/exec.c @@ -6,7 +6,7 @@ /* By: marde-vr +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/02/07 14:12:49 by tomoron #+# #+# */ -/* Updated: 2024/03/26 09:11:52 by marde-vr ### ########.fr */ +/* Updated: 2024/03/26 17:33:20 by tomoron ### ########.fr */ /* */ /* ************************************************************************** */ @@ -90,6 +90,8 @@ void exec_commands(t_msh *msh) } if (!g_return_code && WIFEXITED(status)) g_return_code = WEXITSTATUS(status); + if(WIFSIGNALED(status) && WTERMSIG(status) == SIGQUIT) + printf("Quit (core dumped)\n"); i = 0; while (i < cmd_count) { @@ -103,4 +105,5 @@ void exec_commands(t_msh *msh) msh->pids = 0; signal(SIGINT, signal_handler_interactive); signal(SIGQUIT, signal_handler_interactive); + set_echoctl(0); } diff --git a/srcs/here_doc.c b/srcs/here_doc.c index 1aa1427..cf43ebe 100644 --- a/srcs/here_doc.c +++ b/srcs/here_doc.c @@ -6,7 +6,7 @@ /* By: marde-vr +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/03/24 17:44:32 by marde-vr #+# #+# */ -/* Updated: 2024/03/26 09:07:01 by marde-vr ### ########.fr */ +/* Updated: 2024/03/26 17:52:26 by tomoron ### ########.fr */ /* */ /* ************************************************************************** */ @@ -17,7 +17,6 @@ void get_here_doc_input(t_msh *msh, char *eof) char *line; line = NULL; - signal(SIGINT, signal_handler_here_doc); while (1) { free(line); @@ -40,6 +39,7 @@ void here_doc_child(t_msh *msh, char *eof, char *here_doc_file) { here_doc_variables(1, 0, msh); here_doc_variables(1, 1, here_doc_file); + signal(SIGINT, signal_handler_here_doc); get_here_doc_input(msh, eof); close(msh->in_fd); free(here_doc_file); diff --git a/srcs/main.c b/srcs/main.c index 084ce82..3ed0347 100755 --- a/srcs/main.c +++ b/srcs/main.c @@ -6,7 +6,7 @@ /* By: marde-vr +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/02/02 21:59:20 by tomoron #+# #+# */ -/* Updated: 2024/03/26 14:06:33 by tomoron ### ########.fr */ +/* Updated: 2024/03/26 17:25:20 by tomoron ### ########.fr */ /* */ /* ************************************************************************** */ @@ -107,9 +107,12 @@ int init_minishell(t_msh **msh, int argc, char **argv, char **envp) (void)argc; (void)argv; (*msh)->env = get_env(envp); + tcgetattr(1, &t_p); + (*msh)->echoctl = t_p.c_lflag & ECHOCTL; signal(SIGINT, signal_handler_interactive); signal(SIGQUIT, signal_handler_interactive); - t_p.c_lflag = t_p.c_lflag & (~ECHOCTL); + if(set_echoctl(0)) + ft_exit(*msh, 1); return (0); } @@ -135,6 +138,7 @@ int main(int argc, char **argv, char **envp) free_cmd(msh->cmds); } rl_clear_history(); + set_echoctl(msh->echoctl); free_msh(msh); ft_printf("exit\n"); return (g_return_code); diff --git a/srcs/minishell.h b/srcs/minishell.h index 3dbc39b..525d36d 100755 --- a/srcs/minishell.h +++ b/srcs/minishell.h @@ -6,7 +6,7 @@ /* By: marde-vr +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/02/04 17:31:38 by tomoron #+# #+# */ -/* Updated: 2024/03/26 09:07:38 by marde-vr ### ########.fr */ +/* Updated: 2024/03/26 17:13:30 by tomoron ### ########.fr */ /* */ /* ************************************************************************** */ @@ -60,6 +60,7 @@ typedef struct s_msh int in_fd; int out_fd; int locked_return_code; + int echoctl; } t_msh; extern int g_return_code; @@ -116,5 +117,6 @@ void *here_doc_variables(int write, int index, void *data); char *get_tmp_file_name(t_msh *msh); int contains_newline(char *str); void parse_var(t_msh *msh, char *line); +int set_echoctl(int value); #endif diff --git a/srcs/pipe.c b/srcs/pipe.c index e5a7867..ffb9d15 100644 --- a/srcs/pipe.c +++ b/srcs/pipe.c @@ -6,7 +6,7 @@ /* By: marde-vr +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/03/05 18:17:25 by marde-vr #+# #+# */ -/* Updated: 2024/03/26 08:40:54 by marde-vr ### ########.fr */ +/* Updated: 2024/03/26 17:21:57 by tomoron ### ########.fr */ /* */ /* ************************************************************************** */ @@ -45,6 +45,7 @@ void execute_command(t_msh *msh, char **cmd_args, int i) } if (msh->cmds->token) { + set_echoctl(msh->echoctl); env = env_to_char_tab(msh->env); execve(msh->cmds->token, cmd_args, env); ft_free_str_arr(env); diff --git a/srcs/signal_handler.c b/srcs/signal_handler.c index 111caf1..4a72cea 100644 --- a/srcs/signal_handler.c +++ b/srcs/signal_handler.c @@ -6,7 +6,7 @@ /* By: marde-vr +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/03/22 14:31:13 by tomoron #+# #+# */ -/* Updated: 2024/03/26 08:42:47 by marde-vr ### ########.fr */ +/* Updated: 2024/03/26 17:59:37 by tomoron ### ########.fr */ /* */ /* ************************************************************************** */ @@ -53,9 +53,29 @@ void signal_handler_here_doc(int signum) ft_exit(msh, 1); } } +int set_echoctl(int value) +{ + struct termios t_p; + if(tcgetattr(1, &t_p)) + { + ft_printf_fd(2, "minishell: an error occured while setting the local fl\ +ags"); + return(1); + } + if(value) + t_p.c_lflag = t_p.c_lflag | ECHOCTL; + else + t_p.c_lflag = t_p.c_lflag & (~ECHOCTL); + if(tcsetattr(1, TCSANOW, &t_p)) + { + ft_printf_fd(2, "minishell: an error occured while setting the local fl\ + ags"); + return(1); + } + return(0); +} void signal_handler_command(int signum) { - if (signum == SIGQUIT) - printf("^\\Quit (core dumped)\n"); + (void)signum; } diff --git a/srcs/utils.c b/srcs/utils.c index dda5234..75f8acd 100644 --- a/srcs/utils.c +++ b/srcs/utils.c @@ -6,7 +6,7 @@ /* By: marde-vr +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/03/05 18:19:26 by marde-vr #+# #+# */ -/* Updated: 2024/03/25 12:33:44 by tomoron ### ########.fr */ +/* Updated: 2024/03/26 17:23:51 by tomoron ### ########.fr */ /* */ /* ************************************************************************** */ @@ -20,6 +20,7 @@ void free_msh(t_msh *msh) free(msh->pids); free(msh->fds); free_cmd(msh->cmds); + set_echoctl(msh->echoctl); free(msh); } }