fixed echo bt and did some norming

This commit is contained in:
mdev9
2024-03-26 09:12:32 +01:00
parent c5b6f8f53e
commit 0fb72c0c2c
12 changed files with 211 additions and 171 deletions

View File

@ -6,7 +6,7 @@
/* By: marde-vr <marde-vr@42angouleme.fr> +#+ +:+ +#+ */ /* By: marde-vr <marde-vr@42angouleme.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2024/03/05 18:22:15 by marde-vr #+# #+# */ /* Created: 2024/03/05 18:22:15 by marde-vr #+# #+# */
/* Updated: 2024/03/23 19:22:20 by marde-vr ### ########.fr */ /* Updated: 2024/03/26 09:10:12 by marde-vr ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -65,8 +65,8 @@ char **get_cmd_args(t_msh *msh)
if (!cmd_args || !msh->fds) if (!cmd_args || !msh->fds)
ft_exit(msh, 1); ft_exit(msh, 1);
cur_cmd = msh->cmds; cur_cmd = msh->cmds;
i = 0; i = -1;
while (i < args_count) while (++i < args_count)
{ {
if (cur_cmd->type == ARG) if (cur_cmd->type == ARG)
{ {
@ -74,7 +74,6 @@ char **get_cmd_args(t_msh *msh)
cmd_args[i] = remove_path(cur_cmd->token); cmd_args[i] = remove_path(cur_cmd->token);
else else
cmd_args[i] = cur_cmd->token; cmd_args[i] = cur_cmd->token;
i++;
} }
else else
cur_cmd = cur_cmd->next; cur_cmd = cur_cmd->next;

View File

@ -6,7 +6,7 @@
/* By: marde-vr <marde-vr@42angouleme.fr> +#+ +:+ +#+ */ /* By: marde-vr <marde-vr@42angouleme.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2024/02/07 15:30:37 by tomoron #+# #+# */ /* Created: 2024/02/07 15:30:37 by tomoron #+# #+# */
/* Updated: 2024/03/05 19:00:53 by marde-vr ### ########.fr */ /* Updated: 2024/03/26 08:43:16 by marde-vr ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -36,15 +36,27 @@ void put_args(t_cmd *args)
int echo(t_cmd *args) int echo(t_cmd *args)
{ {
int put_nl; int put_nl;
int i;
put_nl = 1; put_nl = 1;
while (args && args->token && !strcmp(args->token, "-n")) i = 1;
while (args && args->token && args->token[0] == '-')
{ {
put_nl = 0; while (args->token[i] == 'n')
i++;
if (!args->token[i])
put_nl = 0;
if (put_nl)
put_args(args);
args = args->next; args = args->next;
} }
put_args(args); if (!put_nl)
put_args(args);
if (put_nl) if (put_nl)
{
if (!(args->token[0] == '-'))
put_args(args);
ft_putchar_fd('\n', STDOUT_FILENO); ft_putchar_fd('\n', STDOUT_FILENO);
}
return (0); return (0);
} }

View File

@ -1,12 +1,12 @@
/* ************************************************************************** */ /* ************************************************************************** */
/* */ /* */
/* ::: :::::::: */ /* ::: :::::::: */
/* env_to_char_tab.c :+: :+: :+: */ /* env_utils.c :+: :+: :+: */
/* +:+ +:+ +:+ */ /* +:+ +:+ +:+ */
/* By: marde-vr <marde-vr@42angouleme.fr> +#+ +:+ +#+ */ /* By: marde-vr <marde-vr@42angouleme.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2024/02/16 13:30:18 by tomoron #+# #+# */ /* Created: 2024/02/16 13:30:18 by tomoron #+# #+# */
/* Updated: 2024/02/16 15:08:53 by marde-vr ### ########.fr */ /* Updated: 2024/03/26 08:49:12 by marde-vr ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -43,3 +43,24 @@ char **env_to_char_tab(t_env *env)
} }
return (res); return (res);
} }
char **split_paths_from_env(t_env *env)
{
t_env *cur_env_var;
int path_in_envp;
path_in_envp = 0;
cur_env_var = env;
while (cur_env_var && cur_env_var->next != 0)
{
if (!ft_strcmp(cur_env_var->name, "PATH"))
{
path_in_envp = 1;
break ;
}
cur_env_var = cur_env_var->next;
}
if (!path_in_envp)
return (0);
return (ft_split(cur_env_var->value, ':'));
}

View File

@ -6,7 +6,7 @@
/* By: marde-vr <marde-vr@42angouleme.fr> +#+ +:+ +#+ */ /* By: marde-vr <marde-vr@42angouleme.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2024/02/07 14:12:49 by tomoron #+# #+# */ /* Created: 2024/02/07 14:12:49 by tomoron #+# #+# */
/* Updated: 2024/03/25 19:01:25 by tomoron ### ########.fr */ /* Updated: 2024/03/26 09:11:52 by marde-vr ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -62,7 +62,6 @@ void exec_command(t_msh *msh, int i, int cmd_count)
} }
if (!cmd_is_builtin(msh, msh->cmds->token)) if (!cmd_is_builtin(msh, msh->cmds->token))
get_cmd_path(msh); get_cmd_path(msh);
//if(!g_return_code)
exec(msh, get_cmd_args(msh), i, cmd_count); exec(msh, get_cmd_args(msh), i, cmd_count);
remove_command_from_msh(msh); remove_command_from_msh(msh);
} }
@ -89,7 +88,7 @@ void exec_commands(t_msh *msh)
waitpid(msh->pids[i], &status, 0); waitpid(msh->pids[i], &status, 0);
i++; i++;
} }
if(!g_return_code && WIFEXITED(status)) if (!g_return_code && WIFEXITED(status))
g_return_code = WEXITSTATUS(status); g_return_code = WEXITSTATUS(status);
i = 0; i = 0;
while (i < cmd_count) while (i < cmd_count)

View File

@ -6,7 +6,7 @@
/* By: marde-vr <marde-vr@42angouleme.fr> +#+ +:+ +#+ */ /* By: marde-vr <marde-vr@42angouleme.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2024/02/07 16:04:11 by tomoron #+# #+# */ /* Created: 2024/02/07 16:04:11 by tomoron #+# #+# */
/* Updated: 2024/03/23 19:20:54 by marde-vr ### ########.fr */ /* Updated: 2024/03/26 08:59:44 by marde-vr ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -20,6 +20,20 @@ void numeric_arg_err(char *arg, int *exit_code)
*exit_code = 2; *exit_code = 2;
} }
void get_exit_bt_return_code(t_msh *msh)
{
t_cmd *cur_cmd;
int exit_code;
cur_cmd = msh->cmds->next;
if (cur_cmd && cur_cmd->type == ARG && !ft_strisnbr(cur_cmd->token))
numeric_arg_err(cur_cmd->token, &exit_code);
else if (cur_cmd && cur_cmd->type == ARG)
exit_code = (unsigned char)ft_atoi(cur_cmd->token);
else
exit_code = g_return_code;
}
void exit_bt(t_msh *msh) void exit_bt(t_msh *msh)
{ {
t_cmd *cur_cmd; t_cmd *cur_cmd;
@ -36,12 +50,7 @@ void exit_bt(t_msh *msh)
} }
else else
{ {
if (cur_cmd && cur_cmd->type == ARG && !ft_strisnbr(cur_cmd->token)) get_exit_bt_return_code(msh);
numeric_arg_err(cur_cmd->token, &exit_code);
else if (cur_cmd && cur_cmd->type == ARG)
exit_code = (unsigned char)ft_atoi(cur_cmd->token);
else
exit_code = g_return_code;
if (msh->fds) if (msh->fds)
{ {
cmd_count = get_cmd_count(msh->cmds); cmd_count = get_cmd_count(msh->cmds);

View File

@ -6,79 +6,12 @@
/* By: marde-vr <marde-vr@42angouleme.fr> +#+ +:+ +#+ */ /* By: marde-vr <marde-vr@42angouleme.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2024/03/24 17:44:32 by marde-vr #+# #+# */ /* Created: 2024/03/24 17:44:32 by marde-vr #+# #+# */
/* Updated: 2024/03/25 20:38:21 by tomoron ### ########.fr */ /* Updated: 2024/03/26 09:07:01 by marde-vr ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
#include "minishell.h" #include "minishell.h"
char *get_tmp_file_name(t_msh *msh)
{
int i;
char *tmp_file_name;
char *res;
char *i_char;
i = 0;
tmp_file_name = ".tmp";
i_char = ft_itoa(i);
res = ft_strjoin_free(tmp_file_name, i_char, 2);
if (!res)
ft_exit(msh, 1);
while (!access(res, F_OK))
{
free(res);
i_char = ft_itoa(i);
res = ft_strjoin_free(tmp_file_name, i_char, 2);
if (!res)
ft_exit(msh, 1);
i++;
}
return (res);
}
int contains_newline(char *str)
{
int i;
i = 0;
if (!str)
return (0);
while (str[i])
{
if (str[i] == '\n')
return (1);
i++;
}
return (0);
}
void parse_var(t_msh *msh, char *line)
{
char *var_name;
while(*line)
{
if(*line == '$')
{
var_name = get_var_name(line + 1);
if(!var_name)
return;
line += ft_strlen(var_name);
if(!*var_name)
write(msh->in_fd, "$", 1);
else if(!ft_strcmp(var_name, "?"))
ft_putnbr_fd(g_return_code, msh->in_fd);
else
ft_putstr_fd(ft_get_env(msh->env, var_name), msh->in_fd);
free(var_name);
}
else
write(msh->in_fd, line, 1);
line++;
}
}
void get_here_doc_input(t_msh *msh, char *eof) void get_here_doc_input(t_msh *msh, char *eof)
{ {
char *line; char *line;
@ -103,11 +36,39 @@ void get_here_doc_input(t_msh *msh, char *eof)
free(line); free(line);
} }
void here_doc_child(t_msh *msh, char *eof, char *here_doc_file)
{
here_doc_variables(1, 0, msh);
here_doc_variables(1, 1, here_doc_file);
get_here_doc_input(msh, eof);
close(msh->in_fd);
free(here_doc_file);
free(msh->fds[0]);
ft_exit(msh, 0);
}
void here_doc_signal(t_msh *msh, int child_pid, char *here_doc_file)
{
int status;
signal(SIGINT, signal_handler_command);
signal(SIGQUIT, signal_handler_here_doc);
waitpid(child_pid, &status, 0);
signal(SIGINT, signal_handler_interactive);
signal(SIGQUIT, signal_handler_interactive);
close(msh->in_fd);
if (WIFEXITED(status) && WEXITSTATUS(status))
unlink(here_doc_file);
msh->in_fd = open(here_doc_file, O_RDWR, 0644);
free(here_doc_file);
if (msh->in_fd == -1 && !(WIFEXITED(status) && WEXITSTATUS(status)))
perror("open");
}
void handle_here_doc(t_msh *msh, char *eof) void handle_here_doc(t_msh *msh, char *eof)
{ {
char *here_doc_file; char *here_doc_file;
int pid; int pid;
int status;
here_doc_file = get_tmp_file_name(msh); here_doc_file = get_tmp_file_name(msh);
msh->in_fd = open(here_doc_file, O_CREAT | O_RDWR, 0644); msh->in_fd = open(here_doc_file, O_CREAT | O_RDWR, 0644);
@ -118,28 +79,7 @@ void handle_here_doc(t_msh *msh, char *eof)
} }
pid = fork(); pid = fork();
if (pid == 0) if (pid == 0)
{ here_doc_child(msh, eof, here_doc_file);
here_doc_variables(1, 0, msh);
here_doc_variables(1, 1, here_doc_file);
get_here_doc_input(msh, eof);
close(msh->in_fd);
free(here_doc_file);
free(msh->fds[0]);
ft_exit(msh, 0);
}
else else
{ here_doc_signal(msh, pid, here_doc_file);
signal(SIGINT, signal_handler_command);
signal(SIGQUIT, signal_handler_here_doc);
waitpid(pid, &status , 0);
signal(SIGINT, signal_handler_interactive);
signal(SIGQUIT, signal_handler_interactive);
close(msh->in_fd);
if(WIFEXITED(status) && WEXITSTATUS(status))
unlink(here_doc_file);
msh->in_fd = open(here_doc_file, O_RDWR, 0644);
free(here_doc_file);
if (msh->in_fd == -1 && !(WIFEXITED(status) && WEXITSTATUS(status)))
perror("open");
}
} }

80
srcs/here_doc_utils.c Normal file
View File

@ -0,0 +1,80 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* here_doc_utils.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: marde-vr <marde-vr@42angouleme.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/03/26 09:06:51 by marde-vr #+# #+# */
/* Updated: 2024/03/26 09:07:42 by marde-vr ### ########.fr */
/* */
/* ************************************************************************** */
#include "minishell.h"
char *get_tmp_file_name(t_msh *msh)
{
int i;
char *tmp_file_name;
char *res;
char *i_char;
i = 0;
tmp_file_name = ".tmp";
i_char = ft_itoa(i);
res = ft_strjoin_free(tmp_file_name, i_char, 2);
if (!res)
ft_exit(msh, 1);
while (!access(res, F_OK))
{
free(res);
i_char = ft_itoa(i);
res = ft_strjoin_free(tmp_file_name, i_char, 2);
if (!res)
ft_exit(msh, 1);
i++;
}
return (res);
}
int contains_newline(char *str)
{
int i;
i = 0;
if (!str)
return (0);
while (str[i])
{
if (str[i] == '\n')
return (1);
i++;
}
return (0);
}
void parse_var(t_msh *msh, char *line)
{
char *var_name;
while (*line)
{
if (*line == '$')
{
var_name = get_var_name(line + 1);
if (!var_name)
return ;
line += ft_strlen(var_name);
if (!*var_name)
write(msh->in_fd, "$", 1);
else if (!ft_strcmp(var_name, "?"))
ft_putnbr_fd(g_return_code, msh->in_fd);
else
ft_putstr_fd(ft_get_env(msh->env, var_name), msh->in_fd);
free(var_name);
}
else
write(msh->in_fd, line, 1);
line++;
}
}

