From aee1e228e638c1b07b495238c17c19714c307ffe Mon Sep 17 00:00:00 2001 From: Ofacy Date: Wed, 3 Apr 2024 23:32:37 +0200 Subject: [PATCH 1/3] Add 'is a directory' error --- Makefile | 4 ++-- includes/minishell.h | 3 ++- srcs/exec/exec.c | 12 +++++++++--- srcs/exec/filetype.c | 36 ++++++++++++++++++++++++++++++++++++ 4 files changed, 49 insertions(+), 6 deletions(-) create mode 100644 srcs/exec/filetype.c diff --git a/Makefile b/Makefile index 6170dbd..09687c3 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,7 @@ # By: bwisniew +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # Created: 2024/02/14 13:24:31 by bwisniew #+# #+# # -# Updated: 2024/04/03 18:20:54 by bwisniew ### ########.fr # +# Updated: 2024/04/03 23:15:19 by lcottet ### ########.fr # # # # **************************************************************************** # @@ -21,7 +21,7 @@ SRCS = main.c env.c prompt.c error.c env_utils.c mshell_utils.c signal.c PARSER_SRCS = lexer.c syntax.c token_utils.c EXEC_SRCS = path.c exec.c exec_fd.c here_doc.c fork.c exec_utils.c wait.c \ - close.c exec_builtins.c + close.c exec_builtins.c filetype.c EXPAND_SRCS = expander_token.c expander_len.c expander_split.c expander.c \ expander_join.c expander_file.c diff --git a/includes/minishell.h b/includes/minishell.h index 0a69ea2..7d70c82 100644 --- a/includes/minishell.h +++ b/includes/minishell.h @@ -6,7 +6,7 @@ /* By: bwisniew +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/02/13 17:55:03 by lcottet #+# #+# */ -/* Updated: 2024/04/03 18:21:30 by bwisniew ### ########.fr */ +/* Updated: 2024/04/03 23:29:22 by lcottet ### ########.fr */ /* */ /* ************************************************************************** */ @@ -100,6 +100,7 @@ int exec_builtins(t_execute *exec, t_mshell *sh); void exec_cmd(t_execute *exec, t_mshell *sh, char **envp); void exec_fail(t_execute *exec, t_mshell *sh, char **envp); void choose_fork_exec(t_mshell *sh, t_execute *exec, char **envp); +int regular_file_check(t_mshell *sh, char *path); char *expander_join(t_token *t1, t_token *t2); diff --git a/srcs/exec/exec.c b/srcs/exec/exec.c index 49a14d3..7b8a0e4 100644 --- a/srcs/exec/exec.c +++ b/srcs/exec/exec.c @@ -6,7 +6,7 @@ /* By: lcottet +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/03/10 17:18:34 by lcottet #+# #+# */ -/* Updated: 2024/03/21 19:02:00 by lcottet ### ########.fr */ +/* Updated: 2024/04/03 23:27:28 by lcottet ### ########.fr */ /* */ /* ************************************************************************** */ @@ -77,8 +77,9 @@ void exec_cmd(t_execute *exec, t_mshell *sh, char **envp) pid_t exec_txt(t_execute *exec, t_mshell *sh) { - char *null; - pid_t pid; + char *null; + pid_t pid; + int filetype; if (exec->args.len == 0) return (-4); @@ -93,6 +94,11 @@ pid_t exec_txt(t_execute *exec, t_mshell *sh) return (-3); return (-4); } + filetype = regular_file_check(sh, exec->cmd); + if (filetype == -1) + return (-1); + else if (!filetype) + return (-4); pid = exec_fork(exec, sh); free(exec->cmd); return (pid); diff --git a/srcs/exec/filetype.c b/srcs/exec/filetype.c new file mode 100644 index 0000000..b58fad8 --- /dev/null +++ b/srcs/exec/filetype.c @@ -0,0 +1,36 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* filetype.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: lcottet +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/04/03 23:12:15 by lcottet #+# #+# */ +/* Updated: 2024/04/03 23:30:53 by lcottet ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include +#include + +#include "minishell.h" + +int regular_file_check(t_mshell *sh, char *path) +{ + struct stat sb; + + if (!path) + return (1); + if (stat(path, &sb) == -1) + { + error(path); + return (-1); + } + if (!S_ISREG(sb.st_mode)) + { + custom_error(path, "is a directory"); + if (set_env_return(sh, 127)) + return (-1); + } + return (S_ISREG(sb.st_mode)); +} From 833366f5172ff76a58b66d2e0f0b2aab89a42321 Mon Sep 17 00:00:00 2001 From: Ofacy Date: Wed, 3 Apr 2024 23:41:04 +0200 Subject: [PATCH 2/3] Fix is a directory error not having a capital letter --- srcs/exec/filetype.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/srcs/exec/filetype.c b/srcs/exec/filetype.c index b58fad8..785576e 100644 --- a/srcs/exec/filetype.c +++ b/srcs/exec/filetype.c @@ -6,7 +6,7 @@ /* By: lcottet +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/04/03 23:12:15 by lcottet #+# #+# */ -/* Updated: 2024/04/03 23:30:53 by lcottet ### ########.fr */ +/* Updated: 2024/04/03 23:39:57 by lcottet ### ########.fr */ /* */ /* ************************************************************************** */ @@ -28,7 +28,7 @@ int regular_file_check(t_mshell *sh, char *path) } if (!S_ISREG(sb.st_mode)) { - custom_error(path, "is a directory"); + custom_error(path, "Is a directory"); if (set_env_return(sh, 127)) return (-1); } From 4e4f485f24fe8f4d2b062025796d1ba65cc51158 Mon Sep 17 00:00:00 2001 From: Ofacy Date: Wed, 3 Apr 2024 23:46:00 +0200 Subject: [PATCH 3/3] Fix memory leak (exec->cmd) --- srcs/exec/close.c | 2 +- srcs/exec/exec.c | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/srcs/exec/close.c b/srcs/exec/close.c index ec68364..7c3fa96 100644 --- a/srcs/exec/close.c +++ b/srcs/exec/close.c @@ -6,7 +6,7 @@ /* By: bwisniew +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/03/10 20:34:14 by bwisniew #+# #+# */ -/* Updated: 2024/03/19 19:08:58 by bwisniew ### ########.fr */ +/* Updated: 2024/04/03 23:51:04 by lcottet ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/srcs/exec/exec.c b/srcs/exec/exec.c index 7b8a0e4..d3dfcc3 100644 --- a/srcs/exec/exec.c +++ b/srcs/exec/exec.c @@ -6,7 +6,7 @@ /* By: lcottet +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/03/10 17:18:34 by lcottet #+# #+# */ -/* Updated: 2024/04/03 23:27:28 by lcottet ### ########.fr */ +/* Updated: 2024/04/03 23:52:33 by lcottet ### ########.fr */ /* */ /* ************************************************************************** */ @@ -96,9 +96,9 @@ pid_t exec_txt(t_execute *exec, t_mshell *sh) } filetype = regular_file_check(sh, exec->cmd); if (filetype == -1) - return (-1); + return (free(exec->cmd), -1); else if (!filetype) - return (-4); + return (free(exec->cmd), -4); pid = exec_fork(exec, sh); free(exec->cmd); return (pid);