summaryrefslogtreecommitdiffstats
path: root/src/m_loop_next.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/m_loop_next.c')
-rw-r--r--src/m_loop_next.c176
1 files changed, 5 insertions, 171 deletions
diff --git a/src/m_loop_next.c b/src/m_loop_next.c
index b312c0b..a31e850 100644
--- a/src/m_loop_next.c
+++ b/src/m_loop_next.c
@@ -15,78 +15,12 @@
#include <unistd.h>
#include "d_define.h"
-#include "m_loop_next.h"
-#include "m_prompt.h"
+#include "m_loop_counter.h"
+#include "m_loop_multis.h"
#include "s_struct.h"
#include "u_utils.h"
-static char
- *m_counter_line_backslash(int32_t fd, uint8_t psx, char *line, t_msh *msh)
-{
- char *counter_line;
-
- if (fd == STDIN_FILENO)
- m_prompt_psx(psx, msh);
- get_next_line(fd, &counter_line);
- if (counter_line[0] != C_NUL)
- {
- line = ft_nrealloc(line,
- ft_strlen(line) + 1,
- ft_strlen(line) + ft_strlen(counter_line));
- ft_memcpy(line + ft_strlen(line) - 1,
- counter_line,
- ft_strlen(counter_line) + 1);
- }
- ft_memdel((void*)&counter_line);
- return (line);
-}
-
-static char
- *m_counter_line_pipes(int32_t fd, uint8_t psx, char *line, t_msh *msh)
-{
- char *counter_line;
-
- if (fd == STDIN_FILENO)
- m_prompt_psx(psx, msh);
- get_next_line(fd, &counter_line);
- if (counter_line[0] != C_NUL)
- {
- line = ft_nrealloc(line,
- ft_strlen(line) + 1,
- ft_strlen(line) + ft_strlen(counter_line) + 1);
- ft_memcpy(line + ft_strlen(line),
- counter_line,
- ft_strlen(counter_line) + 1);
- }
- ft_memdel((void*)&counter_line);
- return (line);
-}
-
-static char
- *m_counter_line_quotes(int32_t fd, uint8_t psx, char *line, t_msh *msh)
-{
- char *counter_line;
-
- if (fd == STDIN_FILENO)
- m_prompt_psx(psx, msh);
- get_next_line(fd, &counter_line);
- if (counter_line[0] != C_NUL)
- {
- line = ft_nrealloc(line,
- ft_strlen(line) + 1,
- ft_strlen(line) + ft_strlen(counter_line) + 2);
- line[ft_strlen(line) + 1] = '\0';
- line[ft_strlen(line)] = '\n';
- ft_memcpy(line + ft_strlen(line),
- counter_line,
- ft_strlen(counter_line) + 1);
- }
- ft_memdel((void*)&counter_line);
- return (line);
-}
-
-char
- *m_check_multi_backslash(int32_t fd, char line[], t_msh *msh)
+char *m_check_multi_backslash(int32_t fd, char line[], t_msh *msh)
{
if (line[ft_strlen(line) - 1] == '\\')
{
@@ -96,8 +30,7 @@ char
return (line);
}
-char
- *m_check_multi_pipe(int32_t fd, char line[], t_msh *msh)
+char *m_check_multi_pipe(int32_t fd, char line[], t_msh *msh)
{
char *pipe;
@@ -119,8 +52,7 @@ char
return (line);
}
-char
- *m_check_multi_and(int32_t fd, char line[], t_msh *msh)
+char *m_check_multi_and(int32_t fd, char line[], t_msh *msh)
{
char *and;
@@ -142,101 +74,3 @@ char
}
return (line);
}
-
-static t_bool
- m_check_dquote(char **ptr, char line[])
-{
- if (((*ptr - line) == 0) ||
- ((*ptr - line) == 1 && *(*ptr - 1) == C_BACKS) ||
- ((*ptr - line) > 1 && *(*ptr - 1) == C_BACKS && *(*ptr - 2) != C_BACKS))
- {
- return (FALSE);
- }
- else
- {
- return (TRUE);
- }
-}
-
-static t_bool
- m_find_next_quote(char **ptr, char line[], t_quote_mode mode)
-{
- char c;
-
- if (mode == Q_NONE)
- return (FALSE);
- c = (mode == Q_SINGLE) ? (C_SQUOTE) : (C_DQUOTE);
- (*ptr) += 1;
- while (**ptr != C_NUL)
- {
- if (**ptr == c && c == C_DQUOTE)
- {
- if (m_check_dquote(ptr, line) == FALSE)
- {
- (*ptr)++;
- if (**ptr == C_NUL)
- break ;
- }
- else
- return (FALSE);
- }
- else if (**ptr == c && c == C_SQUOTE)
- return (FALSE);
- (*ptr)++;
- }
- return (TRUE);
-}
-
-static t_bool
- m_check_missing_quotes(char line[])
-{
- char *ptr;
- t_quote_mode mode;
-
- ptr = line;
- mode = Q_NONE;
- while (*ptr != C_NUL)
- {
- if (*ptr == C_SQUOTE || *ptr == C_DQUOTE)
- {
- if (u_is_not_escaped(line, ptr) == TRUE)
- {
- mode = (*ptr == C_SQUOTE) ? (Q_SINGLE) : (Q_DOUBLE);
- if (m_find_next_quote(&ptr, line, mode) == FALSE)
- mode = Q_NONE;
- else
- return (TRUE);
- }
- }
- ptr++;
- }
- return (FALSE);
-}
-
-char
- *m_check_multi_quotes(int32_t fd, char line[], t_msh *msh)
-{
- t_bool reparse;
-
- reparse = FALSE;
- reparse = m_check_missing_quotes(line);
- if (reparse == TRUE)
- {
- line = m_counter_line_quotes(fd, 2, line, msh);
- line = m_check_multi_backslash(fd, line, msh);
- line = m_check_multi_pipe(fd, line, msh);
- line = m_check_multi_and(fd, line, msh);
- line = m_check_multi_quotes(fd, line, msh);
- }
- return (line);
-}
-
-char *m_check_multis(int32_t fd, char line[], t_msh *msh)
-{
- line = m_check_multi_backslash(fd, line, msh);
- line = m_check_multi_pipe(fd, line, msh);
- line = m_check_multi_and(fd, line, msh);
- line = m_check_multi_quotes(fd, line, msh);
-
- return (line);
-}