fix(exec): running a command with an absolute path which does not exist now gives correct error

Before, it gave "Is a directory" error, but now it correctly gives "No such file
or directory".
This commit is contained in:
Khaïs COLIN 2025-04-18 09:17:22 +02:00
parent 655ff36351
commit d44691a5b0
2 changed files with 24 additions and 6 deletions

View file

@ -6,7 +6,7 @@
/* By: khais <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/04/02 18:19:23 by khais #+# #+# */
/* Updated: 2025/04/17 11:10:16 by khais ### ########.fr */
/* Updated: 2025/04/18 09:23:00 by khais ### ########.fr */
/* */
/* ************************************************************************** */
@ -42,7 +42,7 @@ static bool ft_is_directory(char *path)
errno = 0;
retvalue = true;
dir = opendir(path);
if (errno == ENOTDIR)
if (errno == ENOTDIR || errno == ENOENT)
retvalue = false;
if (dir != NULL)
closedir(dir);
@ -52,9 +52,11 @@ static bool ft_is_directory(char *path)
static int ft_execve(char *exe, char **argv, char **envp)
{
int retvalue;
int olderrno;
retvalue = 127;
execve(exe, argv, envp);
olderrno = errno;
if (ft_is_directory(exe))
{
ft_dprintf(STDERR_FILENO, "minishell: %s: %s\n", argv[0],
@ -62,10 +64,8 @@ static int ft_execve(char *exe, char **argv, char **envp)
retvalue = 126;
}
else
{
ft_dprintf(STDERR_FILENO, "minishell: %s: ", argv[0]);
ft_perror(NULL);
}
ft_dprintf(STDERR_FILENO, "minishell: %s: %s\n", argv[0],
strerror(olderrno));
free(exe);
path_split_destroy(argv);
path_split_destroy(envp);