pipex/bonus/pipex_heredoc.c
Etienne Rey-bethbeder ffa3031882 Correction Pipex
2023-03-07 16:41:46 +01:00

59 lines
1.8 KiB
C

/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* pipex_heredoc.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: erey-bet <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/14 11:22:13 by erey-bet #+# #+# */
/* Updated: 2023/03/07 15:46:36 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_APPEND | O_CREAT, 0644);
if (data->fd2 < 0)
{
close(data->fd1);
return (print_error(0, argv[argc]));
}
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);
}