Skip to content

Commit b8359cf

Browse files
committed
refactor: fix signal exit status between enter new line
1 parent 50d20b3 commit b8359cf

File tree

6 files changed

+33
-30
lines changed

6 files changed

+33
-30
lines changed

shell.h

+3-1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
#include <termios.h>
2020

2121
#define HISTORY_SIZE 10
22+
#define NOTSIG 1
23+
#define RSTSIG 0
2224

2325
extern volatile sig_atomic_t g_signal_received;
2426

@@ -102,7 +104,7 @@ void term_clear_screen();
102104
void handle_input(char *buf, size_t *len, size_t max_len);
103105

104106
// SINGAL FUNCTIONS
105-
void init_readline_for_signal(int *exit_stauts);
107+
void init_readline_for_signal(void);
106108
void setup_signals(void);
107109
void handle_sigint(int sig);
108110
void set_signal(int signum, void (*handler)(int), int flags);

src/executor/executor_command_group.c

+4-4
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,10 @@ int exec_command_group(t_command_group *command_group, t_env *env_list, char **e
1616
{
1717
t_cmd *cmd = (t_cmd *)cmds->content;
1818
if ((cmd->tokens) && (cmd->tokens->content) &&(ft_strcmp((char *)cmd->tokens->content, "exit") == 0 ||
19-
ft_strcmp((char *)cmd->tokens->content, "cd") == 0))
20-
{
21-
exit_status = exec_cmd_builtin(cmd, env_list);
22-
}
19+
ft_strcmp((char *)cmd->tokens->content, "cd") == 0)) //unset//export
20+
{
21+
exit_status = exec_cmd_builtin(cmd, env_list);
22+
}
2323

2424
else
2525
{

src/main.c

+15-9
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
/* By: pchung <[email protected]> +#+ +:+ +#+ */
77
/* +#+#+#+#+#+ +#+ */
88
/* Created: 2025/02/26 23:57:54 by pchung #+# #+# */
9-
/* Updated: 2025/03/05 13:47:27 by pchung ### ########.fr */
9+
/* Updated: 2025/03/05 23:06:54 by pchung ### ########.fr */
1010
/* */
1111
/* ************************************************************************** */
1212

@@ -127,19 +127,27 @@ void run_shell(t_env *env_list, char **envp)
127127
size_t len;
128128
int exit_stauts=0;
129129
t_ast *current_AST;
130-
131-
term_clear_screen();
130+
//term_clear_screen();
132131
while (running)
133132
{
134-
init_readline_for_signal(&exit_stauts);
133+
if (g_signal_received == SIGINT)
134+
{
135+
exit_stauts = 130;
136+
}
137+
else if (g_signal_received == NOTSIG){
138+
exit_stauts = 0;
139+
}
140+
141+
init_readline_for_signal();
135142
setup_signals();
136143
ft_memset(buf, 0, sizeof(buf));
137144
len = 0;
145+
138146
handle_input(buf, &len, sizeof(buf));
139-
g_signal_received = 0;
140-
// printf("start running\n"); //debugs
147+
141148
if (len > 0)
142149
{
150+
g_signal_received = RSTSIG;
143151
current_AST = get_ast(buf, env_list, &exit_stauts);
144152
//debug_ast(current_AST);
145153
exit_stauts=exec_ast(current_AST, env_list, envp);
@@ -152,14 +160,12 @@ void run_shell(t_env *env_list, char **envp)
152160
}
153161
}
154162

163+
155164
int main(int argc, char **argv, char **envp)
156165
{
157-
158166
(void)argc;
159167
(void)argv;
160-
161168
t_env *env_list = init_env_list(envp); // Initialize environment variables
162-
163169
struct termios orig_termios;
164170
setup_terminal(&orig_termios);
165171
run_shell(env_list, envp); // Pass env_list

src/signal/signal.c

+3-4
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
/* By: pchung <[email protected]> +#+ +:+ +#+ */
77
/* +#+#+#+#+#+ +#+ */
88
/* Created: 2025/02/12 19:57:16 by pchung #+# #+# */
9-
/* Updated: 2025/03/05 13:48:29 by pchung ### ########.fr */
9+
/* Updated: 2025/03/05 21:17:43 by pchung ### ########.fr */
1010
/* */
1111
/* ************************************************************************** */
1212

@@ -16,18 +16,17 @@ volatile sig_atomic_t g_signal_received = 0;
1616

1717
static int event_hook_readline(void);
1818

19-
void init_readline_for_signal(int *exit_stauts)
19+
void init_readline_for_signal(void)
2020
{
2121
rl_outstream = stderr;
2222
rl_done = 0;
2323
rl_catch_signals = 0;
2424
rl_event_hook = event_hook_readline;
25-
*exit_stauts = 130;
2625
}
2726

2827
static int event_hook_readline(void)
2928
{
30-
if (g_signal_received == 1)
29+
if (g_signal_received == SIGINT)
3130
{
3231
rl_replace_line("", 0);
3332
rl_done = 1;

src/signal/signal_2.c

+3-4
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33
/* ::: :::::::: */
44
/* signal_2.c :+: :+: :+: */
55
/* +:+ +:+ +:+ */
6-
/* By: jidler <jidler@student.42tokyo.jp> +#+ +:+ +#+ */
6+
/* By: pchung <pchung@student.42.fr> +#+ +:+ +#+ */
77
/* +#+#+#+#+#+ +#+ */
88
/* Created: 2025/03/04 17:07:04 by jidler #+# #+# */
9-
/* Updated: 2025/03/04 17:07:06 by jidler ### ########.fr */
9+
/* Updated: 2025/03/05 22:59:19 by pchung ### ########.fr */
1010
/* */
1111
/* ************************************************************************** */
1212

@@ -15,8 +15,7 @@
1515
void handle_sigint(int sig)
1616
{
1717
(void)sig;
18-
g_signal_received = 1;
19-
write(STDOUT_FILENO, "^C", 3);
18+
g_signal_received = SIGINT;
2019
}
2120

2221
void init_signal(void (*handler_for_sigint)(int),

src/termcaps/termcaps.c

+5-8
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33
/* ::: :::::::: */
44
/* termcaps.c :+: :+: :+: */
55
/* +:+ +:+ +:+ */
6-
/* By: jidler <jidler@student.42tokyo.jp> +#+ +:+ +#+ */
6+
/* By: pchung <pchung@student.42.fr> +#+ +:+ +#+ */
77
/* +#+#+#+#+#+ +#+ */
88
/* Created: 2025/02/26 00:08:24 by pchung #+# #+# */
9-
/* Updated: 2025/03/04 16:15:02 by jidler ### ########.fr */
9+
/* Updated: 2025/03/05 23:07:53 by pchung ### ########.fr */
1010
/* */
1111
/* ************************************************************************** */
1212

@@ -20,18 +20,15 @@ void exit_program()
2020

2121

2222
void handle_input(char *buf, size_t *len, size_t buffsize) {
23-
char *str;
23+
g_signal_received = NOTSIG;
24+
char *str;
2425
str = readline("minishell ❤ ");
2526
if (str == NULL)
2627
{
2728
write(STDOUT_FILENO, "exit\n", 5);
2829
exit(0);
2930
}
30-
else if (ft_strcmp(str, "\n") == 0)
31-
{
32-
write(STDOUT_FILENO, "\n", 1);
33-
return;
34-
}
31+
3532
add_history(str);
3633
ft_strlcpy(buf, str, buffsize);
3734
*len = ft_strlen(buf);

0 commit comments

Comments
 (0)