diff --git a/src/lexer/lexer_read_word.c b/src/lexer/lexer_read_word.c index 8c0b996..7eb8a2a 100644 --- a/src/lexer/lexer_read_word.c +++ b/src/lexer/lexer_read_word.c @@ -6,7 +6,7 @@ /* By: qmennen +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/02/05 19:03:47 by qmennen #+# #+# */ -/* Updated: 2025/02/27 19:03:15 by qmennen ### ########.fr */ +/* Updated: 2025/02/27 19:20:22 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ @@ -28,6 +28,22 @@ static int match_quotes(t_minishell *msh, t_lexer *lexer) return ((qts % 2) == 0); } +static int calculate_word_len(t_minishell *msh, t_lexer *lexer) +{ + int i; + int len; + + len = 1; + i = lexer->pos; + while (ft_isprint(lexer->input[i]) && lexer->input[i] != '<' && lexer->input[i]!= '>' && lexer->input[i] != '|' && lexer->input[i] != '\0' && !ft_isspace(lexer->input[i])) + { + if(lexer->input[i] != '\'' && lexer->input[i] != '"') + len++; + i++; + } + return (len); +} + char *lexer_readword(t_minishell *msh, t_lexer *lexer) { int start; @@ -40,15 +56,17 @@ char *lexer_readword(t_minishell *msh, t_lexer *lexer) return (NULL); if (lexer->current_char == '"' || lexer->current_char == '\'') return (lexer_parse_quotes(msh, lexer)); + len = calculate_word_len(msh, lexer); + word = malloc_safe(msh, sizeof(char) * len); c = lexer->current_char; - while (ft_isprint(c) && c != '<' &&c != '>' && c != '|' && c != '\0' - && !ft_isspace(lexer->current_char)) + len = 0; + while (ft_isprint(c) && c != '<' && c != '>' && c != '|' && c != '\0' && !ft_isspace(c)) { + if(c != '\'' && c != '"') + word[len++] = lexer->current_char; lexer_readchar(lexer); c = lexer->current_char; } - len = lexer->pos - start; - word = malloc_safe(msh, sizeof(char) * len + 1); - ft_strlcpy(word, lexer->input + start, len + 1); + word[len] = 0; return (word); }