fix leak env between cmd
This commit is contained in:
parent
c51d4e63c3
commit
608abcf8fd
@ -6,7 +6,7 @@
|
|||||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2022/03/09 22:33:49 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
|
//free_cmd
|
||||||
void free_cmd(t_cmd *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
|
//redirection.c set redirection and input good
|
||||||
char *set_redirection(t_s_cmd *cmd, char *line, int index);
|
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);
|
void ft_env(t_s_cmd *cmd, char **env);
|
||||||
int find_pwd(t_s_cmd *cmd);
|
int find_pwd(t_s_cmd *cmd);
|
||||||
void init_s_cmd(t_s_cmd *cmd, char **env);
|
void init_s_cmd(t_s_cmd *cmd, char **env);
|
||||||
int tab_len(char **tab);
|
int tab_len(char **tab);
|
||||||
int find_len(char *input, int i, char c);
|
int find_len(char *input, int i, char c);
|
||||||
//void lone_export(t_s_cmd *cmd);
|
void lone_export(t_s_cmd *cmd);
|
||||||
//void find_variable(char *variable, t_s_cmd *cmd);
|
void find_variable(char *variable, t_s_cmd *cmd);
|
||||||
|
|
||||||
//real builtin
|
//real builtin
|
||||||
void ft_env(t_s_cmd *cmd, char **env);
|
void ft_env(t_s_cmd *cmd, char **env);
|
||||||
|
|||||||
86
srcs/main.c
86
srcs/main.c
@ -6,7 +6,7 @@
|
|||||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2022/03/06 13:27:11 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)
|
void crtl_c(int num)
|
||||||
{
|
{
|
||||||
// close(0);
|
int tmpin;
|
||||||
|
|
||||||
|
tmpin = dup(0);
|
||||||
|
num = 0;
|
||||||
|
|
||||||
|
close(0);
|
||||||
|
//dup2(tmpin, 0);
|
||||||
|
//close(tmpin);
|
||||||
printf("\n");
|
printf("\n");
|
||||||
rl_replace_line("", 0);
|
rl_replace_line("", 0);
|
||||||
rl_on_new_line();
|
rl_on_new_line();
|
||||||
@ -23,47 +30,12 @@ void crtl_c(int num)
|
|||||||
|
|
||||||
void sig_quit(int num)
|
void sig_quit(int num)
|
||||||
{
|
{
|
||||||
|
num = 0;
|
||||||
ft_putstr_fd("\b \b\b \b", 1);
|
ft_putstr_fd("\b \b\b \b", 1);
|
||||||
//printf("quit num= %d\n", num);
|
//printf("quit num= %d\n", num);
|
||||||
//exit(0);
|
//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 **ft_dup_double(char **env)
|
||||||
{
|
{
|
||||||
char **new_tab;
|
char **new_tab;
|
||||||
@ -83,6 +55,44 @@ char **ft_dup_double(char **env)
|
|||||||
return (new_tab);
|
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)
|
int main(int ac, char **av, char **path)
|
||||||
{
|
{
|
||||||
char **env;
|
char **env;
|
||||||
|
|||||||
@ -6,18 +6,19 @@
|
|||||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2022/03/09 12:33:30 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"
|
#include "../../includes/minishell.h"
|
||||||
|
|
||||||
void exit_shell(t_cmd *cmd, char **env)
|
void exit_shell(t_cmd *cmd)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
i = 0;
|
i = 0;
|
||||||
free_double(cmd->env);
|
if (cmd)
|
||||||
|
free_double(cmd->env);
|
||||||
clear_history();
|
clear_history();
|
||||||
//print_double_fd(cmd->s_cmds[0]->env, 1);
|
//print_double_fd(cmd->s_cmds[0]->env, 1);
|
||||||
ft_putstr_fd("exit\n", 1);
|
ft_putstr_fd("exit\n", 1);
|
||||||
@ -43,6 +44,7 @@ void free_cmd(t_cmd *cmd)
|
|||||||
free(cmd->s_cmds[i]);
|
free(cmd->s_cmds[i]);
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
free_double(cmd->env);
|
||||||
free_double(cmd->path);
|
free_double(cmd->path);
|
||||||
free(cmd->s_cmds);
|
free(cmd->s_cmds);
|
||||||
free(cmd);
|
free(cmd);
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2022/03/08 15:19:42 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);
|
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;
|
int i;
|
||||||
|
|
||||||
@ -100,7 +100,7 @@ t_cmd *set_cmd(char *input, char **env)
|
|||||||
//cmd->outfile = 0;
|
//cmd->outfile = 0;
|
||||||
//cmd->infile = 0;
|
//cmd->infile = 0;
|
||||||
cmd->nb_s_cmd = double_size(cmds);
|
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);
|
free(cmds);
|
||||||
if (cmd)
|
if (cmd)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2022/03/09 15:18:58 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);
|
return (str);
|
||||||
}
|
}
|
||||||
|
|
||||||
char *get_word(char *str, int start, int end)
|
char *get_word(char *str, int start)
|
||||||
{
|
{
|
||||||
char *new;
|
char *new;
|
||||||
//char *swap;
|
//char *swap;
|
||||||
@ -87,7 +87,7 @@ char *set_input(char *line, t_s_cmd *cmd, int index)
|
|||||||
i++;
|
i++;
|
||||||
while ((line[i] != ' ' && line[i] != '<' && line[i] != '>') && line[i])
|
while ((line[i] != ' ' && line[i] != '<' && line[i] != '>') && line[i])
|
||||||
i++;
|
i++;
|
||||||
cmd->infile = get_word(line, word_index, i);
|
cmd->infile = get_word(line, word_index);
|
||||||
line = cut_str(line, index, i);
|
line = cut_str(line, index, i);
|
||||||
return (line);
|
return (line);
|
||||||
}
|
}
|
||||||
@ -108,7 +108,7 @@ char *set_output(char *line, t_s_cmd *cmd, int index)
|
|||||||
i++;
|
i++;
|
||||||
while ((line[i] != ' ' && line[i] != '<' && line[i] != '>') && line[i])
|
while ((line[i] != ' ' && line[i] != '<' && line[i] != '>') && line[i])
|
||||||
i++;
|
i++;
|
||||||
cmd->outfile = get_word(line, index, i);
|
cmd->outfile = get_word(line, index);
|
||||||
line = cut_str(line, index, i);
|
line = cut_str(line, index, i);
|
||||||
return (line);
|
return (line);
|
||||||
}
|
}
|
||||||
@ -178,7 +178,7 @@ char **add_line(char **tab, char *line)
|
|||||||
if (tab)
|
if (tab)
|
||||||
size = double_size(tab);
|
size = double_size(tab);
|
||||||
//printf("size= %d\n", size);
|
//printf("size= %d\n", size);
|
||||||
ret = ft_calloc(size + 1, sizeof(char*));
|
ret = ft_calloc(size + 2, sizeof(char*));
|
||||||
if (!ret)
|
if (!ret)
|
||||||
{
|
{
|
||||||
// if (tab)
|
// if (tab)
|
||||||
@ -191,10 +191,10 @@ char **add_line(char **tab, char *line)
|
|||||||
ret[i] = ft_strjoin(tab[i], 0);
|
ret[i] = ft_strjoin(tab[i], 0);
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
ret[i] = line;
|
ret[i] = ft_strjoin(line, 0);
|
||||||
ret[i + 1] = 0;
|
ret[i + 1] = 0;
|
||||||
//if (tab)
|
if (tab)
|
||||||
// free_double(tab);
|
free_double(tab);
|
||||||
return(ret);
|
return(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -216,7 +216,10 @@ char *set_heredoc(int index, char **in)
|
|||||||
file_name = ft_strjoin(".heredoc", 0);
|
file_name = ft_strjoin(".heredoc", 0);
|
||||||
fd = open(file_name, O_RDWR | O_CREAT | O_TRUNC, 0666);
|
fd = open(file_name, O_RDWR | O_CREAT | O_TRUNC, 0666);
|
||||||
if (fd > 0)
|
if (fd > 0)
|
||||||
|
{
|
||||||
print_double_fd(in, fd);
|
print_double_fd(in, fd);
|
||||||
|
free_double(in);
|
||||||
|
}
|
||||||
close(fd);
|
close(fd);
|
||||||
return (file_name);
|
return (file_name);
|
||||||
}
|
}
|
||||||
@ -234,15 +237,19 @@ void wait_prompt(t_s_cmd *cmd, int index)
|
|||||||
ft_putstr_fd("> ", 0);
|
ft_putstr_fd("> ", 0);
|
||||||
input = get_next_line(0);
|
input = get_next_line(0);
|
||||||
//printf("input = -%s-\n", input);
|
//printf("input = -%s-\n", input);
|
||||||
|
if (!input)
|
||||||
|
return ;
|
||||||
input[ft_strlen(input) - 1] = 0;
|
input[ft_strlen(input) - 1] = 0;
|
||||||
//printf("input2 = -%s-\n", input);
|
//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);
|
||||||
}
|
}
|
||||||
//print_double(history);
|
//print_double(history);
|
||||||
//free_double(history);
|
//free_double(history);
|
||||||
free(input);
|
free(input);
|
||||||
free(cmd->infile);
|
free(cmd->infile);
|
||||||
|
cmd->infile = 0;//option?
|
||||||
cmd->infile = set_heredoc(index, history);
|
cmd->infile = set_heredoc(index, history);
|
||||||
//cmd->infile = 0;
|
//cmd->infile = 0;
|
||||||
cmd->in_type = 0;
|
cmd->in_type = 0;
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2022/03/11 16:35:37 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 */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user