aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/lexer/lexer_utils.c6
-rw-r--r--src/lexer/trim.c9
-rw-r--r--src/main.c2
-rwxr-xr-xsrc/parse/parse.c9
4 files changed, 19 insertions, 7 deletions
diff --git a/src/lexer/lexer_utils.c b/src/lexer/lexer_utils.c
index c6bf54a..1b13eaa 100644
--- a/src/lexer/lexer_utils.c
+++ b/src/lexer/lexer_utils.c
@@ -62,6 +62,8 @@ static int lex_verif_simple_cote(char *input, int i)
while(input[i] != '\0')
{
++i;
+ if(input[i] == '\\')
+ i+=2;
if(input[i] == '\'')
break;
}
@@ -77,7 +79,11 @@ int lexer_verif_entre_cote(char *input, int i)
return(lex_verif_simple_cote(input, i));
i++;
while(input[i] != '"' && (input[i] != '\0'))
+ {
+ if (input[i] == '\\')
+ i += 2;
++i;
+ }
if (input[i + 1] == ' ')
while(input[i + 1] == ' ')
i++;
diff --git a/src/lexer/trim.c b/src/lexer/trim.c
index a0c7dec..6c435d5 100644
--- a/src/lexer/trim.c
+++ b/src/lexer/trim.c
@@ -27,10 +27,14 @@ char *del_quote(char *str)
int i;
char *s;
- i = 1;
- while(str[++i] != '\0')
+ i = 0;
+ while(str[i++] != '\0')
+ {
+ if(str[i] == '\\')
+ i+=2;
if (str[i] == '\'' || str[i] == '"')
break;
+ }
s = ft_strsubf(str, 1, i - 1);
return (s);
}
@@ -46,7 +50,6 @@ t_ftlst *lexe_trim_out(t_ftlst *lst)
tk = lst->data;
if (tk->tag & (TAG_STR_DOUBLE | TAG_STR_SINGLE))
{
- //printf("%s\n",tk->content );
tk->content = del_quote(tk->content);
if(lst->next == NULL)
if (tk->tag & TAG_STICK)
diff --git a/src/main.c b/src/main.c
index 777f1e9..ee00e00 100644
--- a/src/main.c
+++ b/src/main.c
@@ -42,7 +42,7 @@ int main(int argc, char **argv, char **envp)
{
t_ftlst *lex_out = lexer(ft_strdup(argv[2]));
- ft_lstiter(lex_out, token_debug);
+ //ft_lstiter(lex_out, token_debug);
t_ret *ret = parse(lex_out);
diff --git a/src/parse/parse.c b/src/parse/parse.c
index 36e603a..795afc7 100755
--- a/src/parse/parse.c
+++ b/src/parse/parse.c
@@ -34,16 +34,19 @@ t_ret *parse(t_ftlst *input)
}
else if (parse_redir_true_false(tag))
{
- ret->ast = push_redir(ret->ast, ret->rest);
- ret->rest = ret->rest->next;
while(ret->rest != NULL)
{
ret->ast = push_redir(ret->ast, ret->rest);
+ ret->rest = ret->rest->next;
+ ret->ast = push_redir(ret->ast, ret->rest);
tag = ((t_token *)ret->rest->data)->tag;
- if (tag & TAG_IS_STR && tag & TAG_STICK)
+ if ((tag & TAG_IS_STR && tag & TAG_STICK) || tag == TAG_IS_REDIR)
ret->rest = ret->rest->next;
else
+ {
+ ret->rest = ret->rest->next;
break;
+ }
}
}
}