From f52e8e9d2a552ef3aceff725f518d6e54d4bb87f Mon Sep 17 00:00:00 2001
From: Anonymus Raccoon
Date: Sat, 23 May 2020 21:58:53 +0200
Subject: [PATCH] Fixing alias with spaces before command
---
Makefile | 3 +-
src/alias.c | 53 ----------------------------
src/parser/parser.c | 84 ++++-----------------------------------------
3 files changed, 8 insertions(+), 132 deletions(-)
delete mode 100644 src/alias.c
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;