diff --git a/ft_split.c b/ft_split.c index 935efc6..e52136f 100644 --- a/ft_split.c +++ b/ft_split.c @@ -6,13 +6,13 @@ /* By: dgaillet +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/11/06 17:02:58 by dgaillet #+# #+# */ -/* Updated: 2025/11/07 13:05:00 by dgaillet ### ########lyon.fr */ +/* Updated: 2025/11/09 20:29:25 by dgaillet ### ########lyon.fr */ /* */ /* ************************************************************************** */ #include "libft.h" -size_t strs_size(const char *s, char c) +static size_t strs_size(const char *s, unsigned char c) { int i; int j; @@ -28,7 +28,7 @@ size_t strs_size(const char *s, char c) return (i); } -int next_match(char *str, char c) +static int next_match(char *str, unsigned char c) { int i; @@ -38,15 +38,28 @@ int next_match(char *str, char c) return (i); } +static void clear_strs(char **strs) +{ + size_t i; + + i = 0; + while (strs[i]) + { + free(strs[i]); + i++; + } + free(strs); +} + char **ft_split(char const *s, char c) { char **strs; int i; int j; - strs = malloc(sizeof(char *) * (strs_size(s, c) + 1)); + strs = ft_calloc(sizeof(char *), strs_size(s, c) + 1); if (!strs) - return (free(strs), NULL); + return (NULL); i = 0; j = 0; while (s[j]) @@ -56,11 +69,12 @@ char **ft_split(char const *s, char c) if (s[j] == c) j++; strs[i] = ft_substr(&s[j], 0, next_match((char *) &s[j], c)); + if (!strs[i]) + return (clear_strs(strs), NULL); i++; } j++; } - strs[i] = NULL; return (strs); } /* @@ -71,7 +85,7 @@ int main(void) char **strs; int i; - strs = ft_split("awdawdawd", ' '); + strs = ft_split("--1-2--3---4----5-----42", ' '); i = 0; while (strs[i]) {