From d13fb174c5b11afa59db6f5348bc33572f316088 Mon Sep 17 00:00:00 2001 From: Quinten Mennen Date: Thu, 27 Feb 2025 19:29:49 +0100 Subject: [PATCH] quote parsing, love it --- src/lexer/lexer_parse_quotes.c | 10 ++++++++-- src/lexer/lexer_read_word.c | 21 ++++++++++++++------- 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/src/lexer/lexer_parse_quotes.c b/src/lexer/lexer_parse_quotes.c index 0edf290..09010f9 100644 --- a/src/lexer/lexer_parse_quotes.c +++ b/src/lexer/lexer_parse_quotes.c @@ -6,7 +6,7 @@ /* By: qmennen +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/02/27 19:02:37 by qmennen #+# #+# */ -/* Updated: 2025/02/27 19:02:54 by qmennen ### ########.fr */ +/* Updated: 2025/02/27 19:26:35 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ @@ -28,6 +28,12 @@ char *lexer_parse_quotes(t_minishell *msh, t_lexer *lexer) len = lexer->pos - start; word = malloc_safe(msh, sizeof(char) * len + 1); ft_strlcpy(word, lexer->input + start, len + 1); - lexer_readchar(lexer); + if (lexer->current_char == qc) + lexer_readchar(lexer); + else + { + free_safe(msh, (void **)&word); + return (NULL); + } return (word); } diff --git a/src/lexer/lexer_read_word.c b/src/lexer/lexer_read_word.c index 23404fc..45d234f 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:22:09 by qmennen ### ########.fr */ +/* Updated: 2025/02/27 19:28:50 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ @@ -14,20 +14,23 @@ static int match_quotes(t_minishell *msh, t_lexer *lexer) { - int i; - int d_qts; - int s_qts; + char c; + int i; + int d_qts; + int s_qts; i = lexer->pos; + c = lexer->input[i]; d_qts = 0; s_qts = 0; - while (lexer->input[i]) + while (ft_isprint(c) && c != '<' && c != '>' && c != '|' && c != '\0' && !ft_isspace(c)) { if (lexer->input[i] == '\'') s_qts++; if (lexer->input[i] == '\'') d_qts++; i++; + c = lexer->input[i]; } return ((s_qts % 2) == 0 && (d_qts % 2) == 0); } @@ -56,10 +59,14 @@ char *lexer_readword(t_minishell *msh, t_lexer *lexer) char c; start = lexer->pos; + + if (lexer->current_char == '"' || lexer->current_char == '\'') + { + return (lexer_parse_quotes(msh, lexer)); + + } if (!match_quotes(msh, 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;