multiline heredoc in history

This commit is contained in:
Jack Halford 2017-03-10 13:29:00 +01:00
parent 7dd8b1861b
commit 9361d965bc
4 changed files with 21 additions and 10 deletions

View file

@ -6,7 +6,7 @@
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */ /* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2016/11/27 20:29:56 by jhalford #+# #+# */ /* Created: 2016/11/27 20:29:56 by jhalford #+# #+# */
/* Updated: 2017/03/10 13:19:04 by jhalford ### ########.fr */ /* Updated: 2017/03/10 13:26:16 by jhalford ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */

View file

@ -6,7 +6,7 @@
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */ /* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2017/03/08 15:51:17 by jhalford #+# #+# */ /* Created: 2017/03/08 15:51:17 by jhalford #+# #+# */
/* Updated: 2017/03/10 13:16:54 by jhalford ### ########.fr */ /* Updated: 2017/03/10 13:27:32 by jhalford ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */

View file

@ -6,7 +6,7 @@
/* By: jhalford <jhalford@student.42.fr> +#+ +:+ +#+ */ /* By: jhalford <jhalford@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2016/12/06 18:40:58 by jhalford #+# #+# */ /* Created: 2016/12/06 18:40:58 by jhalford #+# #+# */
/* Updated: 2017/03/10 13:19:01 by jhalford ### ########.fr */ /* Updated: 2017/03/10 13:28:24 by jhalford ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -36,6 +36,11 @@ int handle_instruction(int fd)
return (parser.state == UNDEFINED ? error_EOF(&token, return (parser.state == UNDEFINED ? error_EOF(&token,
&parser, &ast) : 1); &parser, &ast) : 1);
} }
if (lexer.state == HEREDOC)
{
ft_strappend(&lexer.str, (char[]){'\n', 0});
lexer.pos++;
}
ft_strappend(&lexer.str, str); ft_strappend(&lexer.str, str);
if (get_lexer_stack(lexer) == BACKSLASH) if (get_lexer_stack(lexer) == BACKSLASH)
pop(&lexer.stack); pop(&lexer.stack);

View file

@ -6,7 +6,7 @@
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */ /* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2017/03/08 16:21:05 by ariard #+# #+# */ /* Created: 2017/03/08 16:21:05 by ariard #+# #+# */
/* Updated: 2017/03/10 13:19:06 by jhalford ### ########.fr */ /* Updated: 2017/03/10 13:26:15 by jhalford ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -26,15 +26,21 @@ int pop_heredoc(t_list **lst)
head = data_singleton()->heredoc_queue->content; head = data_singleton()->heredoc_queue->content;
temp = data_singleton()->heredoc_queue; temp = data_singleton()->heredoc_queue;
DG("compare %s with %s", (char *)token->data, head->word); DG("compare %s with %s", (char *)token->data, head->word);
if (head && token && ft_strcmp((char *)token->data, head->word) == 0) if (head && token)
{ {
DG(); DG();
temp2 = temp->next; if (ft_strcmp((char *)token->data, head->word) == 0)
free(temp); {
data_singleton()->heredoc_queue = temp2; temp2 = temp->next;
free(temp);
data_singleton()->heredoc_queue = temp2;
}
else
{
DG("joining [%s] to heredoc", (char*)token->data);
head->heredoc_data = ft_strjoin(head->heredoc_data, token->data);
}
} }
else if (token)
head->heredoc_data = ft_strjoin(head->heredoc_data, token->data);
ft_lstdel(lst, &token_free); ft_lstdel(lst, &token_free);
return (1); return (1);
} }