View File

@ -6,13 +6,13 @@
/* By: marde-vr <marde-vr@42angouleme.fr> +#+ +:+ +#+ */ /* By: marde-vr <marde-vr@42angouleme.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2024/02/02 21:59:20 by tomoron #+# #+# */ /* Created: 2024/02/02 21:59:20 by tomoron #+# #+# */
/* Updated: 2024/03/25 20:04:03 by tomoron ### ########.fr */ /* Updated: 2024/03/26 08:44:14 by marde-vr ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
#include "minishell.h" #include "minishell.h"
int g_return_code = 0; int g_return_code = 0;
char *get_prompt(t_env *env) char *get_prompt(t_env *env)
{ {
@ -22,7 +22,7 @@ char *get_prompt(t_env *env)
res = ft_strjoin_free("\001", ft_get_color(10, 255, 80), 2); res = ft_strjoin_free("\001", ft_get_color(10, 255, 80), 2);
res = ft_strjoin_free(res, "\033[1m\002", 1); res = ft_strjoin_free(res, "\033[1m\002", 1);
if(getenv("USER")) if (getenv("USER"))
{ {
res = ft_strjoin_free(res, getenv("USER"), 1); res = ft_strjoin_free(res, getenv("USER"), 1);
res = ft_strjoin_free(res, "@", 1); res = ft_strjoin_free(res, "@", 1);
@ -73,28 +73,33 @@ t_env *get_env(char **envp)
void print_binary(unsigned int num) void print_binary(unsigned int num)
{ {
if (num == 0) { int size;
printf("0"); int i;
return;
} if (num == 0)
{
// Taille d'un unsigned int en bits printf("0");
int size = sizeof(unsigned int) * 8; return ;
int i; }
// Parcours de chaque bit de droite à gauche //Tom qu'est-ce que t'a fait ?????
for (i = size - 1; i >= 0; i--) {
// Vérifie si le bit est 1 ou 0 // Taille d'un unsigned int en bits
if (num & (1u << i)) size = sizeof(unsigned int) * 8;
printf("1"); // Parcours de chaque bit de droite à gauche
else for (i = size - 1; i >= 0; i--)
printf("0"); {
} // Vérifie si le bit est 1 ou 0
if (num & (1u << i))
printf("1");
else
printf("0");
}
} }
int init_minishell(t_msh **msh, int argc, char **argv, char **envp) int init_minishell(t_msh **msh, int argc, char **argv, char **envp)
{ {
struct termios t_p; struct termios t_p;
*msh = ft_calloc(1, sizeof(t_msh)); *msh = ft_calloc(1, sizeof(t_msh));
if (!*msh) if (!*msh)
@ -104,11 +109,7 @@ int init_minishell(t_msh **msh, int argc, char **argv, char **envp)
(*msh)->env = get_env(envp); (*msh)->env = get_env(envp);
signal(SIGINT, signal_handler_interactive); signal(SIGINT, signal_handler_interactive);
signal(SIGQUIT, signal_handler_interactive); signal(SIGQUIT, signal_handler_interactive);
if(tcgetattr(1, &t_p))
ft_printf_fd(2, "an error occured while setting the flags");
t_p.c_lflag = t_p.c_lflag & (~ECHOCTL); t_p.c_lflag = t_p.c_lflag & (~ECHOCTL);
if(tcsetattr(1, TCSANOW, &t_p))
ft_printf_fd(2, "an error occured while setting the flags");
return (0); return (0);
} }

View File

@ -6,7 +6,7 @@
/* By: marde-vr <marde-vr@42angouleme.fr> +#+ +:+ +#+ */ /* By: marde-vr <marde-vr@42angouleme.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2024/02/04 17:31:38 by tomoron #+# #+# */ /* Created: 2024/02/04 17:31:38 by tomoron #+# #+# */
/* Updated: 2024/03/25 19:37:11 by tomoron ### ########.fr */ /* Updated: 2024/03/26 09:07:38 by marde-vr ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -113,5 +113,8 @@ void signal_handler_command(int signum);
void signal_handler_here_doc(int signum); void signal_handler_here_doc(int signum);
char *get_var_name(char *str); char *get_var_name(char *str);
void *here_doc_variables(int write, int index, void *data); void *here_doc_variables(int write, int index, void *data);
char *get_tmp_file_name(t_msh *msh);
int contains_newline(char *str);
void parse_var(t_msh *msh, char *line);
#endif #endif

View File

@ -6,34 +6,13 @@
/* By: marde-vr <marde-vr@42angouleme.fr> +#+ +:+ +#+ */ /* By: marde-vr <marde-vr@42angouleme.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2024/02/21 21:47:15 by marde-vr #+# #+# */ /* Created: 2024/02/21 21:47:15 by marde-vr #+# #+# */
/* Updated: 2024/03/25 13:26:18 by tomoron ### ########.fr */ /* Updated: 2024/03/26 08:49:24 by marde-vr ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
#include "minishell.h" #include "minishell.h"
#include <unistd.h> #include <unistd.h>
char **split_paths_from_env(t_env *env)
{
t_env *cur_env_var;
int path_in_envp;
path_in_envp = 0;
cur_env_var = env;
while (cur_env_var && cur_env_var->next != 0)
{
if (!ft_strcmp(cur_env_var->name, "PATH"))
{
path_in_envp = 1;
break ;
}
cur_env_var = cur_env_var->next;
}
if (!path_in_envp)
return (0);
return (ft_split(cur_env_var->value, ':'));
}
void find_cmd_path(t_msh *msh, char **paths, int *found) void find_cmd_path(t_msh *msh, char **paths, int *found)
{ {
char *tmp; char *tmp;

View File

@ -6,7 +6,7 @@
/* By: marde-vr <marde-vr@42angouleme.fr> +#+ +:+ +#+ */ /* By: marde-vr <marde-vr@42angouleme.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2024/03/05 18:17:25 by marde-vr #+# #+# */ /* Created: 2024/03/05 18:17:25 by marde-vr #+# #+# */
/* Updated: 2024/03/25 13:48:42 by marde-vr ### ########.fr */ /* Updated: 2024/03/26 08:40:54 by marde-vr ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -41,8 +41,6 @@ void execute_command(t_msh *msh, char **cmd_args, int i)
i--; i--;
} }
free(cmd_args); free(cmd_args);
//ft_exit(msh, 1);
//ft_printf_fd(2, "exiting with code: %d\n", g_return_code);
ft_exit(msh, g_return_code); ft_exit(msh, g_return_code);
} }
if (msh->cmds->token) if (msh->cmds->token)
@ -62,7 +60,6 @@ void child(t_msh *msh, char **cmd_args, int i)
|| msh->out_type == RED_O_APP) || msh->out_type == RED_O_APP)
redirect_output(msh, i); redirect_output(msh, i);
close_pipe_fds(msh, i); close_pipe_fds(msh, i);
//if (!g_return_code)
execute_command(msh, cmd_args, i); execute_command(msh, cmd_args, i);
close(0); close(0);
close(1); close(1);

View File

@ -6,7 +6,7 @@
/* By: marde-vr <marde-vr@42angouleme.fr> +#+ +:+ +#+ */ /* By: marde-vr <marde-vr@42angouleme.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2024/03/22 14:31:13 by tomoron #+# #+# */ /* Created: 2024/03/22 14:31:13 by tomoron #+# #+# */
/* Updated: 2024/03/25 20:39:21 by tomoron ### ########.fr */ /* Updated: 2024/03/26 08:42:47 by marde-vr ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -17,7 +17,7 @@ void signal_handler_interactive(int signum)
if (signum == SIGINT) if (signum == SIGINT)
{ {
g_return_code = 130; g_return_code = 130;
printf("%s%s^C\n",rl_prompt, rl_line_buffer); printf("%s%s^C\n", rl_prompt, rl_line_buffer);
rl_replace_line("", 0); rl_replace_line("", 0);
rl_on_new_line(); rl_on_new_line();
rl_redisplay(); rl_redisplay();
@ -28,13 +28,13 @@ void signal_handler_interactive(int signum)
void *here_doc_variables(int write, int index, void *data) void *here_doc_variables(int write, int index, void *data)
{ {
static void *variables[2]; static void *variables[2];
if (write) if (write)
variables[index] = data; variables[index] = data;
else else
return (variables[index]); return (variables[index]);
return(0); return (0);
} }
void signal_handler_here_doc(int signum) void signal_handler_here_doc(int signum)
@ -42,9 +42,9 @@ void signal_handler_here_doc(int signum)
t_msh *msh; t_msh *msh;
char *here_doc_file; char *here_doc_file;
if(signum == SIGINT) if (signum == SIGINT)
{ {
printf("%s%s^C\n",rl_prompt, rl_line_buffer); printf("%s%s^C\n", rl_prompt, rl_line_buffer);
msh = here_doc_variables(0, 0, 0); msh = here_doc_variables(0, 0, 0);
here_doc_file = here_doc_variables(0, 1, 0); here_doc_file = here_doc_variables(0, 1, 0);
close(msh->in_fd); close(msh->in_fd);
@ -56,6 +56,6 @@ void signal_handler_here_doc(int signum)
void signal_handler_command(int signum) void signal_handler_command(int signum)
{ {
if(signum == SIGQUIT) if (signum == SIGQUIT)
printf("^\\Quit (core dumped)\n"); printf("^\\Quit (core dumped)\n");
} }