From f8236d14d145fd5b69ace395fca9925ba3b1532c Mon Sep 17 00:00:00 2001 From: whaffman Date: Tue, 4 Mar 2025 10:58:11 +0100 Subject: [PATCH] strdup_safe returns null if source was null; environment needs to check for NULL --- src/environment/environment_get_arr.c | 40 ++++++++++++++--------- src/utils/ft_strdup_safe.c | 46 ++++++++++++++------------- 2 files changed, 49 insertions(+), 37 deletions(-) diff --git a/src/environment/environment_get_arr.c b/src/environment/environment_get_arr.c index d9d2034..80abb92 100644 --- a/src/environment/environment_get_arr.c +++ b/src/environment/environment_get_arr.c @@ -6,34 +6,44 @@ /* By: willem +#+ */ /* +#+ */ /* Created: 2025/02/08 13:59:48 by willem #+# #+# */ -/* Updated: 2025/02/26 16:09:20 by whaffman ######## odam.nl */ +/* Updated: 2025/03/04 10:44:41 by whaffman ######## odam.nl */ /* */ /* ************************************************************************** */ #include "minishell.h" +static char *create_variable(t_minishell *msh, t_environment *env) +{ + char *var; + size_t len; + + len = ft_strlen(env->name) + ft_strlen(env->value) + 2; + var = malloc_safe(msh, len); + ft_strlcpy(var, env->name, len); + ft_strlcat(var, "=", len); + ft_strlcat(var, env->value, len); + return (var); +} + char **environment_get_arr(t_minishell *msh) { char **arr; - t_environment *env; int i; - t_list *environment; + t_list *env; - environment = msh->environment; + env = msh->environment; arr = malloc_safe(msh, - sizeof(char *) * (ft_lstsize(environment) + 1)); + sizeof(char *) * (ft_lstsize(env) + 1)); i = 0; - while (environment != NULL) + while (env != NULL) { - env = (t_environment *)environment->content; - arr[i] = malloc_safe(msh, - ft_strlen(env->name) + ft_strlen(env->value) + 2); - ft_strlcpy(arr[i], env->name, ft_strlen(env->name) + 1); - ft_strlcat(arr[i], "=", ft_strlen(env->name) + 2); - ft_strlcat(arr[i], env->value, - ft_strlen(env->name) + ft_strlen(env->value) + 2); - environment = environment->next; - i++; + if (((t_environment *)env->content)->value != NULL + && ((t_environment *)env->content)->name != NULL) + { + arr[i] = create_variable(msh, (t_environment *)env->content); + i++; + } + env = env->next; } arr[i] = NULL; return (arr); diff --git a/src/utils/ft_strdup_safe.c b/src/utils/ft_strdup_safe.c index 99bbf95..3ea5cde 100644 --- a/src/utils/ft_strdup_safe.c +++ b/src/utils/ft_strdup_safe.c @@ -1,22 +1,24 @@ -/* ************************************************************************** */ -/* */ -/* :::::::: */ -/* ft_strdup_safe.c :+: :+: */ -/* +:+ */ -/* By: whaffman +#+ */ -/* +#+ */ -/* Created: 2025/02/20 18:01:27 by whaffman #+# #+# */ -/* Updated: 2025/02/20 18:04:53 by whaffman ######## odam.nl */ -/* */ -/* ************************************************************************** */ - -#include "minishell.h" - -char *ft_strdup_safe(t_minishell *msh, const char *str) -{ - char *new_str; - - new_str = ft_strdup(str); - check_malloc(msh, new_str); - return (new_str); -} +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_strdup_safe.c :+: :+: */ +/* +:+ */ +/* By: whaffman +#+ */ +/* +#+ */ +/* Created: 2025/02/20 18:01:27 by whaffman #+# #+# */ +/* Updated: 2025/03/04 09:59:41 by whaffman ######## odam.nl */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" + +char *ft_strdup_safe(t_minishell *msh, const char *str) +{ + char *new_str; + + if (!str) + return (NULL); + new_str = ft_strdup(str); + check_malloc(msh, new_str); + return (new_str); +}