summaryrefslogtreecommitdiffstats
path: root/src/ft_b_cd.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/ft_b_cd.c30
1 files changed, 9 insertions, 21 deletions
diff --git a/src/ft_b_cd.c b/src/ft_b_cd.c
index e36d60c..54dc92e 100644
--- a/src/ft_b_cd.c
+++ b/src/ft_b_cd.c
@@ -20,25 +20,6 @@
#include "ft_u_utils.h"
#include "ft_u_vars.h"
-/* static void */
-/* ft_switch_env_var(char **envp) */
-/* { */
-/* char **ptr; */
-/* char *path; */
-
-/* ptr = envp; */
-/* while (*ptr) */
-/* { */
-/* if (ft_strncmp("HOME", *ptr, 4) == 0) */
-/* { */
-/* path = ft_substr(*ptr, 5, ft_strlen(*ptr + 5)); */
-/* return (path); */
-/* } */
-/* ptr++; */
-/* } */
-/* return (NULL); */
-/* } */
-
uint8_t
ft_b_cd(char *args[],
t_msh *msh)
@@ -64,14 +45,21 @@ uint8_t
ft_s_destroy(msh);
ft_fail_alloc(msh);
}
+ if (!ft_strncmp("~/", path, 2) || !ft_strncmp("~", path, 2))
+ {
+ if (!(path = ft_strsubst(path, "~", ft_subst_var_value("$HOME", msh))))
+ {
+ ft_s_destroy(msh);
+ ft_fail_alloc(msh);
+ }
+ }
}
if (chdir(path) != 0)
{
- ft_f_dump_errno("cd", msh);
+ ft_fail_chd("cd", path, 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);