summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorsalad <fmoenne-@student.le-101.fr>2020-04-28 15:15:40 +0200
committersalad <fmoenne-@student.le-101.fr>2020-04-28 15:15:40 +0200
commit73cc6d40e6c89819c0dd9dffdd095bc9d9ea6b88 (patch)
tree97b48e362e63f15170a5fe64112f2d8736901212 /src
parentbackslashes as intended, multiline quotes vont me tuer (diff)
download42-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.c30
-rw-r--r--src/ft_m_loop.c42
-rw-r--r--src/ft_m_prompt.c7
-rw-r--r--src/ft_m_prompt.h1
-rw-r--r--src/ft_p_line.c1
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;