diff options
| author | Dominik Kaiser | 2025-01-14 16:46:38 +0100 |
|---|---|---|
| committer | GitHub | 2025-01-14 16:46:38 +0100 |
| commit | ce448752a4915806bb4cd5ac67b8855362135828 (patch) | |
| tree | 397ae613dd39a35a6c91e7e30426f86ade4e24bb /src/builtins_part_two.c | |
| parent | 553204e584dd08987902c7693e47744192e6bd85 (diff) | |
| parent | 398b0d39cbbe2cdabbfae00f799181a37754d5c1 (diff) | |
| download | minishell-ce448752a4915806bb4cd5ac67b8855362135828.tar.gz minishell-ce448752a4915806bb4cd5ac67b8855362135828.zip | |
Merge builtins into mai
Diffstat (limited to 'src/builtins_part_two.c')
| -rw-r--r-- | src/builtins_part_two.c | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/src/builtins_part_two.c b/src/builtins_part_two.c new file mode 100644 index 0000000..94ef258 --- /dev/null +++ b/src/builtins_part_two.c @@ -0,0 +1,82 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* builtins_part_two.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: chuhlig <chuhlig@student.42.fr> +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/10/25 20:52:16 by chuhlig #+# #+# */ +/* Updated: 2024/10/25 20:52:46 by chuhlig ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "env.h" + +void update_oldpwd(t_env **env) +{ + t_env *current; + t_env *prev; + char cwd[1028]; + char *tmp; + + while (current) + { + if (ft_strncmp(current->name, "OLDPWD", 6) == 0) + break ; + prev = current; + current = current->next; + } + getcwd(cwd, sizeof(cwd)); + tmp = ft_strdup(cwd); + free(current->value); + current->value = tmp; +} + +void update_pwd(t_env **env) +{ + t_env *current; + t_env *prev; + char cwd[1028]; + char *tmp; + + while (current) + { + if (ft_strncmp(current->name, "PWD", 3) == 0) + break ; + prev = current; + current = current->next; + } + getcwd(cwd, sizeof(cwd)); + tmp = ft_strdup(cwd); + free(current->value); + current->value = tmp; +} + +int cd(t_env **env, char **av) +{ + t_env *current; + t_env *prev; + t_env *pwd; + + current = env; + if (av[1] == NULL) + { + update_oldpwd(&env); + while (current) + { + if (ft_strncmp(current->name, "HOME", 4) == 0) + break ; + prev = current; + current = current->next; + } + if (chdir(current->value) == -1) + return ; + } + else + { + update_oldpwd(&env); + if (chdir(av[1]) == -1) + return ; + update_pwd(&env); + } +}
\ No newline at end of file |
