From 73cc6d40e6c89819c0dd9dffdd095bc9d9ea6b88 Mon Sep 17 00:00:00 2001 From: salad Date: Tue, 28 Apr 2020 15:15:40 +0200 Subject: ladies and gentlement --- src/ft_m_loop.c | 42 ++++++++++++++++++++++++++++++++++++++---- 1 file changed, 38 insertions(+), 4 deletions(-) (limited to 'src/ft_m_loop.c') diff --git a/src/ft_m_loop.c b/src/ft_m_loop.c index 7ed8009..8302bfc 100644 --- a/src/ft_m_loop.c +++ b/src/ft_m_loop.c @@ -12,6 +12,7 @@ #include #include +#include #include #include "ft_e_lcom.h" @@ -19,10 +20,38 @@ #include "ft_p_line.h" #include "ft_s_lcom.h" +uint8_t + ft_m_loop_cont(t_msh *msh, char *line, char *quote) +{ + int8_t gnl; + char *prog; + char *buf; + + if (!(prog = malloc((quote - line) * sizeof(char)))) + return (0); + ft_memcpy(prog, line, (quote - line)); + buf = ft_strdup(line + (quote - line) + 1); + gnl = 1; + while (gnl > 0 && (!(quote = ft_strrchr(buf, '\"')))) + { + ft_m_cont_prompt(); + gnl = get_next_line(STDIN_FILENO, &line); + ft_sprintf(buf + ft_strlen(buf), "\n%s", line); + } + buf = ft_strtrim(buf, "\"\'"); + ft_p_line(ft_strjoin(prog, buf), msh); + ft_memdel((void*)&line); + ft_memdel((void*)&buf); + ft_e_lcom(msh); + ft_lcom_clear(&msh->curr); + return (1); /*got second quote, keep going*/ +} + uint8_t ft_m_loop(t_msh *msh) { char *line; + char *quote; int8_t gnl; gnl = 1; @@ -32,10 +61,15 @@ uint8_t gnl = get_next_line(STDIN_FILENO, &line); if (line[0] != '\0') { - ft_p_line(line, msh); - ft_memdel((void*)&line); - ft_e_lcom(msh); - ft_lcom_clear(&msh->curr); + if (!(quote = ft_strchr(line, '\"'))) + { + ft_p_line(line, msh); + ft_memdel((void*)&line); + ft_e_lcom(msh); + ft_lcom_clear(&msh->curr); + } + else + ft_m_loop_cont(msh, line, quote); /* TODO: (null): Bad address on "msh ~> echo a > asd; cat < asd" but not on "msh ~> echo a > asd; cat asd" */ /* TODO: GNL 25 leak on "msh ~> exit" | gl hf */ /* TODO: "msh ~> some command \": re GNL into ft_nrealloc */ -- cgit v1.2.3