/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* parser.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: narnaud +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/05/02 16:09:25 by narnaud #+# #+# */ /* Updated: 2022/05/03 12:43:48 by narnaud ### ########.fr */ /* */ /* ************************************************************************** */ #include "minishell.h" void push_heredoc(char *str, int fd) { char *line; while(1) { line = readline(">"); if (!ft_strncmp(line, str, ft_strlen(str) + 1)) break; ft_putstr_fd(line, fd); write(fd, "\n", 1); } } size_t count_arguments(t_token *tok) { size_t ret; ret = 0; while (tok && tok->type != PIPE) { if (!tok->type) ret++; tok = tok->next; } return (ret); } void update_redir(t_command *cmd, t_token *tok) { if (tok->type == OUT) { if (cmd->fd[1]) close(cmd->fd[1]); cmd->fd[1] = open(tok->value, O_CREAT | O_TRUNC | O_WRONLY, 0644); } else if (tok->type == ADD) { if (cmd->fd[1]) close(cmd->fd[1]); cmd->fd[1] = open(tok->value, O_CREAT | O_APPEND | O_WRONLY, 0644); } else if (tok->type == IN) { if (cmd->fd[0]) close(cmd->fd[0]); cmd->fd[0] = open(tok->value, O_RDONLY); } else if (tok->type == HD) { if (cmd->fd[0]) close(cmd->fd[0]); cmd->fd[0] = 0; cmd->heredoc = tok->value; } }