diff --git a/Makefile b/Makefile index 151c5f8..511f0d9 100644 --- a/Makefile +++ b/Makefile @@ -7,7 +7,6 @@ SRC = src/shell.c \ src/prompt.c \ - src/alias.c \ src/execute.c \ src/glob.c \ src/redirections/redirection_manager.c \ @@ -60,7 +59,7 @@ TESTS = tests/tenv.c \ tests/targc.c \ tests/texecute.c \ tests/tcd.c \ - tests/tsource.c \ + tests/tsource.c \ tests/techo.c COVERAGE = -lcriterion --coverage diff --git a/src/alias.c b/src/alias.c deleted file mode 100644 index f480dc7..0000000 --- a/src/alias.c +++ /dev/null @@ -1,53 +0,0 @@ -/* -** EPITECH PROJECT, 2020 -** alias.c -** File description: -** alias -*/ - -#include "shell.h" -#include "builtin.h" -#include "utility.h" -#include -#include -#include - - -char *get_alias_command(char *cmd, alias_t *alias) -{ - alias_t *tmp = NULL; - - tmp = alias; - for (; tmp; tmp = tmp->next) { - if (!strcmp(cmd, alias->alias)) { - cmd = strdup(alias->command); - tmp = alias; - } - } - return (cmd); -} - -char *add_separator(char *cmd, int *return_values, int index) -{ - int pos = 0; - char *new_cmd = NULL; - - if (!cmd) - return (NULL); - new_cmd = calloc(strlen(cmd) + 3, sizeof(char)); - if (!new_cmd) - return (NULL); - for (int i = 0; cmd[i]; i++) - new_cmd[i] = cmd[pos++]; - if (return_values[index + 1] != -2) { - new_cmd[pos] = ';'; - if (return_values[index + 1] == 1) { - new_cmd[pos++] = '|'; - new_cmd[pos++] = '|'; - } else if (return_values[index + 1] == 0) { - new_cmd[pos++] = '&'; - new_cmd[pos++] = '&'; - } - } - return (new_cmd); -} \ No newline at end of file diff --git a/src/parser/parser.c b/src/parser/parser.c index 85dbf27..5119b61 100644 --- a/src/parser/parser.c +++ b/src/parser/parser.c @@ -19,91 +19,21 @@ char *strdup(const char *); -const parser_map parsers[] = { - {'\'', &parse_quotes}, - {'"', &parse_double_quotes}, - {'\0', NULL} -}; - -bool is_character_valid(char c) +int count_trailing_spaces(char *cmd) { - static bool is_valid = false; + int i = 0; - if (is_valid) { - is_valid = false; - return (true); - } - if (c == '\\') { - is_valid = true; - } - return (c >= 33 && c <= 126); -} - -int call_parsers(char *cmd, int index, char **data, env_t *env) -{ - int new_index = 0; - - for (int i = 0; parsers[i].key; i++) { - if (cmd[index] != parsers[i].key) - continue; - new_index = parsers[i].parser(&cmd[index], data, env); - if (!(*data)) - return (-1); - return (new_index); - } - return (0); -} - -int manage_specials_parsers(char *cmd, char **buffer, int *inc, env_t *env) -{ - int new_index = 0; - char *data = NULL; - - new_index = call_parsers(cmd, 0, &data, env); - if (new_index == -1) - return (-1); - if (new_index > 0) { - (*inc)--; - *buffer = add_to_buffer(*buffer, &cmd[(*inc) * -1], (*inc), env); - *buffer = add_to_buffer(*buffer, data, strlen(data), NULL); - free(data); - (*inc) = 0; - if (!(*buffer)) - return (-1); - return (new_index); - } - return (0); -} - -int parser_loop(char *cmd, char **buffer, char **ptr, void **pack) -{ - int *i = pack[0]; - int *inc = pack[1]; - int *new_index = pack[2]; - env_t *env = pack[3]; - - if (is_character_valid(cmd[*i])) { - (*new_index) = manage_specials_parsers(&cmd[(*i)], buffer, inc, env); - if ((*new_index) == -1) - return (-1); - (*i) += (*new_index); - if (*new_index) - (*ptr) = cmd + (*i) + 1; - return (1); - } - if (*inc == 1 && !(*new_index)) { - (*ptr) = cmd + (*i) + 1; - (*inc) = 0; - return (1); - } - return (0); + for (i = 0; cmd[i]; i++) + if (cmd[i] != ' ' && cmd[i] != '\t') + break; + return (i); } char **parse_input(char *cmd, env_t *env, wordexp_t *parser) { int bin_len; - cmd = strdup(cmd); + 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;