quote parsing, love it

This commit is contained in:
Quinten Mennen 2025-02-27 19:29:49 +01:00
parent 2d9b35d127
commit d13fb174c5
2 changed files with 22 additions and 9 deletions

View File

@ -6,7 +6,7 @@
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */ /* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2025/02/27 19:02:37 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; len = lexer->pos - start;
word = malloc_safe(msh, sizeof(char) * len + 1); word = malloc_safe(msh, sizeof(char) * len + 1);
ft_strlcpy(word, lexer->input + start, len + 1); ft_strlcpy(word, lexer->input + start, len + 1);
if (lexer->current_char == qc)
lexer_readchar(lexer); lexer_readchar(lexer);
else
{
free_safe(msh, (void **)&word);
return (NULL);
}
return (word); return (word);
} }

View File

@ -6,7 +6,7 @@
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */ /* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2025/02/05 19:03:47 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) static int match_quotes(t_minishell *msh, t_lexer *lexer)
{ {
char c;
int i; int i;
int d_qts; int d_qts;
int s_qts; int s_qts;
i = lexer->pos; i = lexer->pos;
c = lexer->input[i];
d_qts = 0; d_qts = 0;
s_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] == '\'') if (lexer->input[i] == '\'')
s_qts++; s_qts++;
if (lexer->input[i] == '\'') if (lexer->input[i] == '\'')
d_qts++; d_qts++;
i++; i++;
c = lexer->input[i];
} }
return ((s_qts % 2) == 0 && (d_qts % 2) == 0); return ((s_qts % 2) == 0 && (d_qts % 2) == 0);
} }
@ -56,10 +59,14 @@ char *lexer_readword(t_minishell *msh, t_lexer *lexer)
char c; char c;
start = lexer->pos; start = lexer->pos;
if (lexer->current_char == '"' || lexer->current_char == '\'')
{
return (lexer_parse_quotes(msh, lexer));
}
if (!match_quotes(msh, lexer)) if (!match_quotes(msh, lexer))
return (NULL); return (NULL);
if (lexer->current_char == '"' || lexer->current_char == '\'')
return (lexer_parse_quotes(msh, lexer));
len = calculate_word_len(msh, lexer); len = calculate_word_len(msh, lexer);
word = malloc_safe(msh, sizeof(char) * len); word = malloc_safe(msh, sizeof(char) * len);
c = lexer->current_char; c = lexer->current_char;