diff --git a/includes/exec/builtins.h b/includes/exec/builtins.h index b9e8289..f9a8f7f 100644 --- a/includes/exec/builtins.h +++ b/includes/exec/builtins.h @@ -6,14 +6,13 @@ /* By: lderidde +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/01/28 09:01:33 by lderidde #+# #+# */ -/* Updated: 2025/01/30 10:40:49 by lderidde ### ########.fr */ +/* Updated: 2025/02/03 13:03:14 by lderidde ### ########.fr */ /* */ /* ************************************************************************** */ #ifndef BUILTINS_H # define BUILTINS_H -# include "../lib/libft/libft.h" # include "../minishell.h" # include # include diff --git a/includes/exec/env.h b/includes/exec/env.h index b82710c..229cb07 100644 --- a/includes/exec/env.h +++ b/includes/exec/env.h @@ -6,14 +6,13 @@ /* By: lderidde +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/01/28 10:11:07 by lderidde #+# #+# */ -/* Updated: 2025/01/28 10:31:54 by lderidde ### ########.fr */ +/* Updated: 2025/02/03 13:09:33 by lderidde ### ########.fr */ /* */ /* ************************************************************************** */ #ifndef ENV_H # define ENV_H -# include "../lib/libft/libft.h" # include "../minishell.h" # include # include @@ -21,13 +20,13 @@ //VAR int count_var(char **envp); -int get_var_index(char *key, t_ast_n *head); +int get_var_index(char *key, t_msh *msh); void free_null_ptr(void *ptr); char **copy_env_var(char **envp, int count); char *get_var_value(char *key, char **envp); -bool is_valid_key(char *key, t_ast_n *head); -int remove_env_var(char *key, t_ast_n *head); -void set_var_env(char *key, char *value, t_ast_n *head); +bool is_valid_key(char *key, t_msh *msh); +int remove_env_var(char *key, t_msh *msh); +void set_var_env(char *key, char *value, t_msh *msh); char **init_env(char **envp); #endif diff --git a/srcs/builtins/cd.c b/srcs/builtins/cd.c index 3879174..3ab49af 100644 --- a/srcs/builtins/cd.c +++ b/srcs/builtins/cd.c @@ -6,7 +6,7 @@ /* By: lderidde +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/01/24 14:31:49 by lderidde #+# #+# */ -/* Updated: 2025/01/28 10:06:11 by lderidde ### ########.fr */ +/* Updated: 2025/02/03 13:12:47 by lderidde ### ########.fr */ /* */ /* ************************************************************************** */ @@ -14,8 +14,8 @@ void pwd_update(t_ast_n *head, char *src, char *dest) { - set_var_env("OLDPWD", src, head); - set_var_env("PWD", dest, head); + set_var_env("OLDPWD", src, head->msh); + set_var_env("PWD", dest, head->msh); free_null_ptr(src); free_null_ptr(dest); } @@ -39,7 +39,7 @@ int builtin_cd(char **arg, t_ast_n *head) if (count_var(arg) == 1 || (count_var(arg) == 2 && ft_strncmp(arg[1], "~", 1) == 0)) { - path = get_var_value("HOME", head->env); + path = get_var_value("HOME", head->msh->env); if (!path) return (err_msg_cmd("cd", NULL, "HOME not set\n", EXIT_FAILURE)); return (exec_cd(path, head)); @@ -48,7 +48,7 @@ int builtin_cd(char **arg, t_ast_n *head) return (err_msg_cmd("cd", NULL, "too many arguments\n", EXIT_FAILURE)); if (ft_strncmp(arg[1], "-", 1) == 0) { - path = get_var_value("OLDPWD", head->env); + path = get_var_value("OLDPWD", head->msh->env); if (!path) return (err_msg_cmd("cd", NULL, "OLDPWD not set\n", EXIT_FAILURE)); return (exec_cd(path, head)); diff --git a/srcs/builtins/echo.c b/srcs/builtins/echo.c index 2f1da16..cf3f79a 100644 --- a/srcs/builtins/echo.c +++ b/srcs/builtins/echo.c @@ -6,7 +6,7 @@ /* By: lderidde +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/01/24 14:31:56 by lderidde #+# #+# */ -/* Updated: 2025/01/28 12:40:27 by lderidde ### ########.fr */ +/* Updated: 2025/02/03 13:13:38 by lderidde ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/srcs/builtins/export.c b/srcs/builtins/export.c index 193f984..b12a282 100644 --- a/srcs/builtins/export.c +++ b/srcs/builtins/export.c @@ -6,7 +6,7 @@ /* By: lderidde +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/01/24 14:32:20 by lderidde #+# #+# */ -/* Updated: 2025/01/30 13:07:49 by lderidde ### ########.fr */ +/* Updated: 2025/02/03 13:11:35 by lderidde ### ########.fr */ /* */ /* ************************************************************************** */ @@ -112,7 +112,7 @@ int builtin_export(char **arg, t_ast_n *head) i = 0; if (count_args(arg) == 1) - return (print_export(head->env)); + return (print_export(head->msh->env)); while (++i < count_args(arg)) { if (is_export_valid(arg[i])) @@ -122,11 +122,11 @@ int builtin_export(char **arg, t_ast_n *head) tmp = key_value(arg[i]); if (!tmp) return (1); - set_var_env(tmp[0], tmp[1], head); + set_var_env(tmp[0], tmp[1], head->msh); free_tab(tmp); } else - set_var_env(arg[i], NULL, head); + set_var_env(arg[i], NULL, head->msh); } else return (err_msg_cmd("export", arg[i], EXPRT_INV, 1)); diff --git a/srcs/builtins/unset.c b/srcs/builtins/unset.c index da1af0a..009e0e9 100644 --- a/srcs/builtins/unset.c +++ b/srcs/builtins/unset.c @@ -6,7 +6,7 @@ /* By: lderidde +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/01/24 14:32:36 by lderidde #+# #+# */ -/* Updated: 2025/01/28 12:43:49 by lderidde ### ########.fr */ +/* Updated: 2025/02/03 13:12:14 by lderidde ### ########.fr */ /* */ /* ************************************************************************** */ @@ -42,6 +42,6 @@ int builtin_unset(char **arg, t_ast_n *head) if (count_args(arg) == 1) return (err_msg_cmd("unset", NULL, "not enough arguments", EXIT_FAILURE)); while (++i < count_args(arg)) - ret = remove_env_var(arg[i], head); + ret = remove_env_var(arg[i], head->msh); return (!ret); } diff --git a/srcs/env/var.c b/srcs/env/var.c index 974b623..0194196 100644 --- a/srcs/env/var.c +++ b/srcs/env/var.c @@ -6,7 +6,7 @@ /* By: lderidde +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/01/28 10:08:49 by lderidde #+# #+# */ -/* Updated: 2025/01/28 10:09:55 by lderidde ### ########.fr */ +/* Updated: 2025/02/03 13:10:32 by lderidde ### ########.fr */ /* */ /* ************************************************************************** */ @@ -75,7 +75,7 @@ char *get_var_value(char *key, char **envp) return (NULL); } -bool is_valid_key(char *key, t_ast_n *head) +bool is_valid_key(char *key, t_msh *msh) { char *tmp; int i; @@ -83,9 +83,9 @@ bool is_valid_key(char *key, t_ast_n *head) tmp = ft_strjoin(key, "="); if (!tmp) return (false); - while (head->env[i]) + while (msh->env[i]) { - if (ft_strncmp(head->env[i], tmp, ft_strlen(tmp)) == 0) + if (ft_strncmp(msh->env[i], tmp, ft_strlen(tmp)) == 0) { free_null_ptr(tmp); return (true); @@ -96,7 +96,7 @@ bool is_valid_key(char *key, t_ast_n *head) return (false); } -int get_var_index(char *key, t_ast_n *head) +int get_var_index(char *key, t_msh *msh) { int i; char *new_key; @@ -105,16 +105,16 @@ int get_var_index(char *key, t_ast_n *head) if (!new_key) return (-1); i = 0; - while (head->env[i]) + while (msh->env[i]) { - if (ft_strncmp(head->env[i], new_key, ft_strlen(new_key)) == 0) + if (ft_strncmp(msh->env[i], new_key, ft_strlen(new_key)) == 0) { free_null_ptr(new_key); return (i); } - else if (ft_strncmp(head->env[i], key, ft_strlen(key)) == 0 - && (ft_strchr(head->env[i], '=') == NULL && - (ft_strlen(head->env[i]) == ft_strlen(key)))) + else if (ft_strncmp(msh->env[i], key, ft_strlen(key)) == 0 + && (ft_strchr(msh->env[i], '=') == NULL && + (ft_strlen(msh->env[i]) == ft_strlen(key)))) { free_null_ptr(new_key); return (i); @@ -126,51 +126,51 @@ int get_var_index(char *key, t_ast_n *head) } -int remove_env_var(char *key, t_ast_n *head) +int remove_env_var(char *key, t_msh *msh) { int i; int j; - i = get_var_index(key, head); + i = get_var_index(key, msh); if (i == -1) return (0); j = i; - free_null_ptr(head->env[i]); - while (head->env[i + 1]) + free_null_ptr(msh->env[i]); + while (msh->env[i + 1]) { - head->env[i] = ft_strdup(head->env[i + 1]); - free_null_ptr(head->env[i + 1]); + msh->env[i] = ft_strdup(msh->env[i + 1]); + free_null_ptr(msh->env[i + 1]); j++; i++; } - head->env = copy_env_var(head->env, j); - if (head->env) + msh->env = copy_env_var(msh->env, j); + if (msh->env) return (1); return (0); } -void set_var_env(char *key, char *value, t_ast_n *head) +void set_var_env(char *key, char *value, t_msh *msh) { int i; char *tmp; - i = get_var_index(key, head); + i = get_var_index(key, msh); if (value) tmp = ft_strjoin(key, "="); if (!tmp) return ; - if (i != -1 && head->env[i]) + if (i != -1 && msh->env[i]) { - free_null_ptr(head->env[i]); - head->env[i] = ft_strjoin(tmp, value); + free_null_ptr(msh->env[i]); + msh->env[i] = ft_strjoin(tmp, value); } else { - i = count_var(head->env); - head->env = copy_env_var(head->env, i + 1); - if (!head->env) + i = count_var(msh->env); + msh->env = copy_env_var(msh->env, i + 1); + if (!msh->env) return ; - head->env[i] = ft_strjoin(tmp, value); + msh->env[i] = ft_strjoin(tmp, value); } free_null_ptr(tmp); return ; diff --git a/srcs/execution/exec.c b/srcs/execution/exec.c index c520500..b5bfe66 100644 --- a/srcs/execution/exec.c +++ b/srcs/execution/exec.c @@ -6,7 +6,7 @@ /* By: lderidde +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/01/27 11:22:33 by lderidde #+# #+# */ -/* Updated: 2025/01/31 11:47:38 by lderidde ### ########.fr */ +/* Updated: 2025/02/03 13:15:41 by lderidde ### ########.fr */ /* */ /* ************************************************************************** */ @@ -84,15 +84,15 @@ int exec_builtin(t_ast_n *node) else if (ft_strncmp(node->cmd, "pwd", 3) == 0) return (builtin_pwd(node->args)); else if (ft_strncmp(node->cmd, "echo", 4) == 0) - return (builtin_echo(node->args, node->head->env)); + return (builtin_echo(node->args, node->msh->env)); else if (ft_strncmp(node->cmd, "env", 3) == 0) - return (builtin_env(node->args, node->head->env)); + return (builtin_env(node->args, node->msh->env)); else if (ft_strncmp(node->cmd, "unset", 5) == 0) - return (builtin_unset(node->args, node->head)); + return (builtin_unset(node->args, node)); else if (ft_strncmp(node->cmd, "cd", 2) == 0) - return (builtin_cd(node->args, node->head)); + return (builtin_cd(node->args, node)); else - return (builtin_export(node->args, node->head)); + return (builtin_export(node->args, node)); } int count_cmds(t_ast_n **pline) @@ -145,7 +145,7 @@ int exec(t_ast_n *node) char *path; handle_redir(node); - path = find_path(node->cmd, node->head->env); + path = find_path(node->cmd, node->msh->env); if (!path) return_error(node->cmd, "command not found", 127); if (access(path, X_OK) != 0) diff --git a/srcs/main.c b/srcs/main.c index 9151045..fe88ab6 100644 --- a/srcs/main.c +++ b/srcs/main.c @@ -6,7 +6,7 @@ /* By: lderidde +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/01/27 14:16:52 by lderidde #+# #+# */ -/* Updated: 2025/01/31 09:57:17 by lderidde ### ########.fr */ +/* Updated: 2025/02/03 13:19:31 by lderidde ### ########.fr */ /* */ /* ************************************************************************** */ @@ -52,6 +52,20 @@ char **ft_setnewenv(void) return (envp); } +t_msh *init_msh(char **envp) +{ + t_msh *msh; + + msh = malloc(sizeof(t_msh) * 1); + if (!msh) + return (NULL); + if (!envp[0]) + msh->env = ft_setnewenv(); + else + msh->env = copy_env_var(envp, count_var(envp)); + return (msh); +} + int main(int ac, char **av, char **envp) { char *input; @@ -59,10 +73,9 @@ int main(int ac, char **av, char **envp) (void)ac; (void)av; - if (!envp[0]) - msh->env = ft_setnewenv(); - else - msh->env = copy_env_var(envp, count_var(envp)); + msh = init_msh(envp); + if (!msh) + return (1); while (1) { input = powerline();