rectif droits pour le cd
This commit is contained in:
parent
865bb87f0b
commit
9c760947ca
2 changed files with 22 additions and 14 deletions
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue