From 48912782078b2b3f59413db2539bf6fa6e56b2f8 Mon Sep 17 00:00:00 2001 From: Dominik Kaiser Date: Wed, 15 Jan 2025 16:34:01 +0100 Subject: [PATCH] Fix some errors --- Makefile | 2 +- src/get_cmd_path.c | 19 ++++++++++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 9654114..049422d 100644 --- a/Makefile +++ b/Makefile @@ -19,7 +19,7 @@ SRC := main.c debug_tools.c init.c signal_handling.c repl.c new_token.c \ free_token.c new_node.c free_node.c tokenizer.c parser.c \ parse_cmd.c collect_redirs.c print_ast.c interpreter.c env.c \ get_cmd_path.c env_to_strlst.c execute_cmd.c format_string.c \ - builtins_part_one.c builtins_part_two.c \ env_tools.c + builtins_part_one.c builtins_part_two.c env_tools.c \ OBJ_DIR := _obj OBJ := $(addprefix $(OBJ_DIR)/, $(SRC:%.c=%.o)) diff --git a/src/get_cmd_path.c b/src/get_cmd_path.c index 605adf6..fb45730 100644 --- a/src/get_cmd_path.c +++ b/src/get_cmd_path.c @@ -6,7 +6,7 @@ /* By: chuhlig +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/12/17 19:19:59 by chuhlig #+# #+# */ -/* Updated: 2025/01/15 16:15:32 by dkaiser ### ########.fr */ +/* Updated: 2025/01/15 16:32:30 by dkaiser ### ########.fr */ /* */ /* ************************************************************************** */ @@ -16,12 +16,14 @@ #include #include #include +#include static char *get_simple_cmd_path(char *cmd, int *return_code); static char *get_absolute_cmd_path(char *cmd, t_env *env, int *return_code); static char *find_in_path(char *cmd, t_env *env, int *return_code); static char *error(int err_code, char *err_text, int exit_code, int *ret_code); char **get_split_path(t_env *env); +static int is_directory(char *path); char *get_cmd_path(char *cmd, t_env *env, int *return_code) { @@ -55,6 +57,8 @@ static char *get_absolute_cmd_path(char *cmd, t_env *env, int *return_code) free(result); return (error(EACCES, cmd, 126, return_code)); } + if (is_directory(cmd)) + return (error(EISDIR, cmd, 126, return_code)); return (result); } @@ -102,6 +106,8 @@ static char *get_simple_cmd_path(char *cmd, int *return_code) free(result); return (error(EACCES, cmd, 126, return_code)); } + if (is_directory(cmd)) + return (error(EISDIR, cmd, 126, return_code)); return (result); } @@ -113,3 +119,14 @@ static char *error(int err_code, char *err_text, int exit_code, int *ret_code) *ret_code = exit_code; return (NULL); } + +static int is_directory(char *path) +{ + struct stat path_stat; + + stat(path, &path_stat); + if ((path_stat.st_mode & S_IFMT) == S_IFDIR) + return (1); + else + return (0); +} -- 2.47.2