From 7b542598af20d2ca853a0542307dcb13773f5769 Mon Sep 17 00:00:00 2001 From: Anonymus Raccoon Date: Sun, 24 May 2020 22:51:49 +0200 Subject: [PATCH] Cleaning the parser --- src/parser/parser.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/parser/parser.c b/src/parser/parser.c index 75f6d1e..10bd6ad 100644 --- a/src/parser/parser.c +++ b/src/parser/parser.c @@ -42,6 +42,7 @@ char **remove_leading_entries(char **cmds) char *process_aliases(char *cmd, env_t *env) { int bin_len; + int len; for (bin_len = 0; cmd[bin_len]; bin_len++) { if (cmd[bin_len] == ' ' || cmd[bin_len] == '\t') @@ -49,10 +50,11 @@ char *process_aliases(char *cmd, env_t *env) } for (alias_t *al = env->alias; al; al = al->next) { if (!strncmp(al->alias, cmd, bin_len)) { - cmd = realloc(cmd, strlen(cmd) + strlen(al->command) + 1 - bin_len); + len = strlen(cmd) + strlen(al->command) + 1 - bin_len; + rm_n_char(cmd, bin_len); + cmd = realloc(cmd, len); if (!cmd) return (NULL); - rm_n_char(cmd, bin_len); insert_substring(cmd, al->command, 1); } } @@ -66,8 +68,17 @@ char **parse_input(char *cmd, env_t *env, wordexp_t *parser) if (!(cmd = process_vars(cmd, env))) return (NULL); cmd = process_aliases(cmd, env); - if (wordexp(cmd, parser, WRDE_SHOWERR)) { - perror(SHELL_NAME); + switch (wordexp(cmd, parser, WRDE_SHOWERR)) { + case 0: + break; + case WRDE_BADCHAR: + dprintf(2, "Illegal occurrence of one of |, &, ;, <, >, (, ), {, }.\n"); + return (NULL); + case WRDE_SYNTAX: + dprintf(2, "Shell syntax error\n"); + return (NULL); + default: + dprintf(2, "Unknonw parsing error.\n"); return (NULL); } free(cmd);