summaryrefslogtreecommitdiffstats
path: root/src/ft_b_cd.c
diff options
context:
space:
mode:
authorJozanLeClerc <bousset.rudy@gmail.com>2020-04-28 14:45:38 +0200
committerJozanLeClerc <bousset.rudy@gmail.com>2020-04-28 14:45:38 +0200
commit26debd1a134bfe6b4b400136c75b30d368a39252 (patch)
treefb16a6befac3470f6e45a139d4f99fb66cd6f469 /src/ft_b_cd.c
parentRemoved useless function made obsolete by subst_var_value (diff)
download42-minishell-26debd1a134bfe6b4b400136c75b30d368a39252.tar.gz
42-minishell-26debd1a134bfe6b4b400136c75b30d368a39252.tar.bz2
42-minishell-26debd1a134bfe6b4b400136c75b30d368a39252.tar.xz
42-minishell-26debd1a134bfe6b4b400136c75b30d368a39252.tar.zst
42-minishell-26debd1a134bfe6b4b400136c75b30d368a39252.zip
Ok cd
Diffstat (limited to 'src/ft_b_cd.c')
-rw-r--r--src/ft_b_cd.c27
1 files changed, 22 insertions, 5 deletions
diff --git a/src/ft_b_cd.c b/src/ft_b_cd.c
index 7d4ef1a..e36d60c 100644
--- a/src/ft_b_cd.c
+++ b/src/ft_b_cd.c
@@ -14,6 +14,8 @@
#include <stdint.h>
#include <unistd.h>
+#include "ft_f_fail.h"
+#include "ft_s_destroy.h"
#include "ft_s_struct.h"
#include "ft_u_utils.h"
#include "ft_u_vars.h"
@@ -41,22 +43,37 @@ uint8_t
ft_b_cd(char *args[],
t_msh *msh)
{
+ /* TODO: norme */
const uint64_t argc = ft_get_argc((const char**)args);
char *path;
- if (argc == 0)
+ if (argc >= 2)
{
- path = ft_subst_var_value("$HOME", msh);
- ft_printf("%s\n", path);
+ ft_fail_too_many_args("cd", msh);
+ return (1);
+ }
+ else if (argc == 0)
+ {
+ if (!(path = ft_subst_var_value("$HOME", msh)))
+ return (1);
+ }
+ else
+ {
+ if (!(path = ft_strdup(*args)))
+ {
+ ft_s_destroy(msh);
+ ft_fail_alloc(msh);
+ }
}
if (chdir(path) != 0)
{
- /* TODO: handle cd failed */
+ ft_f_dump_errno("cd", msh);
+ ft_memdel((void*)&path);
+ return (1);
}
/* TODO: ft_switch_env_var() */
ft_memdel((void*)&msh->cwd);
msh->cwd = getcwd(NULL, 0);
ft_memdel((void*)&path);
- /* TODO: finish cd */
return (0);
}