summaryrefslogtreecommitdiff
path: root/src/main.c
diff options
context:
space:
mode:
authorDominik Kaiser2024-05-07 14:43:22 +0200
committerDominik Kaiser2024-05-07 14:43:22 +0200
commitad230909ea745a1c0404efefb7a25bd33eb63373 (patch)
tree30f76098adc8880bc5cb4755abab556eb8e3eb9e /src/main.c
parent2692c96e1e4a995b0315ece2888e3255a205b802 (diff)
downloadpipex-sketch.tar.gz
pipex-sketch.zip
Main logic for pipexsketch
Diffstat (limited to 'src/main.c')
-rw-r--r--src/main.c70
1 files changed, 70 insertions, 0 deletions
diff --git a/src/main.c b/src/main.c
index 1fdc764..0793857 100644
--- a/src/main.c
+++ b/src/main.c
@@ -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
}