pipex/bonus/pipex_heredoc.c
Etienne Rey-bethbeder 8a8c75660b Fini Bonus
2023-02-24 14:10:02 +01:00

56 lines
1.7 KiB
C

/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* pipex_heredoc.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: erey-bet <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/14 11:22:13 by erey-bet #+# #+# */
/* Updated: 2023/02/14 14:59:59 by erey-bet ### ########.fr */
/* */
/* ************************************************************************** */
#include "pipex.h"
int parsing_here_doc(int argc, char *argv[], t_data *data)
{
int i;
data->fd2 = open(argv[argc], O_WRONLY | O_TRUNC | O_CREAT);
if (data->fd2 < 0)
return (1);
data->cmds = ft_calloc(argc - 2, sizeof(char *));
data->flgs = ft_calloc(argc - 2, sizeof(char *));
i = -1;
while (++i < argc - 3)
{
data->cmds[i] = get_command(argv[3 + i]);
data->flgs[i] = ft_split(argv[3 + i], ' ');
}
return (0);
}
int here_doc(int argc, char *argv[], char **env, t_data *data)
{
char *cur;
int fd[2];
if (pipe(fd) < -1)
return (1);
while (1)
{
cur = get_next_line(0);
if (ft_strncmp(cur, argv[2], ft_strlen(argv[2])) == 0)
break ;
ft_putstr_fd(cur, fd[1]);
free(cur);
}
free(cur);
data->fd1 = fd[0];
close(fd[1]);
if (parsing_here_doc(argc, argv, data) > 0)
return (1);
data->env = env;
return (0);
}