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=""