rectif droits pour le cd

This commit is contained in:
william 2017-03-25 20:44:21 +01:00
parent 865bb87f0b
commit 9c760947ca
2 changed files with 22 additions and 14 deletions

View file

@ -12,18 +12,22 @@
#include "minishell.h" #include "minishell.h"
#define CDERR_6 "cd : %s: Permission denied" #define CDERR_0 "cd : %s: No such file or directory"
#define CDERR_7 "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) int bt_cd_process_dotdot(char *target)
{ {
DG(); 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)) if (!is_directory(target))
return (SH_ERR(CDERR_7, target)); return (SH_ERR(CDERR_2, target));
if (access(target, R_OK) < 0)
return (SH_ERR(CDERR_6, target));
if (chdir(target)) if (chdir(target))
return (SH_ERR(CDERR_7, target)); return (SH_ERR(CDERR_3, target));
setwd("PWD"); setwd("PWD");
return (0); return (0);
} }

View file

@ -12,24 +12,28 @@
#include "minishell.h" #include "minishell.h"
#define CDERR_3 "cd : %s: Permission denied" #define CDERR_0 "cd : %s: No such file or directory"
#define CDERR_4 "cd : %s: No such file or directory" #define CDERR_1 "cd : %s: Permission denied"
#define CDERR_5 "cd : %s: Symlink not resolved" #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) int bt_cd_process_symlink(char *target)
{ {
char buffer[PATH_MAX + 1]; char buffer[PATH_MAX + 1];
ft_bzero(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)) if (!is_directory(target))
return (SH_ERR(CDERR_4, target)); return (SH_ERR(CDERR_2, target));
if (!access(target, R_OK))
return (SH_ERR(CDERR_3, target));
if (chdir(target)) if (chdir(target))
return (SH_ERR(CDERR_4, target)); return (SH_ERR(CDERR_3, target));
setwd("PWD"); setwd("PWD");
if (readlink(target, buffer, PATH_MAX + 1) < 0) 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) else if (ft_strlen(buffer) > 0)
builtin_setenv(NULL, (char*[]){"cd", "PWD", buffer, NULL}, NULL); builtin_setenv(NULL, (char*[]){"cd", "PWD", buffer, NULL}, NULL);
return (0); return (0);