/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* p_args.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: rbousset +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/02/14 17:19:27 by rbousset #+# #+# */ /* Updated: 2020/02/14 17:19:29 by rbousset ### ########lyon.fr */ /* */ /* ************************************************************************** */ #include #include #include #include "d_define.h" /* ================= */ /* TODO: DELETE THIS */ /* ================= */ static void p_print(char *words[]) { char **ptr; ptr = words; while (*ptr != NULL) { ft_printf("[%s]\n", *ptr); ptr++; } } /* ================== */ /* TODO: DELETE ABOVE */ /* ================== */ static void p_skip_delim(char *ptr, char c) { ptr++; while (*ptr != C_NULL && *ptr != c) { ptr++; if (*ptr == c && *(ptr - 1) == C_BACKSLASH) ptr++; } if (*ptr != C_NULL) ptr++; } static uint16_t p_count_args(char *ptr, uint16_t argc) { if (*ptr == C_NULL) return (argc); while (*ptr != C_NULL && ft_iswhitespace(*ptr) == TRUE) ptr++; if (*ptr != C_SQUOTE && *ptr != C_DQUOTE) { while (*ptr != C_NULL && ft_iswhitespace(*ptr) == FALSE) { ptr++; if ((*ptr == C_SQUOTE || *ptr == C_DQUOTE) && *(ptr - 1) != C_BACKSLASH) { ptr++; return (p_count_args(ptr, argc)); } } } else if (*ptr == C_SQUOTE) { p_skip_delim(ptr, C_SQUOTE); } else if (*ptr == C_DQUOTE) { p_skip_delim(ptr, C_DQUOTE); } return (p_count_args(ptr, argc + 1)); } static char **p_split_words_no_rdr(const char word[]) { char **words; char *ptr; uint16_t argc; ptr = (char*)word; argc = p_count_args(ptr, 0); ft_printf("%hu\n", argc); exit(0); if ((words = (char**)malloc((argc + 1) * sizeof(char*))) == NULL) return (NULL); words[argc] = NULL; return (words); } char **p_split_args(const char word[], int8_t redir) { char **words; words = NULL; ft_printf("word at start: [%s]\n", word); if (redir == 0) { if ((words = p_split_words_no_rdr(word)) == NULL) return (NULL); p_print(words); return (words); } p_print(words); return (words); /* char **words; */ /* char *subst; */ /* size_t i; */ /* if (redir == 0) */ /* { */ /* if (!(words = ft_split(word, ' '))) */ /* return (NULL); */ /* return (words); */ /* } */ /* i = 0; */ /* while (word[i] && ft_ischarset("<>", word[i]) == FALSE) */ /* i++; */ /* while (redir > 0 && ft_isdigit(word[i]) == TRUE) */ /* i--; */ /* if (!(subst = ft_substr(word, 0, i))) */ /* return (NULL); */ /* if (!(words = ft_split(subst, ' '))) */ /* { */ /* ft_memdel((void*)&subst); */ /* return (NULL); */ /* } */ /* ft_memdel((void*)&subst); */ /* return (words); */ }