From b6e732d73ecaa35f2583a324aace7711d5f4a05e Mon Sep 17 00:00:00 2001 From: Charles Cabergs Date: Tue, 15 Sep 2020 18:37:11 +0200 Subject: Added lexer quote mismatch error message, Fixing escape on last character --- src/lexer/trim.c | 30 +++++++++++++----------------- src/preprocess.c | 4 ++-- 2 files changed, 15 insertions(+), 19 deletions(-) (limited to 'src') diff --git a/src/lexer/trim.c b/src/lexer/trim.c index cffe43a..0bdacac 100644 --- a/src/lexer/trim.c +++ b/src/lexer/trim.c @@ -6,7 +6,7 @@ /* By: nahaddac +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/07/16 08:18:36 by nahaddac #+# #+# */ -/* Updated: 2020/09/14 16:33:13 by charles ### ########.fr */ +/* Updated: 2020/09/15 18:31:56 by charles ### ########.fr */ /* */ /* ************************************************************************** */ @@ -35,19 +35,17 @@ void del_space(char *str) int del_quote(char *str) { size_t i; - int nb_q; + size_t quote_counter; i = 0; - nb_q = 1; + quote_counter = 1; if (str[0] == '\'') { while (str[i++] != '\0') { - if (str[i] == '\\') - i += 2; if (str[i] == '\'') { - nb_q++; + quote_counter++; break ; } } @@ -60,21 +58,19 @@ int del_quote(char *str) i += 2; if (str[i] == '"') { - nb_q++; + quote_counter++; break ; } } } - if (nb_q % 2 == 0) - { - str[i] = '\0'; - if(!(ft_memmove(str, str + 1, ft_strlen(str + 1) + 1))) - return 1; - else - return 0; - } - else - return 2; + if (quote_counter % 2 == 1) + { + errorf("unexpected EOF while looking for matching `%c'\n", str[0]); + return (1); + } + str[i] = '\0'; + ft_memmove(str, str + 1, ft_strlen(str + 1) + 1); + return (0); } int lexer_trim(t_tok_lst *tokens) diff --git a/src/preprocess.c b/src/preprocess.c index b3a6743..1379107 100644 --- a/src/preprocess.c +++ b/src/preprocess.c @@ -6,7 +6,7 @@ /* By: charles +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/04/03 08:58:49 by charles #+# #+# */ -/* Updated: 2020/09/15 17:40:25 by charles ### ########.fr */ +/* Updated: 2020/09/15 18:35:09 by charles ### ########.fr */ /* */ /* ************************************************************************** */ @@ -83,7 +83,7 @@ char **st_tokens_to_argv(t_tok_lst *tokens) bool escape(char *str, enum e_tok tag) { - if (str[0] == '\\' + if (str[0] == '\\' && str[1] != '\0' && (tag & TAG_STR || ((tag & TAG_STR_DOUBLE) && ft_strchr("\\\"$", str[1])))) { -- cgit