From 754cc63f327eb7fa40bf1b780d75da0a1482d3be Mon Sep 17 00:00:00 2001 From: JozanLeClerc Date: Wed, 21 Oct 2020 21:11:51 +0200 Subject: Mostly works, || issues --- src/s_lpipes_split.c | 40 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 37 insertions(+), 3 deletions(-) (limited to 'src/s_lpipes_split.c') diff --git a/src/s_lpipes_split.c b/src/s_lpipes_split.c index da23f47..4da4a03 100644 --- a/src/s_lpipes_split.c +++ b/src/s_lpipes_split.c @@ -13,20 +13,54 @@ #include #include #include +#ifdef __linux__ +# include +#else +# include +#endif #include "d_define.h" #include "d_enum.h" +#include "u_parse.h" +#include "u_utils.h" + +void s_set_tmp(char tmp[], size_t pos[], int16_t i, const char word[]) +{ + if (pos[i] != 0) + ft_strlcpy(tmp, + word + ((pos[i - 1] == 0) ? (0) : (pos[i - 1] + 1)), + pos[i] - ((pos[i - 1] == 0) ? (0) : (pos[i - 1])) + + ((pos[i - 1] == 0) ? (1) : (0))); + else + ft_strlcpy(tmp, + word + ((pos[i - 1] == 0) ? (0) : (pos[i - 1] + 1)), + ARG_MAX - pos[i] + 1); +} void s_get_split_pos(size_t pos[], const char word[]) { char *ptr; t_quote_mode mode; - uint8_t i; + uint16_t i; ptr = (char*)word; mode = Q_NONE; - i = 0; - while (*ptr != C_NUL) + i = 1; + while (*ptr != C_NUL && (uint16_t)i < 256) { + if (*ptr == C_PIPE) + { + if (mode == Q_NONE && u_is_not_escaped(word, ptr) == TRUE + && *(ptr + 1) != C_PIPE && *(ptr - 1) != C_PIPE) + { + pos[i] = (ptr - word); + i++; + } + } + if (*ptr == C_DQUOTE) + mode = u_meet_dquote(word, ptr, mode); + else if (*ptr == C_SQUOTE) + mode = u_meet_squote(word, ptr, mode); + ptr++; } } -- cgit v1.2.3