/* ************************************************************************** */ /* */ /* :::::::: */ /* ft_split_safe.c :+: :+: */ /* +:+ */ /* By: whaffman +#+ */ /* +#+ */ /* Created: 2025/03/02 21:58:06 by whaffman #+# #+# */ /* Updated: 2025/03/02 22:11:34 by whaffman ######## odam.nl */ /* */ /* ************************************************************************** */ #include "minishell.h" static void *free_arr_safe(t_minishell *msh, int n, char ***arr) { while (n-- > 0) { free_safe(msh, (void **) &(*arr)[n]); } free_safe(msh, (void **) *arr); return (NULL); } char **ft_split_safe(t_minishell *msh, char const *s, char c) { char **result; int n; int i; int j; result = malloc_safe(msh, (ft_count_words(s, c) + 1) * sizeof(char *)); if (!result) return (NULL); i = 0; n = 0; while (s[i]) { j = 0; while (s[i] == c) i++; while (s[i + j] && s[i + j] != c) j++; if (j) result[n] = ft_substr_safe(msh, s, i, j); if (j && !result[n++]) return (free_arr_safe(msh, n, &result)); i += j; } result[n] = NULL; return (result); }