diff options
author | salad <fmoenne-@student.le-101.fr> | 2020-04-28 15:15:40 +0200 |
---|---|---|
committer | salad <fmoenne-@student.le-101.fr> | 2020-04-28 15:15:40 +0200 |
commit | 73cc6d40e6c89819c0dd9dffdd095bc9d9ea6b88 (patch) | |
tree | 97b48e362e63f15170a5fe64112f2d8736901212 /src/ft_m_loop.c | |
parent | backslashes as intended, multiline quotes vont me tuer (diff) | |
download | 42-minishell-73cc6d40e6c89819c0dd9dffdd095bc9d9ea6b88.tar.gz 42-minishell-73cc6d40e6c89819c0dd9dffdd095bc9d9ea6b88.tar.bz2 42-minishell-73cc6d40e6c89819c0dd9dffdd095bc9d9ea6b88.tar.xz 42-minishell-73cc6d40e6c89819c0dd9dffdd095bc9d9ea6b88.tar.zst 42-minishell-73cc6d40e6c89819c0dd9dffdd095bc9d9ea6b88.zip |
ladies and gentlement
Diffstat (limited to '')
-rw-r--r-- | src/ft_m_loop.c | 42 |
1 files changed, 38 insertions, 4 deletions
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 <libft.h> #include <stdint.h> +#include <stdlib.h> #include <unistd.h> #include "ft_e_lcom.h" @@ -20,9 +21,37 @@ #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 */ |