From 988d8ef298918656ad00c946cf85212e5e697307 Mon Sep 17 00:00:00 2001 From: "william.valenduc" Date: Thu, 29 Jan 2026 11:29:03 +0000 Subject: [PATCH] feat(execution): update $PWD and $OLD_PWD --- src/execution/execution_helpers.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/execution/execution_helpers.c b/src/execution/execution_helpers.c index 9dcaf41..8ea5aef 100644 --- a/src/execution/execution_helpers.c +++ b/src/execution/execution_helpers.c @@ -12,6 +12,7 @@ #include "../expansion/expansion.h" #include "../utils/ast/ast.h" #include "../utils/hash_map/hash_map.h" +#include "../utils/vars/vars.h" #include "execution.h" static char **list_to_argv(struct list *command_list) @@ -36,7 +37,7 @@ static char **list_to_argv(struct list *command_list) return argv; } -static int try_builtin(char **argv); +static int try_builtin(char **argv, struct hash_map *vars); int exec_ast_command(struct ast_command *command, struct hash_map *vars) { @@ -49,7 +50,7 @@ int exec_ast_command(struct ast_command *command, struct hash_map *vars) free(argv); return 0; } - int builtin_ret = try_builtin(argv); + int builtin_ret = try_builtin(argv, vars); if (builtin_ret != -1) { free(argv); @@ -294,7 +295,7 @@ static int builtin_exit(char **argv) return exit_val; } -static int builtin_cd(char **argv) +static int builtin_cd(char **argv, struct hash_map *vars) { const char *path = argv[1]; if (!path) @@ -306,11 +307,15 @@ static int builtin_cd(char **argv) return 1; } } + // char *pwd = getcwd("", ""); + char *pwd = get_var_or_env(pwd, "PWD"); if (chdir(path) != 0) { perror("cd"); return 1; } + set_var_copy(vars, "OLD_PWD", pwd); + set_var_copy(vars, "PWD", path); return 0; } @@ -320,7 +325,7 @@ static int builtin_cd(char **argv) * @param argv Array of command arguments * @return int Exit status of the builtin command, or -1 if not a builtin */ -static int try_builtin(char **argv) +static int try_builtin(char **argv, struct hash_map *vars) { if (!argv || !argv[0]) return 0; @@ -334,7 +339,7 @@ static int try_builtin(char **argv) if (strcmp(argv[0], "exit") == 0) return builtin_exit(argv); if (strcmp(argv[0], "cd") == 0) - return builtin_cd(argv); + return builtin_cd(argv, vars); return -1; }