]> git.dkaiser.de - 42/minishell.git/commitdiff
Handle all redirections except APPEND
authorDominik Kaiser <dkaiser@1-D-8.42heilbronn.de>
Fri, 25 Oct 2024 11:44:13 +0000 (13:44 +0200)
committerDominik Kaiser <dkaiser@1-D-8.42heilbronn.de>
Fri, 25 Oct 2024 11:44:13 +0000 (13:44 +0200)
TODO: Add APPEND handling
TODO: Fix permissions

src/execute_cmd.c
src/interpreter.c

index 33ba11cd154abab3a14b3e07a6bf90fef76ab3df..fa7677f3463d709ef13b8b88e2953438560021c3 100644 (file)
@@ -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);
 }
index e08d28966f9f0530604fb1f68e3ac3d4c918d163..458f2afe5560404a64320dbc427efcce8fd64ef2 100644 (file)
@@ -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)