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 | |
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_b_echo.c | 30 | ||||
-rw-r--r-- | src/ft_m_loop.c | 42 | ||||
-rw-r--r-- | src/ft_m_prompt.c | 7 | ||||
-rw-r--r-- | src/ft_m_prompt.h | 1 | ||||
-rw-r--r-- | src/ft_p_line.c | 1 |
5 files changed, 63 insertions, 18 deletions
diff --git a/src/ft_b_echo.c b/src/ft_b_echo.c index 7d21811..b837cac 100644 --- a/src/ft_b_echo.c +++ b/src/ft_b_echo.c @@ -18,24 +18,24 @@ #include "ft_s_struct.h" #include "ft_u_utils.h" -/* TODO: echo "quoted text", echo 'quoted text', */ -/* echo kill\nbackslash\nbut\nnot\nn, echo "quoted\nnew\nlines" */ -/* Might need to go full buffer */ +/* TODO: echo "quoted text", echo 'quoted text', done*/ +/* echo kill\nbackslash\nbut\nnot\nn, echo "quoted\nnew\nlines", done */ +/* full buffer */ void -ft_e_put(char *str, - uint8_t op) + ft_e_put(char *str, + uint8_t op) { - size_t i; + size_t i; - i = -1; - if (op == 0) - while (str[++i]) - { - if (str[i] == '\\') - i++; - ft_putchar(str[i]); - } + i = -1; + if (op == 0) + while (str[++i]) + { + if (str[i] == '\\') + i++; + ft_putchar(str[i]); + } } char @@ -77,6 +77,8 @@ void { ft_e_put(*str, 0); } + else + ft_printf("%s", *str); } uint8_t 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 */ diff --git a/src/ft_m_prompt.c b/src/ft_m_prompt.c index 5d0f80c..8f59a9e 100644 --- a/src/ft_m_prompt.c +++ b/src/ft_m_prompt.c @@ -15,6 +15,13 @@ #include "ft_s_struct.h" void + ft_m_cont_prompt(void) +{ + ft_printf(">"); + /* TODO :ft_printf("%s", msh->ps_two); */ +} + +void ft_m_prompt(t_msh *msh) { ft_printf("%s", msh->ps_one); diff --git a/src/ft_m_prompt.h b/src/ft_m_prompt.h index e16b24c..2725539 100644 --- a/src/ft_m_prompt.h +++ b/src/ft_m_prompt.h @@ -16,4 +16,5 @@ #include "ft_s_struct.h" void ft_m_prompt(t_msh *msh); +void ft_m_cont_prompt(void); #endif diff --git a/src/ft_p_line.c b/src/ft_p_line.c index b1ba6b2..166b880 100644 --- a/src/ft_p_line.c +++ b/src/ft_p_line.c @@ -31,6 +31,7 @@ void ptr = line; while (*ptr != '\0') { + if (*ptr == ';') { count += 1; |