diff options
| author | Dominik Kaiser | 2024-10-25 13:44:13 +0200 |
|---|---|---|
| committer | Dominik Kaiser | 2024-10-25 13:44:13 +0200 |
| commit | 15d8385f8ecf30e1ca74025b12fed7e45349b706 (patch) | |
| tree | e0a702ab4a3c72ea83ef5ea16ff87b96884b7102 /src | |
| parent | 07522e059d2956014b8d97f39b72a90c6dc6a7c6 (diff) | |
| download | minishell-15d8385f8ecf30e1ca74025b12fed7e45349b706.tar.gz minishell-15d8385f8ecf30e1ca74025b12fed7e45349b706.zip | |
Handle all redirections except APPEND
TODO: Add APPEND handling
TODO: Fix permissions
Diffstat (limited to 'src')
| -rw-r--r-- | src/execute_cmd.c | 34 | ||||
| -rw-r--r-- | src/interpreter.c | 4 |
2 files changed, 36 insertions, 2 deletions
diff --git a/src/execute_cmd.c b/src/execute_cmd.c index 33ba11c..fa7677f 100644 --- a/src/execute_cmd.c +++ b/src/execute_cmd.c @@ -6,22 +6,54 @@ /* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/10/21 13:58:56 by dkaiser #+# #+# */ -/* Updated: 2024/10/22 15:42:17 by dkaiser ### ########.fr */ +/* Updated: 2024/10/25 13:31:16 by dkaiser ### ########.fr */ /* */ /* ************************************************************************** */ #include "minishell.h" #include <stdlib.h> #include <sys/_types/_pid_t.h> +#include <sys/_types/_s_ifmt.h> +#include <sys/fcntl.h> #include <unistd.h> +#include <fcntl.h> int execute_cmd(t_cmd *cmd, t_env *env) { int result; char *cmd_path; + int fd; cmd_path = get_cmd_path(cmd->args[0], env); cmd->args[0] = cmd_path; + + if (cmd->redirs[0].type == INPUT_FILE) + { + fd = open(cmd->redirs[0].specifier, O_RDONLY); + if (fd < 0) + return (EXIT_FAILURE); + dup2(fd, STDIN_FILENO); + } + else if (cmd->redirs[0].type == INPUT_LIMITER) + { + dbg("INPUT_LIMITER"); + } + if (cmd->redirs[1].type == OUTPUT_APPEND) + { + dbg("OUTPUT_APPEND"); + fd = open(cmd->redirs[1].specifier, O_WRONLY | O_CREAT | O_APPEND); + if (fd < 0) + return (EXIT_FAILURE); + dup2(fd, STDOUT_FILENO); + } + else if (cmd->redirs[1].type == OUTPUT_OVERRIDE) + { + fd = open(cmd->redirs[1].specifier, O_WRONLY | O_CREAT | O_TRUNC); + if (fd < 0) + return (EXIT_FAILURE); + dup2(fd, STDOUT_FILENO); + dbg("OUTPUT_OVERRIDE"); + } result = execve(cmd->args[0], cmd->args, env_to_strlst(env)); return (result); } diff --git a/src/interpreter.c b/src/interpreter.c index e08d289..458f2af 100644 --- a/src/interpreter.c +++ b/src/interpreter.c @@ -6,7 +6,7 @@ /* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/08/05 13:15:24 by dkaiser #+# #+# */ -/* Updated: 2024/10/25 12:47:15 by dkaiser ### ########.fr */ +/* Updated: 2024/10/25 13:25:33 by dkaiser ### ########.fr */ /* */ /* ************************************************************************** */ @@ -25,6 +25,8 @@ int eval(t_node *node, t_env *env) pid_t pid; int result; + if (node == NULL) + return (EXIT_FAILURE); result = 0; pid = fork(); if (pid < 0) |
