diff --git a/srcs/.lst_alias.c.swp b/srcs/.lst_alias.c.swp new file mode 100644 index 0000000..4f763b4 Binary files /dev/null and b/srcs/.lst_alias.c.swp differ diff --git a/srcs/builtins.c b/srcs/builtins.c index 66b05ab..87c0b5b 100644 --- a/srcs/builtins.c +++ b/srcs/builtins.c @@ -6,7 +6,7 @@ /* By: marde-vr +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/03/05 18:20:21 by marde-vr #+# #+# */ -/* Updated: 2024/03/05 18:51:41 by marde-vr ### ########.fr */ +/* Updated: 2024/03/21 11:03:47 by tomoron ### ########.fr */ /* */ /* ************************************************************************** */ @@ -16,8 +16,7 @@ int cmd_is_forkable_builtin(char *cmd_token) { if (!ft_strcmp(cmd_token, "echo") || !ft_strcmp(cmd_token, "ret") || !ft_strcmp(cmd_token, "env") || !ft_strcmp(cmd_token, "exit") - || !ft_strcmp(cmd_token, "pwd") || !ft_strcmp(cmd_token, "export") - || !ft_strcmp(cmd_token, "unset")) + || !ft_strcmp(cmd_token, "pwd")) return (1); return (0); } @@ -46,6 +45,16 @@ int cmd_is_builtin(t_msh *msh, char *cmd_token) exit_bt(msh); return (1); } + else if(!ft_strcmp(cmd_token,"export")) + { + ft_export(msh); + return(1); + } + else if(!ft_strcmp(cmd_token, "unset")) + { + ft_unset(msh); + return(1); + } return (cmd_is_forkable_builtin(cmd_token)); } @@ -65,10 +74,10 @@ int exec_builtin(t_msh *msh) g_return_code = pwd(); else if (!ft_strcmp(msh->cmds->token, "cd")) g_return_code = cd(msh->cmds); - else if (!ft_strcmp(msh->cmds->token, "export")) - g_return_code = ft_export(msh); - else if (!ft_strcmp(msh->cmds->token, "unset")) - g_return_code = ft_unset(msh); +// else if (!ft_strcmp(msh->cmds->token, "export")) +// g_return_code = ft_export(msh); +// else if (!ft_strcmp(msh->cmds->token, "unset")) +// g_return_code = ft_unset(msh); else if (!ft_strcmp(msh->cmds->token, "alias")) g_return_code = alias(msh); else if (!ft_strcmp(msh->cmds->token, "unalias")) diff --git a/srcs/exec.c b/srcs/exec.c index 01cd12a..ce558ab 100755 --- a/srcs/exec.c +++ b/srcs/exec.c @@ -6,7 +6,7 @@ /* By: marde-vr +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/02/07 14:12:49 by tomoron #+# #+# */ -/* Updated: 2024/03/05 19:05:20 by marde-vr ### ########.fr */ +/* Updated: 2024/03/21 13:42:56 by tomoron ### ########.fr */ /* */ /* ************************************************************************** */ @@ -87,8 +87,10 @@ void exec_commands(t_msh *msh) while (i < cmd_count) { free(msh->fds[i]); + msh->fds[i] = 0; i++; } free(msh->fds); + msh->fds = 0; free(msh->pids); } diff --git a/srcs/export.c b/srcs/export.c index de37ccd..325fdb3 100644 --- a/srcs/export.c +++ b/srcs/export.c @@ -6,26 +6,58 @@ /* By: marde-vr +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/02/18 18:29:20 by marde-vr #+# #+# */ -/* Updated: 2024/02/28 12:45:59 by marde-vr ### ########.fr */ +/* Updated: 2024/03/21 13:58:13 by tomoron ### ########.fr */ /* */ /* ************************************************************************** */ #include "minishell.h" +void print_env_declare(t_env *env) +{ + while(env) + { + if(strcmp(env->name, "_")) + printf("declare -x %s=\"%s\"\n", env->name, env->value); + env = env->next; + } +} int ft_export(t_msh *msh) { t_cmd *cmd; cmd = msh->cmds; - (void)cmd; + if(cmd && !cmd->next) + print_env_declare(msh->env); return (0); } int ft_unset(t_msh *msh) { t_cmd *cmd; + t_env *tmp_env; + t_env *prev; cmd = msh->cmds; - (void)cmd; + tmp_env = msh->env; + prev = 0; + if(cmd && cmd->next && cmd->next->type == ARG) + { + while(tmp_env) + { + if(!strcmp(cmd->next->token, tmp_env->name)) + { + free(tmp_env->name); + free(tmp_env->value); + if(!prev) + msh->env = tmp_env->next; + else + prev->next = tmp_env->next; + free(tmp_env); + return(0); + } + prev = tmp_env; + tmp_env = tmp_env->next; + } + } return (0); } diff --git a/srcs/pipe.c b/srcs/pipe.c index f25328b..f2d93a8 100644 --- a/srcs/pipe.c +++ b/srcs/pipe.c @@ -6,7 +6,7 @@ /* By: marde-vr +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/03/05 18:17:25 by marde-vr #+# #+# */ -/* Updated: 2024/03/06 08:22:46 by marde-vr ### ########.fr */ +/* Updated: 2024/03/21 13:50:47 by tomoron ### ########.fr */ /* */ /* ************************************************************************** */ @@ -29,6 +29,7 @@ void close_pipe_fds(t_msh *msh, int i) void execute_command(t_msh *msh, char **cmd_args, int i) { + char **env; if (msh->cmds->token && (!ft_strcmp(msh->cmds->token, "cd") || !ft_strcmp(msh->cmds->token, "alias") || !ft_strcmp(msh->cmds->token, "unalias") @@ -37,13 +38,18 @@ void execute_command(t_msh *msh, char **cmd_args, int i) while (i >= 0) { free(msh->fds[i]); + msh->fds[i] = 0; i--; } free(cmd_args); ft_exit(msh, 1); } if (msh->cmds->token) - execve(msh->cmds->token, cmd_args, env_to_char_tab(msh->env)); + { + env = env_to_char_tab(msh->env); + execve(msh->cmds->token, cmd_args, env); + ft_free_str_arr(env); + } } void child(t_msh *msh, char **cmd_args, int i) @@ -62,6 +68,7 @@ void child(t_msh *msh, char **cmd_args, int i) while (i >= 0) { free(msh->fds[i]); + msh->fds[i] = 0; i--; } free(cmd_args); diff --git a/srcs/utils.c b/srcs/utils.c index 405fafd..87b9ee8 100644 --- a/srcs/utils.c +++ b/srcs/utils.c @@ -6,7 +6,7 @@ /* By: marde-vr +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/03/05 18:19:26 by marde-vr #+# #+# */ -/* Updated: 2024/03/06 10:19:58 by marde-vr ### ########.fr */ +/* Updated: 2024/03/21 13:21:52 by tomoron ### ########.fr */ /* */ /* ************************************************************************** */ @@ -14,18 +14,23 @@ void free_msh(t_msh *msh) { + int cmd_count = 0; if (msh) { - if (msh->cmds) - free_cmd(msh->cmds); - if (msh->env) - free_env(msh->env); - if (msh->aliases) - free_alias(msh->aliases); - if (msh->pids) - free(msh->pids); - if (msh->fds) - free(msh->fds); + free_env(msh->env); + free_alias(msh->aliases); + free(msh->pids); + if(msh->fds) + { + cmd_count = get_cmd_count(msh->cmds); + while(cmd_count) + { + free(msh->fds[cmd_count - 1]); + cmd_count--; + } + } + free(msh->fds); + free_cmd(msh->cmds); free(msh); } }