From 608abcf8fd905cf86b5d303fbf0f60d3acaee79d Mon Sep 17 00:00:00 2001 From: kinou-p Date: Sat, 9 Apr 2022 19:21:24 +0200 Subject: [PATCH] fix leak env between cmd --- includes/minishell.h | 12 ++--- srcs/main.c | 86 +++++++++++++++++------------- srcs/set_cmd/free_cmd.c | 8 +-- srcs/set_cmd/set_cmd.c | 6 +-- srcs/set_redirection/redirection.c | 25 +++++---- srcs/set_redirection/utils.c | 2 +- 6 files changed, 79 insertions(+), 60 deletions(-) diff --git a/includes/minishell.h b/includes/minishell.h index c59d2a9..2c05f49 100644 --- a/includes/minishell.h +++ b/includes/minishell.h @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/03/09 22:33:49 by apommier #+# #+# */ -/* Updated: 2022/04/09 04:59:53 by apommier ### ########.fr */ +/* Updated: 2022/04/09 18:48:25 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -75,7 +75,7 @@ char *get_command(char **exec, char **env); //free_cmd void free_cmd(t_cmd *cmd); -void exit_shell(t_cmd *cmd, char **env); +void exit_shell(t_cmd *cmd); //redirection.c set redirection and input good char *set_redirection(t_s_cmd *cmd, char *line, int index); @@ -91,10 +91,10 @@ void register_env(t_s_cmd *cmd, char *variable); void ft_env(t_s_cmd *cmd, char **env); int find_pwd(t_s_cmd *cmd); void init_s_cmd(t_s_cmd *cmd, char **env); -int tab_len(char **tab); -int find_len(char *input, int i, char c); -//void lone_export(t_s_cmd *cmd); -//void find_variable(char *variable, t_s_cmd *cmd); +int tab_len(char **tab); +int find_len(char *input, int i, char c); +void lone_export(t_s_cmd *cmd); +void find_variable(char *variable, t_s_cmd *cmd); //real builtin void ft_env(t_s_cmd *cmd, char **env); diff --git a/srcs/main.c b/srcs/main.c index 09ab637..cd660eb 100644 --- a/srcs/main.c +++ b/srcs/main.c @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/03/06 13:27:11 by apommier #+# #+# */ -/* Updated: 2022/04/09 04:47:37 by apommier ### ########.fr */ +/* Updated: 2022/04/09 19:19:30 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -14,7 +14,14 @@ void crtl_c(int num) { -// close(0); + int tmpin; + + tmpin = dup(0); + num = 0; + + close(0); + //dup2(tmpin, 0); + //close(tmpin); printf("\n"); rl_replace_line("", 0); rl_on_new_line(); @@ -23,47 +30,12 @@ void crtl_c(int num) void sig_quit(int num) { + num = 0; ft_putstr_fd("\b \b\b \b", 1); //printf("quit num= %d\n", num); //exit(0); } -void print_prompt(char **path) -{ - char *input; - t_cmd *cmd; - int i; - - input = 0; - i = 0; - cmd = 0; - while (1) - { - i = 0; - input = readline("\033[1;31m~$ \033[0m"); - if (!input) - exit_shell(cmd, path); - add_history(input); - if (!ft_strcmp("exit", input) && input) - { - free(input); - exit_shell(cmd, path); - } - if (ft_strlen(input) && next_space(input, 0) && input) - { - cmd = set_cmd(input, path); - if (cmd) - { - cmd->err_var = 0; - execute(cmd, path); - path = cmd->env; - free_cmd(cmd); - } - } - free(input); - } -} - char **ft_dup_double(char **env) { char **new_tab; @@ -83,6 +55,44 @@ char **ft_dup_double(char **env) return (new_tab); } +void print_prompt(char **path) +{ + char *input; + t_cmd *cmd; + int i; + char **swap; + + input = 0; + i = 0; + cmd = 0; + while (1) + { + i = 0; + input = readline("\033[1;31m~$ \033[0m"); + if (!input) + exit_shell(cmd); + add_history(input); + if (!ft_strcmp("exit", input) && input) + { + free(input); + exit_shell(cmd); + } + if (ft_strlen(input) && next_space(input, 0) && input) + { + cmd = set_cmd(input, path); + if (cmd) + { + cmd->err_var = 0; + execute(cmd, path); + path = ft_dup_double(cmd->env); + free_cmd(cmd); + cmd = 0; + } + } + free(input); + } +} + int main(int ac, char **av, char **path) { char **env; diff --git a/srcs/set_cmd/free_cmd.c b/srcs/set_cmd/free_cmd.c index 7eb82e1..ee39b5e 100644 --- a/srcs/set_cmd/free_cmd.c +++ b/srcs/set_cmd/free_cmd.c @@ -6,18 +6,19 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/03/09 12:33:30 by apommier #+# #+# */ -/* Updated: 2022/04/09 04:48:22 by apommier ### ########.fr */ +/* Updated: 2022/04/09 19:19:58 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ #include "../../includes/minishell.h" -void exit_shell(t_cmd *cmd, char **env) +void exit_shell(t_cmd *cmd) { int i; i = 0; - free_double(cmd->env); + if (cmd) + free_double(cmd->env); clear_history(); //print_double_fd(cmd->s_cmds[0]->env, 1); ft_putstr_fd("exit\n", 1); @@ -43,6 +44,7 @@ void free_cmd(t_cmd *cmd) free(cmd->s_cmds[i]); i++; } + free_double(cmd->env); free_double(cmd->path); free(cmd->s_cmds); free(cmd); diff --git a/srcs/set_cmd/set_cmd.c b/srcs/set_cmd/set_cmd.c index d0db75c..a11dab9 100644 --- a/srcs/set_cmd/set_cmd.c +++ b/srcs/set_cmd/set_cmd.c @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/03/08 15:19:42 by apommier #+# #+# */ -/* Updated: 2022/04/09 04:53:02 by apommier ### ########.fr */ +/* Updated: 2022/04/09 18:47:25 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -54,7 +54,7 @@ t_s_cmd *set_s_cmd(char *line, t_cmd *cmd, int index) return (s_cmd); } -t_cmd *split_cmd(t_cmd *cmd, char **cmds, char **env) +t_cmd *split_cmd(t_cmd *cmd, char **cmds) { int i; @@ -100,7 +100,7 @@ t_cmd *set_cmd(char *input, char **env) //cmd->outfile = 0; //cmd->infile = 0; cmd->nb_s_cmd = double_size(cmds); - cmd = split_cmd(cmd, cmds, env); //split each cmd into args in s_cmd + cmd = split_cmd(cmd, cmds); //split each cmd into args in s_cmd free(cmds); if (cmd) { diff --git a/srcs/set_redirection/redirection.c b/srcs/set_redirection/redirection.c index 9086b4f..c59d534 100644 --- a/srcs/set_redirection/redirection.c +++ b/srcs/set_redirection/redirection.c @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/03/09 15:18:58 by apommier #+# #+# */ -/* Updated: 2022/04/06 16:18:01 by apommier ### ########.fr */ +/* Updated: 2022/04/09 19:04:35 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -37,7 +37,7 @@ char *cut_str(char *str, int start, int end) return (str); } -char *get_word(char *str, int start, int end) +char *get_word(char *str, int start) { char *new; //char *swap; @@ -87,7 +87,7 @@ char *set_input(char *line, t_s_cmd *cmd, int index) i++; while ((line[i] != ' ' && line[i] != '<' && line[i] != '>') && line[i]) i++; - cmd->infile = get_word(line, word_index, i); + cmd->infile = get_word(line, word_index); line = cut_str(line, index, i); return (line); } @@ -108,7 +108,7 @@ char *set_output(char *line, t_s_cmd *cmd, int index) i++; while ((line[i] != ' ' && line[i] != '<' && line[i] != '>') && line[i]) i++; - cmd->outfile = get_word(line, index, i); + cmd->outfile = get_word(line, index); line = cut_str(line, index, i); return (line); } @@ -178,7 +178,7 @@ char **add_line(char **tab, char *line) if (tab) size = double_size(tab); //printf("size= %d\n", size); - ret = ft_calloc(size + 1, sizeof(char*)); + ret = ft_calloc(size + 2, sizeof(char*)); if (!ret) { // if (tab) @@ -191,10 +191,10 @@ char **add_line(char **tab, char *line) ret[i] = ft_strjoin(tab[i], 0); i++; } - ret[i] = line; + ret[i] = ft_strjoin(line, 0); ret[i + 1] = 0; - //if (tab) - // free_double(tab); + if (tab) + free_double(tab); return(ret); } @@ -216,7 +216,10 @@ char *set_heredoc(int index, char **in) file_name = ft_strjoin(".heredoc", 0); fd = open(file_name, O_RDWR | O_CREAT | O_TRUNC, 0666); if (fd > 0) + { print_double_fd(in, fd); + free_double(in); + } close(fd); return (file_name); } @@ -234,15 +237,19 @@ void wait_prompt(t_s_cmd *cmd, int index) ft_putstr_fd("> ", 0); input = get_next_line(0); //printf("input = -%s-\n", input); + if (!input) + return ; input[ft_strlen(input) - 1] = 0; //printf("input2 = -%s-\n", input); - history = add_line(history, input); + if (ft_strcmp(input, cmd->infile)) + history = add_line(history, input); //print_double(history); } //print_double(history); //free_double(history); free(input); free(cmd->infile); + cmd->infile = 0;//option? cmd->infile = set_heredoc(index, history); //cmd->infile = 0; cmd->in_type = 0; diff --git a/srcs/set_redirection/utils.c b/srcs/set_redirection/utils.c index 0edec57..d92d396 100644 --- a/srcs/set_redirection/utils.c +++ b/srcs/set_redirection/utils.c @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/03/11 16:35:37 by apommier #+# #+# */ -/* Updated: 2022/04/09 04:34:47 by apommier ### ########.fr */ +/* Updated: 2022/04/09 19:16:39 by apommier ### ########.fr */ /* */ /* ************************************************************************** */