diff options
| author | Charles Cabergs <me@cacharle.xyz> | 2020-10-09 08:42:39 +0200 |
|---|---|---|
| committer | Charles Cabergs <me@cacharle.xyz> | 2020-10-09 08:42:39 +0200 |
| commit | 7765a1e2c54759382312c4a611b24ae4f226e64f (patch) | |
| tree | 9d9e2acafb8eb27483a6d41dcab88831e33d2c8f | |
| parent | 16e243d6cd64f6168b0127b07866a4b8209c335f (diff) | |
| download | minishell-7765a1e2c54759382312c4a611b24ae4f226e64f.tar.gz minishell-7765a1e2c54759382312c4a611b24ae4f226e64f.tar.bz2 minishell-7765a1e2c54759382312c4a611b24ae4f226e64f.zip | |
Added OLDPWD export to builtin/cd
| m--------- | minishell_test | 0 | ||||
| -rw-r--r-- | src/builtin/cd.c | 21 | ||||
| -rw-r--r-- | src/utils.c | 4 |
3 files changed, 16 insertions, 9 deletions
diff --git a/minishell_test b/minishell_test -Subproject 72954f36bfcad29cbb4bb324763d4c03b9fa460 +Subproject 5d1410a9b08eb8df82a43312b8b6d3d9c1c9eb0 diff --git a/src/builtin/cd.c b/src/builtin/cd.c index b421e70..5fee38d 100644 --- a/src/builtin/cd.c +++ b/src/builtin/cd.c @@ -6,7 +6,7 @@ /* By: charles <charles@student.42.fr> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/04/01 17:10:20 by charles #+# #+# */ -/* Updated: 2020/10/07 11:51:47 by cacharle ### ########.fr */ +/* Updated: 2020/10/09 08:41:17 by cacharle ### ########.fr */ /* */ /* ************************************************************************** */ @@ -26,26 +26,33 @@ int builtin_cd(char **argv, t_env env) { - char buf[PATH_MAX + 1]; + char cwd[PATH_MAX + 1]; + char *oldwd; char *home; (void)env; - /* if (argv[1] != NULL && argv[2] != NULL) */ - /* return (1); //errorf_ret(1, "cd: too many arguments\n")); */ + oldwd = env_search(env, "PWD", NULL); + if (oldwd == NULL) + oldwd = ""; if (argv[1] != NULL && argv[1][0] == '\0') + { + if (env_export(env, "OLDPWD", oldwd) == NULL) + return (EVAL_FATAL); return (0); + } if (argv[1] == NULL) { if ((home = env_search(env, "HOME", NULL)) == NULL) return (errorf_ret(1, "cd: HOME not set\n")); argv[1] = home; } - errno = 0; if (chdir(argv[1]) == -1) return (errorf_ret(1, "cd: %s: %s\n", argv[1], strerror(errno))); - if (getcwd(buf, PATH_MAX) == NULL) + if (env_export(env, "OLDPWD", oldwd) == NULL) + return (EVAL_FATAL); + if (getcwd(cwd, PATH_MAX) == NULL) return (1); - if (env_export(env, "PWD", buf) == NULL) + if (env_export(env, "PWD", cwd) == NULL) return (EVAL_FATAL); return (0); } diff --git a/src/utils.c b/src/utils.c index 71eae54..b733172 100644 --- a/src/utils.c +++ b/src/utils.c @@ -6,7 +6,7 @@ /* By: cacharle <cacharle@student.42.fr> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/02/28 11:56:31 by cacharle #+# #+# */ -/* Updated: 2020/10/08 17:43:06 by cacharle ### ########.fr */ +/* Updated: 2020/10/09 08:11:23 by cacharle ### ########.fr */ /* */ /* ************************************************************************** */ @@ -42,7 +42,7 @@ void print_prompt(void) void exit_if(bool predicate) { - if (predicate) + if (!predicate) return ; ft_putendl_fd("minishell: fatal error", STDERR_FILENO); exit(3); |
