crude signal handling

This commit is contained in:
Maieul BOYER 2024-05-02 14:22:28 +02:00
parent fd64e1ad72
commit 0e2ec315b9
No known key found for this signature in database
6 changed files with 114 additions and 16 deletions

View file

@ -0,0 +1,24 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* signal_handler.h :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: maiboyer <maiboyer@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/05/02 13:20:25 by maiboyer #+# #+# */
/* Updated: 2024/05/02 13:23:06 by maiboyer ### ########.fr */
/* */
/* ************************************************************************** */
#ifndef SIGNAL_HANDLER_H
#define SIGNAL_HANDLER_H
#include "me/types.h"
#include <readline/readline.h>
#include <signal.h>
typedef t_i32 t_signal;
t_error install_signal(void);
#endif /* SIGNAL_HANDLER_H */

1
includes/gmr Symbolic link
View file

@ -0,0 +1 @@
../parser/static/headers/

View file

@ -6,7 +6,7 @@
/* By: rparodi <rparodi@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/03/29 11:35:51 by rparodi #+# #+# */
/* Updated: 2024/04/30 22:03:14 by maiboyer ### ########.fr */
/* Updated: 2024/05/02 13:46:39 by maiboyer ### ########.fr */
/* */
/* ************************************************************************** */
@ -48,6 +48,5 @@ void ft_exit(t_utils *maiboyerlpb, t_u8 exit_status)
{
if (maiboyerlpb != NULL)
ft_free_utils(maiboyerlpb);
printf("exit\n");
exit(exit_status);
}

View file

@ -6,20 +6,21 @@
/* By: rparodi <rparodi@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/03/28 14:40:38 by rparodi #+# #+# */
/* Updated: 2024/05/01 10:36:58 by maiboyer ### ########.fr */
/* Updated: 2024/05/02 14:18:02 by maiboyer ### ########.fr */
/* */
/* ************************************************************************** */
#include "../includes/minishell.h"
#include "app/node.h"
#include "app/signal_handler.h"
#include "me/string/str_len.h"
#include "parser/api.h"
t_first_parser *ts_parser_new();
void ts_tree_delete(t_first_tree *);
t_parse_node ts_tree_root_node(t_first_tree *);
t_first_tree *ts_parser_parse_string(t_first_parser *, t_first_tree *oldtree, t_const_str input,
t_usize len);
t_first_tree *ts_parser_parse_string(t_first_parser *, t_first_tree *oldtree,
t_const_str input, t_usize len);
void ts_parser_delete(t_first_parser *self);
void ts_parser_set_language(t_first_parser *self, t_language *lang);
@ -31,7 +32,7 @@ void print_node_data(t_node *t, t_usize depth)
while (idx++ < depth)
printf("\t");
idx = 0;
printf("%s = %s\n", t->kind_str, node_getstr(t));
printf("%s(%llu) = %s\n", t->kind_str, t->kind, node_getstr(t));
while (idx < t->childs_count)
print_node_data(&t->childs[idx++], depth + 1);
}
@ -137,9 +138,15 @@ t_i32 main(t_i32 argc, t_str argv[], t_str envp[])
(void)argc;
(void)argv;
(void)envp;
if (install_signal())
return (1);
utils = (t_utils){};
utils.parser = create_myparser();
// ft_find_path(arge, &utils);
utils.name_shell = "42sh > ";
utils.name_shell = "\001\x1B[93m\002"
"42sh"
"\001\x1B[32m\002"
">"
"\001\x1B[0m\002"
"$ ";
ft_take_args(&utils);
}

66
sources/signal_handler.c Normal file
View file

@ -0,0 +1,66 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* signal_handler.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: maiboyer <maiboyer@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/05/02 13:22:14 by maiboyer #+# #+# */
/* Updated: 2024/05/02 14:00:31 by maiboyer ### ########.fr */
/* */
/* ************************************************************************** */
#include "app/signal_handler.h"
#include "me/types.h"
#include "readline/readline.h"
#include <stdlib.h>
void sigint_handle(int sig, siginfo_t *info, void *ucontext)
{
static int count = 0;
(void)(sig);
(void)(info);
(void)(ucontext);
count++;
printf("\n");
rl_replace_line("", 0);
rl_on_new_line();
rl_redisplay();
if (count == 10)
{
exit(1);
}
}
void sigquit_handle(int sig, siginfo_t *info, void *ucontext)
{
static int count = 0;
(void)(sig);
(void)(info);
(void)(ucontext);
count++;
printf("\n");
rl_replace_line("", 0);
rl_on_new_line();
rl_redisplay();
if (count == 10)
{
exit(1);
}
}
t_error install_signal(void)
{
struct sigaction data;
data.sa_sigaction = sigint_handle;
data.sa_flags = SA_SIGINFO | SA_NOCLDWAIT;
if (sigaction(SIGINT, &data, NULL))
return (ERROR);
data.sa_sigaction = sigquit_handle;
if (sigaction(SIGQUIT, &data, NULL))
return (ERROR);
return (NO_ERROR);
}

View file

@ -5,3 +5,4 @@ ft_pwd.c
main.c
node/create_node.c
node/node.c
signal_handler.c