From 52c33abb16331d8dd0bccd866d87d27bc7f48db7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kha=C3=AFs=20COLIN?= Date: Fri, 2 May 2025 12:04:06 +0200 Subject: [PATCH] fix(sig): incorrect retvalue when doing C-c on empty line Now correctly return 130 Closes #196 --- src/minishell.c | 9 +++++---- src/sig/sig.h | 3 +-- src/sig/sig_handlers.c | 13 ++++++++----- src/sig/sig_handlers.h | 4 ++-- 4 files changed, 16 insertions(+), 13 deletions(-) diff --git a/src/minishell.c b/src/minishell.c index ea045da..7bdd6ac 100644 --- a/src/minishell.c +++ b/src/minishell.c @@ -5,8 +5,8 @@ /* +:+ +:+ +:+ */ /* By: kcolin +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ -/* Created: 2025/04/29 15:13/45 by kcolin #+# #+# */ -/* Updated: 2025/04/29 15:13:45 by kcolin ### ########.fr */ +/* Created: 2025/05/02 11:53:53 by kcolin #+# #+# */ +/* Updated: 2025/05/02 12:07:42 by kcolin ### ########.fr */ /* */ /* ************************************************************************** */ @@ -24,6 +24,7 @@ #include "postprocess/fieldsplit/fieldsplit.h" #include "postprocess/expansion/expand_wildcard.h" #include "sig/sig.h" +#include "sig/sig_handlers.h" #include "parser/cmd/cmd_debug.h" /* @@ -88,6 +89,8 @@ int main(int argc, char *argv[], char **envp) line = get_command(&app); while (line != NULL) { + if (g_signum != 0) + app.last_return_value = get_sig_retvalue(); cmd = minishell_parse(&app, line); free(line); debug_command(cmd, &app); @@ -95,8 +98,6 @@ int main(int argc, char *argv[], char **envp) cmd_destroy(cmd); if (retvalue == SUBPROCESS) break ; - if (g_signum != 0) - readline_reset(); line = get_command(&app); } env_destroy(app.env); diff --git a/src/sig/sig.h b/src/sig/sig.h index 958ad27..a61dc44 100644 --- a/src/sig/sig.h +++ b/src/sig/sig.h @@ -6,7 +6,7 @@ /* By: kcolin +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/02/19 18:21:55 by jguelen #+# #+# */ -/* Updated: 2025/04/17 12:05:05 by kcolin ### ########.fr */ +/* Updated: 2025/05/02 11:53:24 by kcolin ### ########.fr */ /* */ /* ************************************************************************** */ @@ -32,6 +32,5 @@ extern int g_signum; int set_interactive_mode_sig_handling(void); int set_exec_mode_sig_handling(void); int set_here_doc_mode_sig_handling(void); -void readline_reset(void); #endif diff --git a/src/sig/sig_handlers.c b/src/sig/sig_handlers.c index 10b6f1d..a1ab13d 100644 --- a/src/sig/sig_handlers.c +++ b/src/sig/sig_handlers.c @@ -6,7 +6,7 @@ /* By: kcolin +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/04/17 12:01:39 by kcolin #+# #+# */ -/* Updated: 2025/04/29 15:13:42 by kcolin ### ########.fr */ +/* Updated: 2025/05/02 12:03:49 by kcolin ### ########.fr */ /* */ /* ************************************************************************** */ @@ -28,15 +28,17 @@ void sig_interactive(int signum) ft_printf("\n"); rl_on_new_line(); rl_redisplay(); + g_signum = signum; } } -void readline_reset(void) +int get_sig_retvalue(void) { - rl_replace_line("", 0); - ft_printf("\n"); - rl_redisplay(); + int retvalue; + + retvalue = 128 + g_signum; g_signum = 0; + return (retvalue); } /* @@ -46,5 +48,6 @@ void sig_cmd(int signum, siginfo_t *siginfo, void *context) { (void)context; (void)siginfo; + ft_printf("\n"); g_signum = signum; } diff --git a/src/sig/sig_handlers.h b/src/sig/sig_handlers.h index e58eba8..dfa4b9b 100644 --- a/src/sig/sig_handlers.h +++ b/src/sig/sig_handlers.h @@ -6,7 +6,7 @@ /* By: kcolin +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/04/17 12:01:25 by kcolin #+# #+# */ -/* Updated: 2025/04/17 12:03:07 by kcolin ### ########.fr */ +/* Updated: 2025/05/02 12:03:53 by kcolin ### ########.fr */ /* */ /* ************************************************************************** */ @@ -16,7 +16,7 @@ # include "signal.h" void sig_interactive(int signum); -void readline_reset(void); +int get_sig_retvalue(void); void sig_cmd(int signum, siginfo_t *siginfo, void *context); #endif // SIG_HANDLERS_H