diff options
author | JozanLeClerc <bousset.rudy@gmail.com> | 2020-07-30 19:45:42 +0200 |
---|---|---|
committer | JozanLeClerc <bousset.rudy@gmail.com> | 2020-07-30 19:45:42 +0200 |
commit | af663bf8cbc9e97d9818959de69a1d8a6c423cbe (patch) | |
tree | 0c9be9b4168d9b4172d927d2f6103e67d130f4f1 | |
parent | Secured strdup (diff) | |
download | 42-minishell-af663bf8cbc9e97d9818959de69a1d8a6c423cbe.tar.gz 42-minishell-af663bf8cbc9e97d9818959de69a1d8a6c423cbe.tar.bz2 42-minishell-af663bf8cbc9e97d9818959de69a1d8a6c423cbe.tar.xz 42-minishell-af663bf8cbc9e97d9818959de69a1d8a6c423cbe.tar.zst 42-minishell-af663bf8cbc9e97d9818959de69a1d8a6c423cbe.zip |
Work in progress, freed leak
-rw-r--r-- | src/m_minishell.c | 12 | ||||
-rw-r--r-- | src/p_lcom.c | 1 | ||||
-rw-r--r-- | src/u_vars_next.c | 34 |
3 files changed, 39 insertions, 8 deletions
diff --git a/src/m_minishell.c b/src/m_minishell.c index e14dbdc..9306955 100644 --- a/src/m_minishell.c +++ b/src/m_minishell.c @@ -31,7 +31,8 @@ int char *const envp[]) { int32_t ret; - char *str; + char *str_one; + char *str_two; t_msh *msh; /* TODO: handle general variables | $var */ @@ -41,9 +42,12 @@ int return (FT_RET_ALLOC); } u_subst_var_value("$SHLVL", - str = ft_itoa(ft_atoi(u_get_var_value("$SHLVL", msh)) + 1), msh); - ft_memdel((void*)&str); - lvars_add_front(&msh->vars, lvars_new("var", "value")); + str_one =ft_itoa( + ft_atoi(str_two = u_get_var_value("$SHLVL", msh)) + 1), msh); + ft_memdel((void*)&str_one); + ft_memdel((void*)&str_two); + /* TODO: delet this */ + u_subst_var_value("$var", "value", msh); ret = m_argv(argc, argv, msh); s_destroy(msh); return (ret); diff --git a/src/p_lcom.c b/src/p_lcom.c index f47e2c1..2dbd505 100644 --- a/src/p_lcom.c +++ b/src/p_lcom.c @@ -139,7 +139,6 @@ int8_t while (i <= count && words[i]) { next = FALSE; - /* TODO: split pipes here */ if (ft_strchr(words[i], '|')) { if (!(link = lcom_new(NULL, msh))) diff --git a/src/u_vars_next.c b/src/u_vars_next.c index 8e02c26..5660449 100644 --- a/src/u_vars_next.c +++ b/src/u_vars_next.c @@ -14,10 +14,12 @@ #include <inttypes.h> #include <stdlib.h> +#include "d_enum.h" +#include "s_lvars.h" #include "s_struct.h" static int64_t - u_get_var_line(const char varname[], + u_get_env_var_line(const char varname[], t_msh *msh) { char **env_ptr; @@ -37,6 +39,28 @@ static int64_t return (-1); } +static t_bool + u_get_custom_var_existance(const char varname[], + t_msh *msh) +{ + t_lvars *ptr; + + ptr = msh->vars; + while (ptr && + ft_strncmp(varname, ptr->name, ft_strlen(varname)) != 0) + { + ptr = ptr->next; + } + if (ptr != NULL) + { + return (TRUE); + } + else + { + return (FALSE); + } +} + /* ** void ** u_subst_var_value(const char varname[], const char newval[], t_msh *msh); @@ -55,7 +79,7 @@ void char new_line_fmt[2048]; int64_t env_line; - if ((env_line = u_get_var_line(varname + 1, msh)) > -1) + if ((env_line = u_get_env_var_line(varname + 1, msh)) > -1) { ft_memdel((void*)&msh->envp[env_line]); ft_sprintf(new_line_fmt, "%s=%s", varname + 1, newval); @@ -67,8 +91,12 @@ void (void)ft_strlcpy(msh->envp[env_line], new_line_fmt, ft_strlen(new_line_fmt) + 1); } + else if ((env_line = u_get_custom_var_existance(varname + 1, msh)) == TRUE) + { + lvars_rebind(&msh->vars, varname + 1, newval); + } else { - /* TODO: Search in custom vars */ + lvars_add_front(&msh->vars, lvars_new(varname + 1, newval)); } } |