aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCharles <sircharlesaze@gmail.com>2020-07-19 20:47:41 +0200
committerCharles <sircharlesaze@gmail.com>2020-07-19 20:47:41 +0200
commit7b9b77cbd7cfb3ffa8ac9e8ea69e01aa96179635 (patch)
tree04940bbc1c51ee4c1edd068640ea31ebda389e71 /src
parent6e456095fce214a2eadea0cafa3fa7ea1113b4e6 (diff)
downloadminishell-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')
-rw-r--r--src/builtin/pwd.c17
-rw-r--r--src/main.c36
2 files changed, 36 insertions, 17 deletions
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);
}
diff --git a/src/main.c b/src/main.c
index 9091887..85df51f 100644
--- a/src/main.c
+++ b/src/main.c
@@ -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]));