diff options
| m--------- | minishell_test | 0 | ||||
| -rw-r--r-- | src/builtin/pwd.c | 17 | ||||
| -rw-r--r-- | src/main.c | 36 |
3 files changed, 36 insertions, 17 deletions
diff --git a/minishell_test b/minishell_test -Subproject d589dd61e1c2bfab8572a202244d86da283e164 +Subproject 520742c77fc3d52301c54b7d678948f9c7c69ac diff --git a/src/builtin/pwd.c b/src/builtin/pwd.c index ab0b1d8..46c69a9 100644 --- a/src/builtin/pwd.c +++ b/src/builtin/pwd.c @@ -6,7 +6,7 @@ /* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/04/01 17:10:40 by charles #+# #+# */ -/* Updated: 2020/04/01 17:10:40 by charles ### ########.fr */ +/* Updated: 2020/07/19 20:27:28 by charles ### ########.fr */ /* */ /* ************************************************************************** */ @@ -20,12 +20,17 @@ int builtin_pwd(char **argv, t_env env) { char buf[PATH_MAX]; + char *working_directory; (void)argv; - (void)env; - ft_bzero(buf, PATH_MAX); - if (getcwd(buf, PATH_MAX) == NULL) - return (1); - ft_putendl(buf); + if ((working_directory = env_search(env, "PWD")) == NULL) + { + ft_bzero(buf, PATH_MAX); + if (getcwd(buf, PATH_MAX) == NULL) + return (1); + ft_putendl(buf); + } + else + ft_putendl(working_directory); return (0); } @@ -6,7 +6,7 @@ /* By: cacharle <cacharle@student.42.fr> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/02/28 11:45:44 by cacharle #+# #+# */ -/* Updated: 2020/07/19 17:04:19 by charles ### ########.fr */ +/* Updated: 2020/07/19 20:22:37 by charles ### ########.fr */ /* */ /* ************************************************************************** */ @@ -40,6 +40,13 @@ void ast_print(int level, t_ast *ast); ** BETTER ERROR HANDLING IS BECOMING URGENT (spagetti code everywhere) */ +bool env_set_default(t_env env, char *key, char *value) +{ + if (env_search(env, key) != NULL) + return (true); + return (env_export(env, key, value) != NULL); +} + char *g_basename = "minishell"; int main(int argc, char **argv, char **envp) @@ -48,8 +55,25 @@ int main(int argc, char **argv, char **envp) t_env env; env = env_from_array(envp); + + char buf[PATH_MAX] = {0}; + if (!(getcwd(buf, PATH_MAX))) + return(1); + if (!env_set_default(env, "PWD", buf) || + !env_set_default(env, "SHLVL", "1") || // TODO increment if set + !env_set_default(env, "PATH", "/sbin:")) // FIXME need to prefix if /sbin not in + return (1); + path = path_update(NULL, env_search(env, "PATH")); + char *env_exec_path; + if ((env_exec_path = ft_htget(path, "env")) == NULL) + { + errorf("env: command not found\n"); + return (127); + } + env_export(env, "_", env_exec_path); + g_last_status_code = 0; signal(SIGINT, signal_sigint); signal(SIGQUIT, signal_sigquit); @@ -61,16 +85,6 @@ int main(int argc, char **argv, char **envp) else g_basename = last_slash + 1; - char *pwd_var; - - if ((pwd_var = env_search(env, "PWD")) == NULL) - { - char buf[PATH_MAX] = {0}; - if (!(getcwd(buf, PATH_MAX))) - return(1); - env_export(env, "PWD", buf); - } - if (argc == 3 && ft_strcmp(argv[1], "-l") == 0) { t_ftlst *lex_out = lexer(ft_strdup(argv[2])); |
