diff --git a/42sh/src/builtin/bt_cd_process_dotdot.c b/42sh/src/builtin/bt_cd_process_dotdot.c index 6396be2c..ac79ea4f 100644 --- a/42sh/src/builtin/bt_cd_process_dotdot.c +++ b/42sh/src/builtin/bt_cd_process_dotdot.c @@ -12,18 +12,22 @@ #include "minishell.h" -#define CDERR_6 "cd : %s: Permission denied" -#define CDERR_7 "cd : %s: No such file or directory" +#define CDERR_0 "cd : %s: No such file or directory" +#define CDERR_1 "cd : %s: Permission denied" +#define CDERR_2 "cd : %s: Not a directory" +#define CDERR_3 "cd : unable to proceed: %s" int bt_cd_process_dotdot(char *target) { DG(); + if (access(target, F_OK)) + return (SH_ERR(CDERR_0, target)); + if (access(target, X_OK)) + return (SH_ERR(CDERR_1, target)); if (!is_directory(target)) - return (SH_ERR(CDERR_7, target)); - if (access(target, R_OK) < 0) - return (SH_ERR(CDERR_6, target)); + return (SH_ERR(CDERR_2, target)); if (chdir(target)) - return (SH_ERR(CDERR_7, target)); + return (SH_ERR(CDERR_3, target)); setwd("PWD"); return (0); } diff --git a/42sh/src/builtin/bt_cd_process_symlink.c b/42sh/src/builtin/bt_cd_process_symlink.c index c8d2afe1..3dc20512 100644 --- a/42sh/src/builtin/bt_cd_process_symlink.c +++ b/42sh/src/builtin/bt_cd_process_symlink.c @@ -12,24 +12,28 @@ #include "minishell.h" -#define CDERR_3 "cd : %s: Permission denied" -#define CDERR_4 "cd : %s: No such file or directory" -#define CDERR_5 "cd : %s: Symlink not resolved" +#define CDERR_0 "cd : %s: No such file or directory" +#define CDERR_1 "cd : %s: Permission denied" +#define CDERR_2 "cd : %s: Not a directory" +#define CDERR_3 "cd : unable to proceed: %s" +#define CDERR_4 "cd : %s: Symlink not resolved" int bt_cd_process_symlink(char *target) { char buffer[PATH_MAX + 1]; ft_bzero(buffer, PATH_MAX + 1); + if (access(target, F_OK)) + return (SH_ERR(CDERR_0, target)); + if (access(target, X_OK)) + return (SH_ERR(CDERR_1, target)); if (!is_directory(target)) - return (SH_ERR(CDERR_4, target)); - if (!access(target, R_OK)) - return (SH_ERR(CDERR_3, target)); + return (SH_ERR(CDERR_2, target)); if (chdir(target)) - return (SH_ERR(CDERR_4, target)); + return (SH_ERR(CDERR_3, target)); setwd("PWD"); if (readlink(target, buffer, PATH_MAX + 1) < 0) - return (SH_ERR(CDERR_5, target)); + return (SH_ERR(CDERR_4, target)); else if (ft_strlen(buffer) > 0) builtin_setenv(NULL, (char*[]){"cd", "PWD", buffer, NULL}, NULL); return (0);