diff --git a/src/builtin/builtin_unalias.c b/src/builtin/builtin_unalias.c index 207260c..ab208a3 100644 --- a/src/builtin/builtin_unalias.c +++ b/src/builtin/builtin_unalias.c @@ -33,6 +33,7 @@ void free_alias(alias_t *alias) void remove_alias(char *alias, alias_t **list) { + alias_t *prev = NULL; alias_t *tmp = *list; if (!tmp) @@ -42,15 +43,14 @@ void remove_alias(char *alias, alias_t **list) free_alias(tmp); return; } - for (alias_t *ptr = *list; ptr->next; ptr = ptr->next) { - if (strcmp(ptr->next->alias, alias) == 0) { - tmp = ptr->next; - ptr->next = ptr->next->next; + prev = tmp; + tmp = tmp->next; + for (; tmp; tmp = tmp->next) { + if (strcmp(tmp->alias, alias) == 0) { + prev->next = tmp->next; free_alias(tmp); return; } + prev = tmp; } - for (tmp = *list; tmp; tmp = tmp->next->next); - free_alias(tmp->next); - tmp->next = NULL; } \ No newline at end of file diff --git a/src/redirections/redirection_manager.c b/src/redirections/redirection_manager.c index a95cd95..d3d96ec 100644 --- a/src/redirections/redirection_manager.c +++ b/src/redirections/redirection_manager.c @@ -99,17 +99,16 @@ bool command_format_is_invalid(char **cmds, env_t *env, int *return_values) int eval_raw_cmd(char *cmd, env_t *env) { - int *return_values = NULL; - char **cmds = NULL; + int *return_values = get_return_separator(cmd); + char **cmds = split_str(cmd, (char *[]){";", "||", "&&", NULL}); + char **const_cmd = cmds; int ret = 0; - return_values = get_return_separator(cmd); - cmds = split_str(cmd, (char *[]){";", "||", "&&", NULL}); cmds = remove_leading_entries(cmds); - if (!cmds) + if (!cmds || !return_values) return (-1); if (command_format_is_invalid(cmds, env, return_values)) - return (0); + return (free(const_cmd), free(return_values), 0); for (int i = 0; cmds[i]; i++) { if ((return_values[i] == 0 && get_return(my_getenv(env->vars, "?"))) || (return_values[i] == 1 && !get_return(my_getenv(env->vars, "?")))){ @@ -117,5 +116,7 @@ int eval_raw_cmd(char *cmd, env_t *env) } else if (run_with_redirections(cmds[i], env, NULL)) ret = -1; } + free(const_cmd); + free(return_values); return (ret); } \ No newline at end of file diff --git a/tests/tester/tests b/tests/tester/tests index bda695b..abc635f 100644 --- a/tests/tester/tests +++ b/tests/tester/tests @@ -183,17 +183,6 @@ TESTS= echo 'alias' [917-END] -[918] -NAME="918" -SETUP="" -CLEAN="" -TESTS= - echo 'alias ls cd ..' - echo 'alias | grep cd' - echo 'alias ls cd' - echo 'alias | grep cd' -[918-END] - [919] NAME="919" SETUP=""