From 5677edfce118d9398358d716bd9a8204040ecc46 Mon Sep 17 00:00:00 2001 From: tomoron Date: Thu, 21 Mar 2024 16:45:30 +0100 Subject: [PATCH] chepa --- srcs/.lst_alias.c.swp | Bin 0 -> 12288 bytes srcs/builtins.c | 23 ++++++++++++++++------- srcs/exec.c | 4 +++- srcs/export.c | 38 +++++++++++++++++++++++++++++++++++--- srcs/pipe.c | 11 +++++++++-- srcs/utils.c | 27 ++++++++++++++++----------- 6 files changed, 79 insertions(+), 24 deletions(-) create mode 100644 srcs/.lst_alias.c.swp diff --git a/srcs/.lst_alias.c.swp b/srcs/.lst_alias.c.swp new file mode 100644 index 0000000000000000000000000000000000000000..4f763b474460dce1077b97690689a558ecd7b960 GIT binary patch literal 12288 zcmeI2y-yTD7{*^nR93|=Itnvz2JZuI_YMMK!HW?a3rj4$EPHcsvUf*z_Yfpvqpg*l ze}RccOA8yn3hj&^jg7sDp)|4a*}a+N&Jc46G$ij_emAr4%slhXGi*U_maH4su8Y~c zMJQ*8zR&!Tzx&@0Jli=>VYA-!n~kXFzoob^ou4W?jpb&`lXaP|`g;%GR)XeL8LWoQ zHM3r8)Pfc1d1m0df$0Td+3{*lkazbM;3zx54(!8$L7FTU;#WO2IwFS7E$%~$r?La= z06V}AumkJ>JHQUG1MI+Ib0A#nqkBlYUnM@H>b`$!^~e=Fzz(nj>;OB!4zL6406V}A zumkJ>JHQScLI<1*(Z>OzHwKc&@BjM$|L3QPZh}GZ>J-r`7zQ5(i8jDR@a-hg18^VI zfd_IR1BSsda1{JFLG%^81uwv3@DOYR4=e&3TmVDhEI0#pjuZU?pTSG;6g&Zsz&6+d zb+8It8u^*pC8$3+9*nG6|Q zWZYh9`b9PtAVOkQUrIGwWx5-gDD9@x8I5OS zG?tIDjFpj1tku3Qnxuk)b5NkahBT7_EHdZTfQ$FVcSU9 z>dOF89Y&yQ0J@YeNT{77bYTG#QsrkgH|i=cK#HmmxuGFX=k<%5w`IYKrGL1+%vCC~9PWv5apFFEe2*4g9G z^&dd{V2M(-hU>K|Qj8`yfAcG&L}pfG53Go+83`U>(SnO>6(^JxTNJJ0lxY>sVnGxp zZEM!HEU~mH>W*KL6YGAmbSjlX8{cuky=c{=1s8nTEoeMH5bf=Qs4Mh;@?gW+g(Owxi^HtpSQ&Fc+b?!N6^N+!l4Ia@1rXllV^Xs?Y(ZC4R_ xDs?T`acR6)Njqn^hpI-q(t^FJbd9rZEs0iC(7P|eE_L +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* 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); } }