Skip to content

Commit eef52f6

Browse files
committed
minishell 1.0
1 parent 1c7e25d commit eef52f6

File tree

5 files changed

+21
-21
lines changed

5 files changed

+21
-21
lines changed

inc/minishell.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,14 +93,13 @@ int start_line(t_msh **msh, char *read_line, char ***lines);
9393
void put_error(char *bash, char *file, char *error);
9494
int export_parse(t_cmd *cmd, char *array, int j, int control);
9595
int tokenize(t_msh *msh, t_cmd **cmd, char *read_line);
96-
void child_wait_signal(void);
9796

9897
///////////pipes/////////////////
9998

10099
t_pipe *init_pipes(void);
101100
void setfds(t_pipe *pipe, int i);
102101
void setpipes(t_pipe *pipes, int i);
103-
void wait_signal(void);
102+
void wait_signal(int i);
104103
char **ft_split_pipes(char *s);
105104

106105
//////////redirection///////////

src/execute_cmd.c

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ static int cmd_type(t_cmd *cmd, char *temp_cmd)
3838

3939
static void cmd_process(t_cmd *cmd, char *temp_cmd)
4040
{
41-
child_wait_signal();
4241
if (dup2(cmd->pipes->in, STDIN_FILENO) == -1)
4342
exit_error("Error DUP", 23);
4443
if (dup2(cmd->pipes->out, STDOUT_FILENO) == -1)
@@ -62,10 +61,13 @@ static void wait_exit(t_pipe *pipes, int i)
6261
waitpid(-1, &g_error, 0);
6362
if (WIFEXITED(g_error))
6463
g_error = WEXITSTATUS(g_error);
65-
if (g_error != 0 && g_error != 1
66-
&& g_error != 127 && g_error != 2)
64+
if (g_error == 2 || g_error == 3)
65+
g_error = g_error + 128;
66+
else if (g_error != 0 && g_error != 1
67+
&& g_error != 127 && g_error != 13)
6768
perror(NULL);
6869
}
70+
wait_signal(1);
6971
}
7072

7173
void execute_nonpipe(t_cmd *cmd, char *temp_cmd)
@@ -98,6 +100,7 @@ void execute_cmd(t_cmd **cmd, t_pipe *pipes)
98100
char *temp_cmd;
99101

100102
i = 1;
103+
wait_signal(0);
101104
while ((*cmd) && i)
102105
{
103106
temp_cmd = str_noquotes((*cmd)->cmd);

src/minishell.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ int main(int ac, char **av, char **ev)
4949
many_args(av);
5050
g_error = 0;
5151
msh = init(ev);
52-
wait_signal();
52+
wait_signal(1);
5353
recive_arguments(msh);
5454
return (0);
5555
}

src/redir_file.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ int get_from_file(t_cmd *cmd, char *file)
4545
fd = open(ft_strjoin(temp, file), O_RDONLY);
4646
if (fd == -1)
4747
{
48-
put_error("bash", file, NULL);
48+
put_error("bash", file, "No such file or directory");
4949
pipe(pfd);
5050
if (dup2(pfd[1], cmd->pipes->out) == -1)
5151
exit_error("Error dup", 50);

src/signals.c

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ static void signal_handler(int signal)
2020
write(1, "\n", 1);
2121
rl_on_new_line();
2222
rl_redisplay();
23-
// kill(0, SIGTERM);
2423
g_error = 1;
2524
}
2625
else if (signal == SIGQUIT)
@@ -33,27 +32,26 @@ static void signal_handler(int signal)
3332

3433
static void child_handler(int signal)
3534
{
36-
if (signal == SIGQUIT)
37-
return ;
35+
if (signal == SIGINT)
36+
g_error = 130;
37+
else if (signal == SIGQUIT)
38+
{
39+
write(1, "Quit: 3\n", 10);
40+
g_error = 131;
41+
}
3842
return ;
3943
}
4044

41-
void wait_signal(void)
45+
void wait_signal(int i)
4246
{
4347
struct sigaction sa;
4448

45-
sa.sa_handler = &signal_handler;
49+
if (i)
50+
sa.sa_handler = &signal_handler;
51+
else
52+
sa.sa_handler = &child_handler;
4653
sa.sa_flags = SA_RESTART;
4754
sigaction(SIGINT, &sa, NULL);
4855
sigaction(SIGQUIT, &sa, NULL);
4956
sigaction(SIGTERM, &sa, NULL);
5057
}
51-
52-
void child_wait_signal(void)
53-
{
54-
struct sigaction sa;
55-
56-
sa.sa_handler = &child_handler;
57-
sa.sa_flags = SA_RESTART;
58-
sigaction(SIGQUIT, &sa, NULL);
59-
}

0 commit comments

Comments
 (0)