add: ctrl + c and ctrl + \

This commit is contained in:
starnakin 2023-07-05 13:47:28 +02:00
parent 96f7108555
commit e15216ce85
4 changed files with 40 additions and 5 deletions

View File

@ -1,10 +1,13 @@
#include <signal.h>
#include <sys/wait.h> #include <sys/wait.h>
#include <limits.h> #include <limits.h>
#include <string.h> #include <string.h>
#include <stdlib.h> #include <stdlib.h>
#include <stdio.h> #include <stdio.h>
#include "../cmd/cmd.h"
#include <unistd.h> #include <unistd.h>
#include "../signal/signal.h"
#include "../cmd/cmd.h"
#include "../env/env.h" #include "../env/env.h"
#include "../utils/utils.h" #include "../utils/utils.h"
#include "../../lib/bozolib/bozolib.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->output[0], 1);
dup2(cmd->input[0], 0); dup2(cmd->input[0], 0);
lst_iter(cmds, &cmd_close); lst_iter(cmds, &cmd_close);
signal(SIGINT, SIG_DFL);
signal(SIGQUIT, SIG_DFL);
execve(cmd->executable, cmd->args, env_str); execve(cmd->executable, cmd->args, env_str);
dprintf(2, "execve failed\n"); dprintf(2, "execve failed\n");
free((void**)env_str); free((void**)env_str);
return 1; return 1;
} }
else
cmd->pid = pid; cmd->pid = pid;
signal(SIGINT, SIG_IGN);
return 0; return 0;
} }
@ -136,5 +141,6 @@ int cmds_list_exec(lst** cmds, data_t *data)
current = current->next; current = current->next;
} }
cmds_wait(cmds, data); cmds_wait(cmds, data);
signal(SIGINT, ctrlc);
return 0; return 0;
} }

View File

@ -1,9 +1,12 @@
#include "./env/env.h"
#include "./input/input.h"
#include <stddef.h> #include <stddef.h>
#include <stdio.h> #include <stdio.h>
#include <signal.h>
#include "./signal/signal.h"
#include "./input/input.h"
#include "alias/alias.h" #include "alias/alias.h"
#include "cmd/cmd.h" #include "cmd/cmd.h"
#include "./env/env.h"
#include "./exec/exec.h" #include "./exec/exec.h"
#include "./parsing/parsing.h" #include "./parsing/parsing.h"
#include "./data/data.h" #include "./data/data.h"
@ -32,6 +35,8 @@ int main(int ac, char **av, char **env_str)
lst_clear(data.env, &env_del); lst_clear(data.env, &env_del);
return 1; return 1;
} }
signal(SIGINT, ctrlc);
signal(SIGQUIT, SIG_IGN);
line = get_user_input(&data); line = get_user_input(&data);
while (line != NULL) while (line != NULL)
{ {

17
src/signal/signal.c Normal file
View File

@ -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");
}

7
src/signal/signal.h Normal file
View File

@ -0,0 +1,7 @@
#pragma once
#include <stdio.h>
#include <readline/readline.h>
void quit(int num);
void ctrlc(int num);