/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* ft_split_charset_quoted.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: erey-bet +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/04/11 14:50:26 by erey-bet #+# #+# */ /* Updated: 2023/04/14 15:53:49 by erey-bet ### ########.fr */ /* */ /* ************************************************************************** */ #include "utils.h" int new_strs(char ***strs, const char *to_split, int *i, int *j) { if (ft_strlen((*strs)[(*i)]) <= 0) return (0); (*i)++; (*j) = 0; (*strs)[(*i)] = ft_calloc(sizeof(char), (ft_strlen(to_split) + 1)); if (!(*strs)[(*i)]) return (1); return (0); } int get_strs(const char *to_split, const char *charset, char ***strs, int *i) { int j; int x; int y; int check; x = -1; j = 0; while (to_split[++x]) { y = -1; check = 1; while (charset[++y]) { if (to_split[x] == charset[y] && !ft_is_in_quote(to_split, x)) { check = 0; if (new_strs(strs, to_split, i, &j)) return (1); } } if (check) (*strs)[(*i)][j++] = to_split[x]; } return (0); } void free_set_null(char ***strs, int i) { if (ft_strlen((*strs)[i]) == 0) { free((*strs)[i]); (*strs)[i] = NULL; } } char **ft_split_charset_quoted(const char *to_split, const char *charset) { char **strs; int i; strs = ft_calloc(sizeof(char *), (ft_strlen(to_split) + 1)); if (!strs) return (NULL); i = 0; strs[0] = ft_calloc(sizeof(char), (ft_strlen(to_split) + 1)); if (!strs[0]) { free(strs); return (NULL); } if (get_strs(to_split, charset, &strs, &i)) { i = -1; while (strs[++i]) free(strs[i]); free(strs); return (NULL); } free_set_null(&strs, i); return (strs); }