From 6d786aed3344a846d9f4c8d0d26f0a165fd86ccc Mon Sep 17 00:00:00 2001 From: Jack Halford Date: Tue, 28 Mar 2017 15:47:05 +0200 Subject: [PATCH] correctif escaped dquote inside dquote --- 42sh/src/lexer/lexer_dquote.c | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/42sh/src/lexer/lexer_dquote.c b/42sh/src/lexer/lexer_dquote.c index 5076679c..922f1966 100644 --- a/42sh/src/lexer/lexer_dquote.c +++ b/42sh/src/lexer/lexer_dquote.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/11/28 18:36:58 by jhalford #+# #+# */ -/* Updated: 2017/03/27 21:27:35 by gwojda ### ########.fr */ +/* Updated: 2017/03/28 15:46:22 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ @@ -19,17 +19,16 @@ int lexer_dquote(t_list **alst, t_lexer *lexer) token = (*alst)->content; token->type = token->type ? token->type : TK_WORD; if (lexer->str[lexer->pos] == '"') + get_lexer_stack(*lexer) == DQUOTE && (lexer->state = WORD) ? + pop(&lexer->stack) : push(&lexer->stack, DQUOTE) && 0; + else if (lexer->str[lexer->pos] == '\\') { - if (get_lexer_stack(*lexer) == DQUOTE && (lexer->state = WORD)) - pop(&lexer->stack); - else - push(&lexer->stack, DQUOTE); - } - else if (lexer->str[lexer->pos] == '\\' && lexer->str[lexer->pos + 1] == 0) - { - lexer->pos++; - if (lexer->str[lexer->pos] == 0) + if (lexer->str[++lexer->pos] == 0) return (push(&lexer->stack, BACKSLASH) ? 0 : 0); + else if (lexer->str[lexer->pos] == '"') + token_append(token, lexer, 1, 1); + else + --lexer->pos; } else if (lexer->str[lexer->pos] == '`' && (lexer->state = BQUOTE)) return (lexer_lex(alst, lexer));