From 50b63411bf00190832eb7a4bba8b46b9d3f2dcc2 Mon Sep 17 00:00:00 2001 From: kinou-p Date: Fri, 15 Apr 2022 13:05:24 +0200 Subject: [PATCH] add ft_exit.c and return when exit --- Makefile | 3 ++- includes/minishell.h | 5 +++-- srcs/built_in/choose_builtin.c | 8 +++++-- srcs/built_in/exit.c | 41 ++++++++++++++++++++++++++++++++++ srcs/main.c | 10 ++++----- srcs/pipe/pipe.c | 4 ++-- srcs/set_cmd/free_cmd.c | 15 ++++++++----- 7 files changed, 68 insertions(+), 18 deletions(-) create mode 100644 srcs/built_in/exit.c diff --git a/Makefile b/Makefile index e9198aa..74496fb 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,7 @@ # By: apommier +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # Created: 2022/03/06 12:50:24 by apommier #+# #+# # -# Updated: 2022/04/15 05:49:45 by apommier ### ########.fr # +# Updated: 2022/04/15 12:36:24 by apommier ### ########.fr # # # # **************************************************************************** # @@ -18,6 +18,7 @@ SRCS = srcs/main.c\ srcs/set_cmd/set_cmd.c\ srcs/set_redirection/redirection.c\ srcs/set_redirection/utils.c\ + srcs/built_in/exit.c\ srcs/built_in/unset.c\ srcs/built_in/cd.c\ srcs/built_in/echo.c\ diff --git a/includes/minishell.h b/includes/minishell.h index 7f47fdd..2cc73a0 100644 --- a/includes/minishell.h +++ b/includes/minishell.h @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/03/09 22:33:49 by apommier #+# #+# */ -/* Updated: 2022/04/15 00:20:25 by apommier ### ########.fr */ +/* Updated: 2022/04/15 12:33:26 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -76,7 +76,7 @@ char *get_command(char **exec, char **env); //free_cmd void free_cmd(t_cmd *cmd); -void exit_shell(t_cmd *cmd); +void exit_shell(t_cmd *cmd, int ret); //set_quote.c char *set_var(t_cmd *big_cmd, char *cmd); @@ -117,6 +117,7 @@ int size_path(char **str); int check_return(t_s_cmd *cmd, int var); //real builtin +void ft_exit(t_s_cmd *cmd); int print_env(t_cmd *cmd); void ft_env(t_s_cmd *cmd, char **env); void ft_exit(t_s_cmd *cmd); diff --git a/srcs/built_in/choose_builtin.c b/srcs/built_in/choose_builtin.c index 9d4b872..9f39911 100644 --- a/srcs/built_in/choose_builtin.c +++ b/srcs/built_in/choose_builtin.c @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/02/28 17:12:52 by sadjigui #+# #+# */ -/* Updated: 2022/04/09 21:24:02 by apommier ### ########.fr */ +/* Updated: 2022/04/15 12:35:45 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -14,6 +14,8 @@ int is_builtin(char *cmd) { + if (!ft_strcmp(cmd, "exit")) + return (1); if (!ft_strcmp(cmd, "env")) return (1); if (!ft_strcmp(cmd, "export")) @@ -26,11 +28,13 @@ int is_builtin(char *cmd) return (1); if (!ft_strcmp(cmd, "pwd")) return (1); - return (0); + return (0); } void call_builtin(t_cmd *cmd) { + if (!ft_strcmp(cmd->current_s_cmd->cmd, "exit")) + ft_exit(cmd->current_s_cmd); if (!ft_strcmp(cmd->current_s_cmd->cmd, "env")) print_env(cmd); if (!ft_strcmp(cmd->current_s_cmd->cmd, "export")) diff --git a/srcs/built_in/exit.c b/srcs/built_in/exit.c new file mode 100644 index 0000000..6756149 --- /dev/null +++ b/srcs/built_in/exit.c @@ -0,0 +1,41 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* exit.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: apommier +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/04/15 11:23:32 by apommier #+# #+# */ +/* Updated: 2022/04/15 13:02:34 by apommier ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../../includes/minishell.h" + +void ft_exit(t_s_cmd *cmd) +{ + int i; + + i = -1; + //printf("nb_args= %d\n", cmd->nb_args); + if (cmd->nb_args > 2) + { + ft_putstr_fd("Minishell: exit: too many arguments\n", 2); + if (cmd->child) + cmd->big_cmd->err_var = 1; + else + exit(1); + return ; + } + else if (cmd->nb_args == 1) + exit_shell(cmd->big_cmd, 0); + while (cmd->args[1][++i]) + { + if (!ft_isdigit(cmd->args[1][i]) && !(cmd->args[1][i] == '-' && ft_isdigit(cmd->args[1][i + 1]))) + { + ft_putstr_fd("Minishell: exit: numeric argument required\n", 2); + exit_shell(cmd->big_cmd, 2); + } + } + exit_shell(cmd->big_cmd, ft_atoi(cmd->args[1])); +} \ No newline at end of file diff --git a/srcs/main.c b/srcs/main.c index ccef73f..9167e7b 100644 --- a/srcs/main.c +++ b/srcs/main.c @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/03/06 13:27:11 by apommier #+# #+# */ -/* Updated: 2022/04/15 06:01:07 by apommier ### ########.fr */ +/* Updated: 2022/04/15 12:34:32 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -62,14 +62,14 @@ void print_prompt(char **path) { i = 0; input = readline("\033[1;31m~$ \033[0m"); - if (!input) - exit_shell(cmd); + /*if (!input) + exit_shell(cmd);*/ add_history(input); - if (!ft_strcmp("exit", input) && input) + /*if (!ft_strcmp("exit", input) && input) { free(input); exit_shell(cmd); - } + }*/ if (ft_strlen(input) && next_space(input, 0) && input) { cmd = set_cmd(input, path); diff --git a/srcs/pipe/pipe.c b/srcs/pipe/pipe.c index cd604ce..65c67d1 100644 --- a/srcs/pipe/pipe.c +++ b/srcs/pipe/pipe.c @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/04/02 18:51:31 by apommier #+# #+# */ -/* Updated: 2022/04/15 06:29:09 by apommier ### ########.fr */ +/* Updated: 2022/04/15 11:22:50 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -109,7 +109,7 @@ void execute(t_cmd *cmd, char **env) int fdout; int fdin; int tmpin; - int tmpout; + int tmpout; int i; i = 0; diff --git a/srcs/set_cmd/free_cmd.c b/srcs/set_cmd/free_cmd.c index 84085e1..81e8940 100644 --- a/srcs/set_cmd/free_cmd.c +++ b/srcs/set_cmd/free_cmd.c @@ -6,26 +6,29 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/03/09 12:33:30 by apommier #+# #+# */ -/* Updated: 2022/04/13 21:25:05 by apommier ### ########.fr */ +/* Updated: 2022/04/15 12:55:45 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ #include "../../includes/minishell.h" -void exit_shell(t_cmd *cmd) +void exit_shell(t_cmd *cmd, int ret) { int i; - + unsigned char ret_exit; + + ret_exit = (unsigned char)ret; i = 0; - if (cmd) - free_double(cmd->env); + /*if (cmd) + free_double(cmd->env);*/ + free_cmd(cmd); clear_history(); //print_double_fd(cmd->s_cmds[0]->env, 1); ft_putstr_fd("exit\n", 1); //if (cmd->path) //free_double(cmd->path); cmd = 0; - exit(1); + exit(ret_exit); } void free_cmd(t_cmd *cmd)