diff --git a/srcs/cmd_cd.c b/srcs/cmd_cd.c index aaa08e3..ad13f1e 100644 --- a/srcs/cmd_cd.c +++ b/srcs/cmd_cd.c @@ -6,18 +6,19 @@ /* By: tmaze +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2019/01/07 16:44:40 by tmaze #+# #+# */ -/* Updated: 2019/11/11 01:09:36 by tmaze ### ########.fr */ +/* Updated: 2020/01/23 23:37:53 by tmaze ### ########.fr */ /* */ /* ************************************************************************** */ #include "minishell.h" -void put_error_cd(char *file, char *msg) +void *put_error_cd(char *file, char *msg) { ft_putstr("cd: "); ft_putstr(file); ft_putstr(": "); ft_putendl(msg); + return (NULL); } char *check_path_slash_cd(char *exec) @@ -29,22 +30,14 @@ char *check_path_slash_cd(char *exec) if (exec[0] == '/') { if ((i = access(exec, F_OK)) != 0) - put_error_cd(exec, "no such file or directory"); - if (i != 0) - return (NULL); + return (put_error_cd(exec, "no such file or directory")); if ((i = lstat(exec, &info)) != 0) - put_error_cd(exec, "can't determine info"); - if (i != 0) - return (NULL); - if (!S_ISDIR(info.st_mode) || (S_ISLNK(info.st_mode) && ((i = stat(exec, &info2)) != 0 || !S_ISDIR(info2.st_mode)))) - { - put_error_cd(exec, "not a directory"); - return (NULL); - } + return (put_error_cd(exec, "can't determine info")); + if (!S_ISDIR(info.st_mode) || (S_ISLNK(info.st_mode) + && ((i = stat(exec, &info2)) != 0 || !S_ISDIR(info2.st_mode)))) + return (put_error_cd(exec, "not a directory")); if ((i = access(exec, X_OK)) != 0) - put_error_cd(exec, "permission denied"); - if (i != 0) - return (NULL); + return (put_error_cd(exec, "permission denied")); return (exec); } return (NULL); diff --git a/srcs/main.c b/srcs/main.c index e9ad6d7..0e77905 100644 --- a/srcs/main.c +++ b/srcs/main.c @@ -6,7 +6,7 @@ /* By: tmaze +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2019/09/19 17:08:46 by tmaze #+# #+# */ -/* Updated: 2019/11/10 21:24:36 by tmaze ### ########.fr */ +/* Updated: 2020/01/24 00:24:19 by tmaze ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/srcs/ms_ext.c b/srcs/ms_ext.c index 76b13c0..d9fdcbb 100644 --- a/srcs/ms_ext.c +++ b/srcs/ms_ext.c @@ -6,7 +6,7 @@ /* By: tmaze +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2019/10/25 18:21:47 by tmaze #+# #+# */ -/* Updated: 2020/01/23 00:23:24 by tmaze ### ########.fr */ +/* Updated: 2020/01/24 00:23:59 by tmaze ### ########.fr */ /* */ /* ************************************************************************** */ @@ -18,6 +18,14 @@ void *return_null(char *msg) return (NULL); } +void ft_strreplace(char **dst, char *src, int *index, t_env *elem) +{ + if (*dst != NULL) + ft_strdel(dst); + *dst = src; + *index = ft_strlen(elem->val); +} + t_env *search_key(t_env *env, char *cmd, int index) { t_env *it; @@ -37,10 +45,7 @@ t_env *search_key(t_env *env, char *cmd, int index) j++; } if (!it->key[i] && (!ret || ft_strlen(it->key) > ft_strlen(ret->key))) - { - ft_printf("found key: %s\n", it->key); ret = it; - } it = it->next; } return (ret); @@ -73,9 +78,7 @@ char *resolve_complete_key(char **src, int *index, t_env *env) if ((ret = replace_env(*src, tmp, ft_strlen(tmp->key) + 1, *index)) != NULL) { - ft_strdel(src); - *src = ret; - *index += ft_strlen(tmp->val); + ft_strreplace(src, ret, index, tmp); return (*src); } else @@ -98,15 +101,11 @@ char **res_ext(char **av, t_env *env) { if (av[i[0]][i[1]] == '~' && (tmp = ft_envgetelem("HOME", env)) != NULL && (ret = replace_env(av[i[0]], tmp, 1, i[1])) != NULL) - { - ft_strdel(&av[i[0]]); - av[i[0]] = ret; - i[1] += ft_strlen(tmp->val); - } + ft_strreplace(&av[i[0]], ret, &i[1], tmp); else if (av[i[0]][i[1]] == '$' && resolve_complete_key(&av[i[0]], &i[1], env) == NULL) return (NULL); - else if (av[i[0]][i[1]] != '$' && av[i[0]][i[1]] == '~') + else if (av[i[0]][i[1]] != '$' && av[i[0]][i[1]] != '~') i[1]++; } i[0]++;