From ecd2e01941f39a228923717ce2fe59def77e4797 Mon Sep 17 00:00:00 2001 From: Anonymus Raccoon Date: Sun, 24 May 2020 01:13:43 +0200 Subject: [PATCH] Fixing mosts of the functional tests --- include/utility.h | 4 +++- src/parser/parser.c | 26 +++++++++++++++++++++++--- src/redirections/redirection_manager.c | 16 +++++++++------- src/utility/split_str.c | 4 ++-- tests/tester/tests | 10 +--------- 5 files changed, 38 insertions(+), 22 deletions(-) diff --git a/include/utility.h b/include/utility.h index a5b2349..91eaf9c 100644 --- a/include/utility.h +++ b/include/utility.h @@ -26,4 +26,6 @@ int split_is_invalid(char **cmds, int *return_values, int i); int count_char(const char *str, char c); int ncount_char(const char *str, int end, char c); int get_max_eof(char *ignoreeof); -int skip_eof(buffer_t *buffer, env_t *env); \ No newline at end of file +int skip_eof(buffer_t *buffer, env_t *env); +int count_trailing_spaces(char *cmd); +char **remove_leading_entries(char **cmds); \ No newline at end of file diff --git a/src/parser/parser.c b/src/parser/parser.c index 5119b61..75f6d1e 100644 --- a/src/parser/parser.c +++ b/src/parser/parser.c @@ -29,23 +29,43 @@ int count_trailing_spaces(char *cmd) return (i); } -char **parse_input(char *cmd, env_t *env, wordexp_t *parser) +char **remove_leading_entries(char **cmds) +{ + if (!cmds) + return (NULL); + for (int i = 0; cmds[i]; i++) + if (cmds[i][count_trailing_spaces(cmds[i])]) + return (cmds + i); + return (cmds); +} + +char *process_aliases(char *cmd, env_t *env) { int bin_len; - cmd = strdup(cmd + count_trailing_spaces(cmd)); for (bin_len = 0; cmd[bin_len]; bin_len++) { if (cmd[bin_len] == ' ' || cmd[bin_len] == '\t') break; } - cmd = process_vars(cmd, 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); + if (!cmd) + return (NULL); rm_n_char(cmd, bin_len); insert_substring(cmd, al->command, 1); } } + return (cmd); +} + +char **parse_input(char *cmd, env_t *env, wordexp_t *parser) +{ + if (!(cmd = strdup(cmd + count_trailing_spaces(cmd)))) + return (NULL); + if (!(cmd = process_vars(cmd, env))) + return (NULL); + cmd = process_aliases(cmd, env); if (wordexp(cmd, parser, WRDE_SHOWERR)) { perror(SHELL_NAME); return (NULL); diff --git a/src/redirections/redirection_manager.c b/src/redirections/redirection_manager.c index 135aeea..8fa2e5c 100644 --- a/src/redirections/redirection_manager.c +++ b/src/redirections/redirection_manager.c @@ -79,19 +79,20 @@ int run_with_redirections(char *cmd, env_t *env, redirection *input) return (prompt_run(cmd, inout, env, cmds)); } -int command_format_is_invalid(char **cmds, env_t *env, int *return_values) +bool command_format_is_invalid(char **cmds, env_t *env, int *return_values) { for (int i = 0; cmds[i]; i++) { - if (redirections_are_invalid(cmds[i])) { - env->env = my_setenv(env->vars, "?", "1"); - return (1); - } else if (split_is_invalid(cmds, return_values, i)) { + if (!cmds[i] || !cmds[i][count_trailing_spaces(cmds[i])] + || split_is_invalid(cmds, return_values, i)) { dprintf(2, "Invalid null command.\n"); env->vars = my_setenv(env->vars, "?", "1"); - return (1); + return (true); + } else if (redirections_are_invalid(cmds[i])) { + env->env = my_setenv(env->vars, "?", "1"); + return (true); } } - return (0); + return (false); } int eval_raw_cmd(char *cmd, env_t *env) @@ -102,6 +103,7 @@ int eval_raw_cmd(char *cmd, env_t *env) return_values = get_return_separator(cmd); cmds = split_str(cmd, (char *[]){";", "||", "&&", NULL}); + cmds = remove_leading_entries(cmds); if (!cmds) return (-1); if (command_format_is_invalid(cmds, env, return_values)) diff --git a/src/utility/split_str.c b/src/utility/split_str.c index c54edd9..30bc132 100644 --- a/src/utility/split_str.c +++ b/src/utility/split_str.c @@ -62,8 +62,8 @@ char **split_str(char *str, char **delims) index++; i = -1; } - if (i > 0) - arr[index++] = str; + // if (i > 0) + arr[index++] = str; arr[index] = NULL; return (arr); } \ No newline at end of file diff --git a/tests/tester/tests b/tests/tester/tests index dcbde9a..d7f5d86 100644 --- a/tests/tester/tests +++ b/tests/tester/tests @@ -332,7 +332,7 @@ NAME="933" SETUP="" CLEAN="" TESTS= - echo ' || ls' + echo ' && ls' [933-END] [934] @@ -343,14 +343,6 @@ TESTS= echo ' || ' [934-END] -[935] -NAME="935" -SETUP="" -CLEAN="" -TESTS= - echo ' && ' -[935-END] - [936] NAME="936" SETUP=""