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> +#+ +:+ +#+ */ /* By: marde-vr <marde-vr@42angouleme.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2024/03/05 18:20:21 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") 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, "env") || !ft_strcmp(cmd_token, "exit")
|| !ft_strcmp(cmd_token, "pwd") || !ft_strcmp(cmd_token, "export") || !ft_strcmp(cmd_token, "pwd"))
|| !ft_strcmp(cmd_token, "unset"))
return (1); return (1);
return (0); return (0);
} }
@ -46,6 +45,16 @@ int cmd_is_builtin(t_msh *msh, char *cmd_token)
exit_bt(msh); exit_bt(msh);
return (1); 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)); return (cmd_is_forkable_builtin(cmd_token));
} }
@ -65,10 +74,10 @@ int exec_builtin(t_msh *msh)
g_return_code = pwd(); g_return_code = pwd();
else if (!ft_strcmp(msh->cmds->token, "cd")) else if (!ft_strcmp(msh->cmds->token, "cd"))
g_return_code = cd(msh->cmds); g_return_code = cd(msh->cmds);
else if (!ft_strcmp(msh->cmds->token, "export")) // else if (!ft_strcmp(msh->cmds->token, "export"))
g_return_code = ft_export(msh); // g_return_code = ft_export(msh);
else if (!ft_strcmp(msh->cmds->token, "unset")) // else if (!ft_strcmp(msh->cmds->token, "unset"))
g_return_code = ft_unset(msh); // g_return_code = ft_unset(msh);
else if (!ft_strcmp(msh->cmds->token, "alias")) else if (!ft_strcmp(msh->cmds->token, "alias"))
g_return_code = alias(msh); g_return_code = alias(msh);
else if (!ft_strcmp(msh->cmds->token, "unalias")) else if (!ft_strcmp(msh->cmds->token, "unalias"))

View File

@ -6,7 +6,7 @@
/* By: marde-vr <marde-vr@42angouleme.fr> +#+ +:+ +#+ */ /* By: marde-vr <marde-vr@42angouleme.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2024/02/07 14:12:49 by tomoron #+# #+# */ /* 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) while (i < cmd_count)
{ {
free(msh->fds[i]); free(msh->fds[i]);
msh->fds[i] = 0;
i++; i++;
} }
free(msh->fds); free(msh->fds);
msh->fds = 0;
free(msh->pids); free(msh->pids);
} }

View File

@ -6,26 +6,58 @@
/* By: marde-vr <marde-vr@42angouleme.fr> +#+ +:+ +#+ */ /* By: marde-vr <marde-vr@42angouleme.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2024/02/18 18:29:20 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" #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) int ft_export(t_msh *msh)
{ {
t_cmd *cmd; t_cmd *cmd;
cmd = msh->cmds; cmd = msh->cmds;
(void)cmd; if(cmd && !cmd->next)
print_env_declare(msh->env);
return (0); return (0);
} }
int ft_unset(t_msh *msh) int ft_unset(t_msh *msh)
{ {
t_cmd *cmd; t_cmd *cmd;
t_env *tmp_env;
t_env *prev;
cmd = msh->cmds; 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); return (0);
} }

View File

@ -6,7 +6,7 @@
/* By: marde-vr <marde-vr@42angouleme.fr> +#+ +:+ +#+ */ /* By: marde-vr <marde-vr@42angouleme.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2024/03/05 18:17:25 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) void execute_command(t_msh *msh, char **cmd_args, int i)
{ {
char **env;
if (msh->cmds->token && (!ft_strcmp(msh->cmds->token, "cd") if (msh->cmds->token && (!ft_strcmp(msh->cmds->token, "cd")
|| !ft_strcmp(msh->cmds->token, "alias") || !ft_strcmp(msh->cmds->token, "alias")
|| !ft_strcmp(msh->cmds->token, "unalias") || !ft_strcmp(msh->cmds->token, "unalias")
@ -37,13 +38,18 @@ void execute_command(t_msh *msh, char **cmd_args, int i)
while (i >= 0) while (i >= 0)
{ {
free(msh->fds[i]); free(msh->fds[i]);
msh->fds[i] = 0;
i--; i--;
} }
free(cmd_args); free(cmd_args);
ft_exit(msh, 1); ft_exit(msh, 1);
} }
if (msh->cmds->token) 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) 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) while (i >= 0)
{ {
free(msh->fds[i]); free(msh->fds[i]);
msh->fds[i] = 0;
i--; i--;
} }
free(cmd_args); free(cmd_args);

View File

@ -6,7 +6,7 @@
/* By: marde-vr <marde-vr@42angouleme.fr> +#+ +:+ +#+ */ /* By: marde-vr <marde-vr@42angouleme.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2024/03/05 18:19:26 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) void free_msh(t_msh *msh)
{ {
int cmd_count = 0;
if (msh) if (msh)
{ {
if (msh->cmds)
free_cmd(msh->cmds);
if (msh->env)
free_env(msh->env); free_env(msh->env);
if (msh->aliases)
free_alias(msh->aliases); free_alias(msh->aliases);
if (msh->pids)
free(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(msh->fds);
free_cmd(msh->cmds);
free(msh); free(msh);
} }
} }