This commit is contained in:
2024-03-21 16:45:30 +01:00
parent 4011934434
commit 5677edfce1
6 changed files with 79 additions and 24 deletions

BIN
srcs/.lst_alias.c.swp Normal file

Binary file not shown.

View File

@ -6,7 +6,7 @@
/* By: marde-vr <marde-vr@42angouleme.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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"))

View File

@ -6,7 +6,7 @@
/* By: marde-vr <marde-vr@42angouleme.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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);
}

View File

@ -6,26 +6,58 @@
/* By: marde-vr <marde-vr@42angouleme.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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);
}

View File

@ -6,7 +6,7 @@
/* By: marde-vr <marde-vr@42angouleme.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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);

View File

@ -6,7 +6,7 @@
/* By: marde-vr <marde-vr@42angouleme.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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)
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);
}
}