diff --git a/include/builtins.h b/include/builtins.h index 2e0404b..d604fd7 100644 --- a/include/builtins.h +++ b/include/builtins.h @@ -6,7 +6,7 @@ /* By: jschaft +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* 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 diff --git a/include/error.h b/include/error.h index d2a78cc..50a6f2a 100644 --- a/include/error.h +++ b/include/error.h @@ -6,7 +6,7 @@ /* By: jschaft +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* 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); diff --git a/src/builtin.c b/src/builtin.c index 11fdbdb..3f29f8d 100644 --- a/src/builtin.c +++ b/src/builtin.c @@ -6,7 +6,7 @@ /* By: jschaft +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* 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); } diff --git a/src/error.c b/src/error.c index 41768e2..ba71ca7 100644 --- a/src/error.c +++ b/src/error.c @@ -6,13 +6,13 @@ /* By: jschaft +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* 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; diff --git a/src/exec_command.c b/src/exec_command.c index 92a2205..6f62a88 100644 --- a/src/exec_command.c +++ b/src/exec_command.c @@ -6,7 +6,7 @@ /* By: jschaft +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* 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)