diff --git a/srcs/cmd_cd.c b/srcs/cmd_cd.c index 1250667..2443392 100644 --- a/srcs/cmd_cd.c +++ b/srcs/cmd_cd.c @@ -6,7 +6,7 @@ /* By: tmaze +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2019/01/07 16:44:40 by tmaze #+# #+# */ -/* Updated: 2020/01/24 18:54:51 by tmaze ### ########.fr */ +/* Updated: 2020/01/25 14:28:22 by tmaze ### ########.fr */ /* */ /* ************************************************************************** */ @@ -117,6 +117,35 @@ char cd_getparams(char **argv, size_t *i) return (ret[0]); } +int cmd_cd_switchboard(char **av, t_env **env, char opt) +{ + t_env *e; + char *p; + int ret; + + if ((!av[i] && (e = ft_envgetelem("HOME", *env)) != NULL && e->val + != NULL) || (av[i] && av[i][0] == '-' + && (e = ft_envgetelem("OLDPWD", *env)) != NULL)) + return (cmd_cd_core(e->val, env, opt)); + else if (av[i] && av[i][0] == '/') + return (cmd_cd_core(av[i], env, opt)); + else if (av[i] && av[i][0] != '/' + && (e = ft_envgetelem("PWD", *env)) != NULL && e->val != NULL) + { + if ((p = ft_strnew(ft_strlen(e->val) + ft_strlen(av[i]) + 1)) == NULL) + put_error_cd(av[i], "memory error"); + if (p == NULL) + return (1); + ft_strcpy(p, e->val); + p[ft_strlen(p)] = '/'; + ft_strcat(p, av[i]); + ret = cmd_cd_core(p, env, opt); + ft_strdel(&p); + return (ret); + } + return (1); +} + int cmd_cd(char **argv, t_env **env) { t_env *elem; @@ -128,28 +157,5 @@ int cmd_cd(char **argv, t_env **env) i = 0; if ((opt = cd_getparams(argv, &i)) == '\0') return (1); - if (!argv[i] && (elem = ft_envgetelem("HOME", *env)) != NULL - && elem->val != NULL) - return (cmd_cd_core(elem->val, env, opt)); - else if (argv[i] && argv[i][0] == '/') - return (cmd_cd_core(argv[i], env, opt)); - else if (argv[i] && argv[i][0] == '-' - && (elem = ft_envgetelem("OLDPWD", *env)) != NULL) - return (cmd_cd_core(elem->val, env, opt)); - else if (argv[i] && argv[i][0] != '/' - && (elem = ft_envgetelem("PWD", *env)) != NULL && elem->val != NULL) - { - if ((path = ft_strnew(ft_strlen(elem->val) - + ft_strlen(argv[i]) + 1)) == NULL) - put_error_cd(argv[i], "memory error"); - if (path == NULL) - return (1); - ft_strcpy(path, elem->val); - path[ft_strlen(path)] = '/'; - ft_strcat(path, argv[i]); - ret = cmd_cd_core(path, env, opt); - ft_strdel(&path); - return (ret); - } - return (1); + return (cmd_cd_switchboard(argv, env, opt)); }