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"
#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);
}

View file

@ -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);