[ADD] add some buitlin

This commit is contained in:
joris schaft 2024-06-25 13:21:55 +02:00
parent 1091ddf32f
commit 823c5b8ac8
5 changed files with 51 additions and 11 deletions

View file

@ -6,7 +6,7 @@
/* By: jschaft <cecile.schaft@orange.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/04/23 14:15:12 by mcolonna #+# #+# */
/* Updated: 2024/06/13 13:00:54 by mcolonna ### ########.fr */
/* Updated: 2024/06/25 11:38:41 by jschaft ### ########.fr */
/* */
/* ************************************************************************** */
@ -19,6 +19,6 @@
bool is_builtin(const char *str);
// Execute the builtin command
int exec_builtin(t_call call);
int exec_builtin(t_call call, char *const envp[]);
#endif

View file

@ -6,7 +6,7 @@
/* By: jschaft <cecile.schaft@orange.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/04/23 14:15:12 by mcolonna #+# #+# */
/* Updated: 2024/06/13 13:50:43 by mcolonna ### ########.fr */
/* Updated: 2024/06/25 11:46:04 by jschaft ### ########.fr */
/* */
/* ************************************************************************** */
@ -15,6 +15,8 @@
# include "include.h"
t_memclass *get_global_mc_pointer(void);
// Set the global mc freed when exit.
void set_global_mc(t_memclass mc);

View file

@ -6,7 +6,7 @@
/* By: jschaft <cecile.schaft@orange.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/06/03 12:02:45 by jschaft #+# #+# */
/* Updated: 2024/06/06 16:34:51 by mcolonna ### ########.fr */
/* Updated: 2024/06/25 11:46:40 by jschaft ### ########.fr */
/* */
/* ************************************************************************** */
@ -20,6 +20,9 @@ bool is_builtin(const char *str)
ft_strncmp(str, "cd", 3) == 0
|| ft_strncmp(str, "exit", 5) == 0
|| ft_strncmp(str, "export", 7) == 0
|| ft_strncmp(str, "env", 4) == 0
|| ft_strncmp(str, "pwd", 4) == 0
|| ft_strncmp(str, "echo", 5) == 0
|| ft_strncmp(str, "unset", 6) == 0);
}
@ -38,19 +41,54 @@ static int cd_builtin(const char *path)
return (0);
}
//Execute the builtin pwd for the current directory.
// Return 0 for the sake of returning something for exec_builtin
static int pwd_builtin(void)
{
char *str;
str = getcwd(NULL, 0);
printf("%s\n", str);
free(str);
return (0);
}
static int env_builtin(char *const envp[])
{
int i;
i = 0;
while (envp[i] != NULL)
{
printf("%s\n", envp[i]);
i++;
}
return (0);
}
void exit_builtin(void)
{
mem_freeall(*get_global_mc_pointer());
exit(0);
}
// Execute the specified builtin.
// The builtin must exist.
// Return the error value returned by the builtin.
// TODO all the builtins
int exec_builtin(t_call call)
int exec_builtin(t_call call, char *const envp[])
{
if (ft_strncmp(call.program, "cd", 3) == 0)
return (cd_builtin(call.argv[1]));
/* if (ft_strncmp(call.program, "exit", 5) == 0)
if (ft_strncmp(call.program, "exit", 5) == 0)
exit_builtin();
if (ft_strncmp(call.program, "export", 7) == 0)
/* if (ft_strncmp(call.program, "export", 7) == 0)
return (export_builtin(call.argv));
if (ft_strncmp(call.program, "unset", 6) == 0)
return (unset_builtin());*/
if (ft_strncmp(call.program, "pwd", 4) == 0)
return (pwd_builtin());
if (ft_strncmp(call.program, "env", 4) == 0)
return (env_builtin(envp));
return (1);
}

View file

@ -6,13 +6,13 @@
/* By: jschaft <cecile.schaft@orange.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/04/23 15:51:56 by mcolonna #+# #+# */
/* Updated: 2024/06/13 13:51:30 by mcolonna ### ########.fr */
/* Updated: 2024/06/25 11:45:46 by jschaft ### ########.fr */
/* */
/* ************************************************************************** */
#include "include.h"
static t_memclass *get_global_mc_pointer(void)
t_memclass *get_global_mc_pointer(void)
{
static t_memclass r = NULL;

View file

@ -6,7 +6,7 @@
/* By: jschaft <cecile.schaft@orange.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/04/24 13:48:00 by jschaft #+# #+# */
/* Updated: 2024/06/21 15:57:28 by mcolonna ### ########.fr */
/* Updated: 2024/06/25 11:38:46 by jschaft ### ########.fr */
/* */
/* ************************************************************************** */
@ -103,7 +103,7 @@ static int exec_each_call(t_exec_command_global *global,
inout[0] = global->pipes[i].pipe[0];
inout[1] = global->pipes[i + 1].pipe[1];
if (is_builtin(command.calls[i].program))
r = exec_builtin(command.calls[i]);
r = exec_builtin(command.calls[i], envp);
else
r = execute_call(global, command.calls[i], inout, envp);
if (r)