diff --git a/Makefile b/Makefile index a894437..1b73377 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,7 @@ # By: tmaze +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # Created: 2018/11/22 14:43:33 by tmaze #+# #+# # -# Updated: 2019/01/27 15:09:17 by tmaze ### ########.fr # +# Updated: 2019/01/28 13:20:28 by tmaze ### ########.fr # # # #******************************************************************************# @@ -39,7 +39,7 @@ libft/libft.a: $(MAKE) -Clibft all clean: - rm -rf $(OBJS_DIR) + rm -rf $(OBJS) $(MAKE) -Clibft clean fclean: clean diff --git a/srcs/cmd_cd.c b/srcs/cmd_cd.c index c5536e3..fd75b72 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: 2019/01/27 16:32:01 by tmaze ### ########.fr */ +/* Updated: 2019/01/28 16:53:32 by tmaze ### ########.fr */ /* */ /* ************************************************************************** */ @@ -25,7 +25,7 @@ char *check_path_slash_cd(char *exec) int i; struct stat info; - if (ft_isin(exec, '/') != -1 && ft_isin(exec, '.') == -1) + if (exec[0] == '/') { if ((i = access(exec, F_OK)) != 0) put_error_cd(exec, "no such file or directory"); @@ -49,11 +49,13 @@ char *check_path_slash_cd(char *exec) return (NULL); } -int cmd_cd_core(char *path, t_list **env) +int cmd_cd_core(char *path, t_list **env, char opt) { t_envelem *pwd; char *oldpwd; + char *tmp; + opt = '\0'; if (check_path_slash_cd(path) == NULL) { put_error_cd(path, "invalid path"); @@ -83,63 +85,25 @@ int cmd_cd_core(char *path, t_list **env) char cd_getparams(char **argv, size_t *i) { - char ret; + char ret[2]; size_t j; - ret = 'L'; - while (argv[++*i] && argv[*i][0] == '-' && ft_strlen(argv[*i]) > 1) + ret[1] = '\0'; + ret[0] = 'L'; + while (argv[++(*i)] && argv[*i][0] == '-' && ft_strlen(argv[*i]) > 1) { - j = 0; + j = 1; while (argv[*i][j] && (argv[*i][j] == 'L' || argv[*i][j] == 'P')) - ret = argv[*i][j++]; + ret[0] = argv[*i][j++]; if (argv[*i][j] && argv[*i][j] != 'L' && argv[*i][j] != 'P') { - ret = argv[*i][j]; - put_error_cd(&ret, "invalid option"); + put_error_cd(ret, "invalid option"); put_error_cd("usage", "cd [-L|-P] [dir]"); - ret = '\0'; + ret[0] = '\0'; break ; } } - return (ret); -} - -int ft_isfstcmp(char *path, char *cmp) -{ - size_t i; - - i = 0; - while (path[i] == '/') - i++; - return (ft_strncmp(&path[i], cmp, ft_strlen(cmp))); -} - -int cmd_cd2(char **argv, t_list **env) -{ - t_envelem *elem; - char *path; - char *tmp; - char opt; - size_t i; - - i = 0; - path = NULL; - if ((opt = cd_getparams(argv, &i)) == '\0') - return (1); - if (!argv[i] && (elem = env_getelemfromkey("HOME", *env)) != NULL && elem->val != NULL) - tmp = elem->val; - else if (argv[i] && argv[i][0] == '.' && (elem = env_getelemfromkey("PWD", *env)) != NULL && elem->val != NULL) - { - if ((tmp = ft_strnew(ft_strlen(argv[i]) + ft_strlen(elem->val) + 1)) == NULL) - put_error_cd(argv[i], "memory error"); - if (tmp == NULL) - return (1); - ft_strcat(tmp, elem->val); - ft_strcat(tmp, "/"); - ft_strcat(tmp, argv[i]); - } - else if () - return (0); + return (ret[0]); } int cmd_cd(char **argv, t_list **env) @@ -147,7 +111,6 @@ int cmd_cd(char **argv, t_list **env) t_envelem *elem; size_t i; char *path; - char *tmp; char opt; int ret; @@ -155,40 +118,21 @@ int cmd_cd(char **argv, t_list **env) if ((opt = cd_getparams(argv, &i)) == '\0') return (1); if (!argv[i] && (elem = env_getelemfromkey("HOME", *env)) != NULL && elem->val != NULL) - return (cmd_cd_core(elem->val, env)); + return (cmd_cd_core(elem->val, env, opt)); else if (argv[i] && argv[1][0] == '/') - return (cmd_cd_core(argv[1], env)); + return (cmd_cd_core(argv[1], env, opt)); else if (argv[i] && argv[i][0] == '-' && (elem = env_getelemfromkey("OLDPWD", *env)) != NULL) - return (cmd_cd_core(elem->val, env)); - else if (argv[i] && argv[i][0] == '.' && (elem = env_getelemfromkey("PWD", *env)) != NULL && elem->val != NULL) + return (cmd_cd_core(elem->val, env, opt)); + else if (argv[i] && argv[i][0] != '/' && (elem = env_getelemfromkey("PWD", *env)) != NULL && elem->val != NULL) { - if ((tmp = ft_strnew(ft_strlen(elem->val) + ft_strlen(argv[i]) + 1)) == NULL) - put_error_cd(argv[1], "memory error"); - if (tmp == NULL) - return (1); - ft_strcpy(tmp, elem->val); - tmp[ft_strlen(tmp)] = '/'; - ft_strcat(tmp, argv[1]); - if (ft_realpath(tmp, &path) == NULL) - put_error_cd(argv[1], "memory error"); - ret = cmd_cd_core(path, env); - ft_strdel(&tmp); - ft_strdel(&path); - return (ret); - } - else if (argv[1] && (elem = env_getelemfromkey("PWD", *env)) != NULL && elem->val != NULL) - { - if ((path = ft_strnew(ft_strlen(elem->val) + ft_strlen(argv[1]) + 1)) == NULL) - put_error_cd(argv[1], "memory error"); + 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[1]); - ft_putendl(path); - ft_putendl("plop"); - ret = cmd_cd_core(path, env); - ft_strdel(&tmp); + ft_strcat(path, argv[i]); + ret = cmd_cd_core(path, env, opt); ft_strdel(&path); return (ret); } diff --git a/srcs/ft_realpath.c b/srcs/ft_realpath.c index 57383b2..242f97c 100644 --- a/srcs/ft_realpath.c +++ b/srcs/ft_realpath.c @@ -6,7 +6,7 @@ /* By: tmaze +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2019/01/27 14:42:35 by tmaze #+# #+# */ -/* Updated: 2019/01/27 15:35:06 by tmaze ### ########.fr */ +/* Updated: 2019/01/28 15:32:44 by tmaze ### ########.fr */ /* */ /* ************************************************************************** */ @@ -46,7 +46,7 @@ char *ft_realpath(char *r_path, char **a_path) while (tab_path[i]) { if ((strcmp = ft_strcmp(tab_path[i], "..")) == 0 - || ft_strcmp(tab_path[i], ".") == 0 || (strcmp == 0 && i == 0)) + || ft_strcmp(tab_path[i], ".") == 0) { j = i; if (strcmp == 0 && i != 0)