From 004eef9a3fd3403d6634ca658336d9a1e9766685 Mon Sep 17 00:00:00 2001 From: JozanLeClerc Date: Mon, 27 Jul 2020 21:19:29 +0200 Subject: In progress --- src/u_vars_next.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 src/u_vars_next.c (limited to 'src/u_vars_next.c') diff --git a/src/u_vars_next.c b/src/u_vars_next.c new file mode 100644 index 0000000..5626376 --- /dev/null +++ b/src/u_vars_next.c @@ -0,0 +1,30 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* u_vars_next.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: rbousset +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2020/02/14 17:19:27 by rbousset #+# #+# */ +/* Updated: 2020/02/14 17:19:29 by rbousset ### ########lyon.fr */ +/* */ +/* ************************************************************************** */ + +#include "s_struct.h" +/* +** void +** subst_var_value(const char varname[], t_msh *msh); +** +** DESCRIPTION +** The subst_var_value() changes the msh->envp value +** of the variable varname[]. If varname[] wasn't found +** in msh->envp, varname[] is searched in msh->vars. +*/ + +void + subst_var_value(const char varname[], + t_msh *msh) +{ + (void)varname; + (void)msh; +} -- cgit v1.2.3 From 280ecd341f1ec88abe325fa69b197bca3e43d2f1 Mon Sep 17 00:00:00 2001 From: JozanLeClerc Date: Mon, 27 Jul 2020 22:38:54 +0200 Subject: Now can subst env vars --- src/u_vars_next.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 49 insertions(+), 6 deletions(-) (limited to 'src/u_vars_next.c') diff --git a/src/u_vars_next.c b/src/u_vars_next.c index 5626376..8134de3 100644 --- a/src/u_vars_next.c +++ b/src/u_vars_next.c @@ -10,21 +10,64 @@ /* */ /* ************************************************************************** */ +#include +#include +#include + #include "s_struct.h" + +static int64_t + u_get_var_line(const char varname[], + t_msh *msh) +{ + char **env_ptr; + int64_t i; + + env_ptr = msh->envp; + i = 0; + while (*env_ptr && + ft_strncmp(*env_ptr, varname, ft_strlen(varname)) != 0) + { + env_ptr++; + i++; + } + if (*env_ptr) + return (i); + else + return (-1); +} + /* ** void -** subst_var_value(const char varname[], t_msh *msh); +** u_subst_var_value(const char varname[], const char newval[], t_msh *msh); ** ** DESCRIPTION -** The subst_var_value() changes the msh->envp value -** of the variable varname[]. If varname[] wasn't found +** The subst_var_value() changes the value of msh->envp +** variable varname[] with newval[]. If varname[] wasn't found ** in msh->envp, varname[] is searched in msh->vars. */ void - subst_var_value(const char varname[], + u_subst_var_value(const char varname[], + const char newval[], t_msh *msh) { - (void)varname; - (void)msh; + char new_line_fmt[2048]; + int64_t env_line; + + if ((env_line = u_get_var_line(varname + 1, msh)) > -1) + { + ft_memdel((void*)&msh->envp[env_line]); + ft_sprintf(new_line_fmt, "%s=%s", varname + 1, newval); + if (!(msh->envp[env_line] = + (char*)malloc((ft_strlen(new_line_fmt) + 1) * sizeof(char)))) + { + /* TODO: Handle this fail */ + } + (void)ft_strlcpy(msh->envp[env_line], new_line_fmt, ft_strlen(new_line_fmt) + 1); + } + else + { + /* TODO: Search in custom vars */ + } } -- cgit v1.2.3 From f441e00ea60a5e485d853d5dd3ac99a8535a40cc Mon Sep 17 00:00:00 2001 From: JozanLeClerc Date: Thu, 30 Jul 2020 18:22:32 +0200 Subject: In progress --- src/u_vars_next.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src/u_vars_next.c') diff --git a/src/u_vars_next.c b/src/u_vars_next.c index 8134de3..8e02c26 100644 --- a/src/u_vars_next.c +++ b/src/u_vars_next.c @@ -64,7 +64,8 @@ void { /* TODO: Handle this fail */ } - (void)ft_strlcpy(msh->envp[env_line], new_line_fmt, ft_strlen(new_line_fmt) + 1); + (void)ft_strlcpy(msh->envp[env_line], + new_line_fmt, ft_strlen(new_line_fmt) + 1); } else { -- cgit v1.2.3 From af663bf8cbc9e97d9818959de69a1d8a6c423cbe Mon Sep 17 00:00:00 2001 From: JozanLeClerc Date: Thu, 30 Jul 2020 19:45:42 +0200 Subject: Work in progress, freed leak --- src/u_vars_next.c | 34 +++++++++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) (limited to 'src/u_vars_next.c') 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 #include +#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)); } } -- cgit v1.2.3 From 647a984ac6b6e2629ad16d3892ad3c231e8e277a Mon Sep 17 00:00:00 2001 From: JozanLeClerc Date: Tue, 4 Aug 2020 14:44:55 +0200 Subject: Huge bug fix --- src/u_vars_next.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/u_vars_next.c') diff --git a/src/u_vars_next.c b/src/u_vars_next.c index 5660449..820bbe1 100644 --- a/src/u_vars_next.c +++ b/src/u_vars_next.c @@ -28,7 +28,7 @@ static int64_t env_ptr = msh->envp; i = 0; while (*env_ptr && - ft_strncmp(*env_ptr, varname, ft_strlen(varname)) != 0) + ft_strncmp(varname, *env_ptr, ft_strclen(*env_ptr, '=')) != 0) { env_ptr++; i++; @@ -47,7 +47,7 @@ static t_bool ptr = msh->vars; while (ptr && - ft_strncmp(varname, ptr->name, ft_strlen(varname)) != 0) + ft_strncmp(varname, ptr->name, ft_strlen(varname) + 1) != 0) { ptr = ptr->next; } -- cgit v1.2.3