]> git.dkaiser.de - 42/minishell.git/commitdiff
Fix some errors
authorDominik Kaiser <dkaiser@3-H-6.42heilbronn.de>
Wed, 15 Jan 2025 15:34:01 +0000 (16:34 +0100)
committerDominik Kaiser <dkaiser@3-H-6.42heilbronn.de>
Wed, 15 Jan 2025 15:34:01 +0000 (16:34 +0100)
Makefile
src/get_cmd_path.c

index 9654114f83993728b33067bf300543f7aacbdbe6..049422de65b7932d461cf1f25f641f498deffa82 100644 (file)
--- 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))
index 605adf60906716d93b794b250876aeeda1e2023e..fb457304eefa6ccce9d9754876f0de5379a49894 100644 (file)
@@ -6,7 +6,7 @@
 /*   By: chuhlig <chuhlig@student.42.fr>            +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   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       */
 /*                                                                            */
 /* ************************************************************************** */
 
 #include <sys/errno.h>
 #include <sys/unistd.h>
 #include <unistd.h>
+#include <sys/stat.h>
 
 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);
+}