diff --git a/src/exec/exec.c b/src/exec/exec.c index 4a3af89..02abd66 100644 --- a/src/exec/exec.c +++ b/src/exec/exec.c @@ -1,10 +1,13 @@ +#include #include #include #include #include #include -#include "../cmd/cmd.h" #include + +#include "../signal/signal.h" +#include "../cmd/cmd.h" #include "../env/env.h" #include "../utils/utils.h" #include "../../lib/bozolib/bozolib.h" @@ -30,13 +33,15 @@ int execute(lst** cmds, cmd_t* cmd, lst** env) dup2(cmd->output[0], 1); dup2(cmd->input[0], 0); lst_iter(cmds, &cmd_close); + signal(SIGINT, SIG_DFL); + signal(SIGQUIT, SIG_DFL); execve(cmd->executable, cmd->args, env_str); dprintf(2, "execve failed\n"); free((void**)env_str); return 1; } - else - cmd->pid = pid; + cmd->pid = pid; + signal(SIGINT, SIG_IGN); return 0; } @@ -136,5 +141,6 @@ int cmds_list_exec(lst** cmds, data_t *data) current = current->next; } cmds_wait(cmds, data); + signal(SIGINT, ctrlc); return 0; } diff --git a/src/main.c b/src/main.c index a9e9a13..bb0e52b 100644 --- a/src/main.c +++ b/src/main.c @@ -1,9 +1,12 @@ -#include "./env/env.h" -#include "./input/input.h" #include #include +#include + +#include "./signal/signal.h" +#include "./input/input.h" #include "alias/alias.h" #include "cmd/cmd.h" +#include "./env/env.h" #include "./exec/exec.h" #include "./parsing/parsing.h" #include "./data/data.h" @@ -32,6 +35,8 @@ int main(int ac, char **av, char **env_str) lst_clear(data.env, &env_del); return 1; } + signal(SIGINT, ctrlc); + signal(SIGQUIT, SIG_IGN); line = get_user_input(&data); while (line != NULL) { diff --git a/src/signal/signal.c b/src/signal/signal.c new file mode 100644 index 0000000..bc72997 --- /dev/null +++ b/src/signal/signal.c @@ -0,0 +1,17 @@ +#include "./signal.h" + +void ctrlc(int num) +{ + printf("\n"); + rl_replace_line("", 0); + rl_on_new_line(); + rl_redisplay(); + (void) num; +} + +void quit(int num) +{ + (void) num; + // printf("Quit (core dumped)\n"); +} + diff --git a/src/signal/signal.h b/src/signal/signal.h new file mode 100644 index 0000000..289cc02 --- /dev/null +++ b/src/signal/signal.h @@ -0,0 +1,7 @@ +#pragma once + +#include +#include + +void quit(int num); +void ctrlc(int num);