From 4df96de4a387605e75c36844a32cf61dc0427250 Mon Sep 17 00:00:00 2001 From: mdev9 Date: Wed, 6 Mar 2024 09:10:48 +0100 Subject: [PATCH] fixed builtin edge cases --- srcs/cd.c | 6 +++++- srcs/exit.c | 31 +++++++++++++++---------------- srcs/main.c | 4 ++-- srcs/path.c | 3 ++- 4 files changed, 24 insertions(+), 20 deletions(-) diff --git a/srcs/cd.c b/srcs/cd.c index 1ecbb99..7ba2d43 100644 --- a/srcs/cd.c +++ b/srcs/cd.c @@ -6,7 +6,7 @@ /* By: marde-vr +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/02/16 21:02:54 by marde-vr #+# #+# */ -/* Updated: 2024/02/21 17:30:36 by marde-vr ### ########.fr */ +/* Updated: 2024/03/06 08:43:53 by marde-vr ### ########.fr */ /* */ /* ************************************************************************** */ @@ -19,6 +19,7 @@ int cd(t_cmd *args) if (args->next && args->next->next && args->next->next->type == ARG) { ft_printf_fd(2, "minishell: cd: too many arguments\n"); + g_return_code = 1; return (1); } if (!args->next || args->next->type != ARG) @@ -26,6 +27,9 @@ int cd(t_cmd *args) else new_wd = args->next->token; if (chdir(new_wd) == -1) + { perror("minishell: cd"); + g_return_code = 1; + } return (0); } diff --git a/srcs/exit.c b/srcs/exit.c index 864a604..61ed5c4 100755 --- a/srcs/exit.c +++ b/srcs/exit.c @@ -6,43 +6,42 @@ /* By: marde-vr +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/02/07 16:04:11 by tomoron #+# #+# */ -/* Updated: 2024/02/21 17:43:52 by marde-vr ### ########.fr */ +/* Updated: 2024/03/06 09:10:11 by marde-vr ### ########.fr */ /* */ /* ************************************************************************** */ #include "minishell.h" -void print_numeric_arg_err(char *arg) +void numeric_arg_err(char *arg, int *exit_code) { ft_putstr_fd("minishell: exit: ", 2); ft_putstr_fd(arg, 2); ft_putstr_fd(": numeric argument required\n", 2); + *exit_code = 2; } void exit_bt(t_msh *msh) { - t_cmd *start; + t_cmd *cur_cmd; int exit_code; - start = msh->cmds; - msh->cmds = msh->cmds->next; + cur_cmd = msh->cmds->next; ft_printf("exit\n"); - if (msh->cmds && msh->cmds->next && msh->cmds->next->type == ARG - && ft_strisnbr(msh->cmds->token)) + if (cur_cmd && cur_cmd->next && cur_cmd->next->type == ARG + && ft_strisnbr(cur_cmd->token)) + { ft_putstr_fd("minishell: exit: too many arguments\n", 2); + g_return_code = 1; + } else { - if (msh->cmds && msh->cmds->type == ARG - && !ft_strisnbr(msh->cmds->token)) - print_numeric_arg_err(msh->cmds->token); - if (msh->cmds && msh->cmds->type == ARG) - exit_code = (unsigned char)ft_atoi(msh->cmds->token); - else if (msh->cmds && msh->cmds->type == ARG - && !ft_strisnbr(msh->cmds->token)) - exit_code = 2; + if (cur_cmd && cur_cmd->type == ARG + && !ft_strisnbr(cur_cmd->token)) + numeric_arg_err(cur_cmd->token, &exit_code); + else if (cur_cmd && cur_cmd->type == ARG) + exit_code = (unsigned char)ft_atoi(cur_cmd->token); else exit_code = g_return_code; - free_cmd(start); free_msh(msh); exit(exit_code); } diff --git a/srcs/main.c b/srcs/main.c index d70838b..234ac66 100755 --- a/srcs/main.c +++ b/srcs/main.c @@ -6,7 +6,7 @@ /* By: marde-vr +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/02/02 21:59:20 by tomoron #+# #+# */ -/* Updated: 2024/03/05 18:30:57 by marde-vr ### ########.fr */ +/* Updated: 2024/03/06 08:32:18 by marde-vr ### ########.fr */ /* */ /* ************************************************************************** */ @@ -88,7 +88,7 @@ int main(int argc, char **argv, char **envp) commands = (char *)1; init_minishell(&msh, argc, argv, envp); - handle_minishellrc(msh); + //handle_minishellrc(msh); while (msh->env && commands) { prompt = get_prompt(msh->env); diff --git a/srcs/path.c b/srcs/path.c index 4d3310a..115fade 100644 --- a/srcs/path.c +++ b/srcs/path.c @@ -6,7 +6,7 @@ /* By: marde-vr +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/02/21 21:47:15 by marde-vr #+# #+# */ -/* Updated: 2024/03/05 17:30:27 by marde-vr ### ########.fr */ +/* Updated: 2024/03/06 08:42:49 by marde-vr ### ########.fr */ /* */ /* ************************************************************************** */ @@ -103,5 +103,6 @@ void get_cmd_path(t_msh *msh) ft_printf_fd(2, "%s: command not found\n", msh->cmds->token); free(msh->cmds->token); msh->cmds->token = 0; + g_return_code = 127; } }