diff options
| author | Charles <sircharlesaze@gmail.com> | 2020-07-19 20:47:41 +0200 |
|---|---|---|
| committer | Charles <sircharlesaze@gmail.com> | 2020-07-19 20:47:41 +0200 |
| commit | 7b9b77cbd7cfb3ffa8ac9e8ea69e01aa96179635 (patch) | |
| tree | 04940bbc1c51ee4c1edd068640ea31ebda389e71 /src/main.c | |
| parent | 6e456095fce214a2eadea0cafa3fa7ea1113b4e6 (diff) | |
| download | minishell-7b9b77cbd7cfb3ffa8ac9e8ea69e01aa96179635.tar.gz minishell-7b9b77cbd7cfb3ffa8ac9e8ea69e01aa96179635.tar.bz2 minishell-7b9b77cbd7cfb3ffa8ac9e8ea69e01aa96179635.zip | |
Added default environment variable, pwd prints $PWD instead of using getcwd
Diffstat (limited to 'src/main.c')
| -rw-r--r-- | src/main.c | 36 |
1 files changed, 25 insertions, 11 deletions
@@ -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])); |
