]> git.dkaiser.de - 42/pipex.git/commitdiff
Main logic for pipex sketch
authorDominik Kaiser <dkaiser@1-C-7.42heilbronn.de>
Tue, 7 May 2024 12:43:22 +0000 (14:43 +0200)
committerDominik Kaiser <dkaiser@1-C-7.42heilbronn.de>
Tue, 7 May 2024 12:43:22 +0000 (14:43 +0200)
src/main.c

index 1fdc764d3c09e234f51b1654d7809ea6c0705033..0793857500b9fde1ea67864b014f16efda802ffe 100644 (file)
@@ -6,11 +6,17 @@
 /*   By: dkaiser <dkaiser@student.42heilbronn.de    +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2024/04/29 13:35:21 by dkaiser           #+#    #+#             */
+<<<<<<< Updated upstream
 /*   Updated: 2024/04/30 17:37:09 by dkaiser          ###   ########.fr       */
+=======
+/*   Updated: 2024/05/07 14:38:13 by dkaiser          ###   ########.fr       */
+>>>>>>> Stashed changes
 /*                                                                            */
 /* ************************************************************************** */
 
+#include "libft.h"
 #include "pipex.h"
+<<<<<<< Updated upstream
 #include <unistd.h>
 #include <fcntl.h>
 
@@ -46,4 +52,68 @@ int main(void)
                execve(args2[0], args2, NULL);
        }
 
+=======
+#include <stdlib.h>
+#include <sys/_types/_pid_t.h>
+#include <unistd.h>
+#include <stdio.h>
+
+int pipex(t_pxdata *data, char *envp[])
+{
+       int p[2];
+       pid_t pid;
+       char **cmd;
+       int status;
+
+       pipe(p);
+       pid = fork();
+       if (pid < 0)
+               return (EXIT_FAILURE);
+       if (pid == 0)
+       {
+               close(p[0]);
+               dup2(data->in_fd, 0);
+               dup2(p[1], 1);
+               if (!data->cmds[0])
+                       exit(127);
+               cmd = ft_split(data->cmds[0], ' '); // TODO: Free on fail
+               status = execve(cmd[0], cmd, envp);
+               free(cmd);
+               exit(status);
+       }
+       else
+       {
+               close(p[1]);
+               dup2(p[0], 0);
+               dup2(data->out_fd, 1);
+               if (!data->cmds[1])
+                       return (EXIT_FAILURE);
+               cmd = ft_split(data->cmds[1], ' '); // TODO: Free on fail
+               if (execve(cmd[0], cmd, envp))
+                       return (EXIT_FAILURE);
+               free(cmd);
+       }
+       close(data->in_fd);
+       close(data->out_fd);
+       return (EXIT_SUCCESS);
+}
+
+int main(int argc, char *argv[], char *envp[]) {
+       t_pxdata *data;
+
+       if (argc != 5)
+               return (1);
+
+       data = get_pxdata(argc, argv, envp);
+       /* if (data->in_fd < 0 || data->out_fd < 0) */
+       /*      return (1); */
+       /* ft_printf("IN: %d\nOUT: %d\n", data->in_fd, data->out_fd); */
+       /* int i = 0; */
+       /* while (data->cmds[i]) */
+       /* { */
+       /*      ft_printf("CMD [%d]: %s\n", i, data->cmds[i]); */
+       /*      i++; */
+       /* } */
+       return pipex(data, envp);
+>>>>>>> Stashed changes
 }