fix leak env between cmd

This commit is contained in:
kinou-p 2022-04-09 19:21:24 +02:00
parent c51d4e63c3
commit 608abcf8fd
6 changed files with 79 additions and 60 deletions

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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);

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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;

View File

@ -6,18 +6,19 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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);

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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)
{

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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;

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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 */
/* */
/* ************************************************************************** */