diff options
| author | JozanLeClerc <bousset.rudy@gmail.com> | 2020-09-05 14:48:49 +0200 | 
|---|---|---|
| committer | JozanLeClerc <bousset.rudy@gmail.com> | 2020-09-05 14:48:49 +0200 | 
| commit | 3976118a6e9acd035d20ef79d92632ecb962814e (patch) | |
| tree | fdcf1e85b2e4c492c9955299f6e0a2e24d5272c8 | |
| parent | This is all wrong (diff) | |
| download | 42-minishell-3976118a6e9acd035d20ef79d92632ecb962814e.tar.gz 42-minishell-3976118a6e9acd035d20ef79d92632ecb962814e.tar.bz2 42-minishell-3976118a6e9acd035d20ef79d92632ecb962814e.tar.xz 42-minishell-3976118a6e9acd035d20ef79d92632ecb962814e.tar.zst 42-minishell-3976118a6e9acd035d20ef79d92632ecb962814e.zip | |
Rewrite in progress
Diffstat (limited to '')
| -rw-r--r-- | src/d_define.h | 2 | ||||
| -rw-r--r-- | src/m_loop_next.c | 44 | ||||
| -rw-r--r-- | src/m_loop_next.h | 7 | ||||
| -rw-r--r-- | src/p_args.c | 10 | ||||
| -rw-r--r-- | src/p_args_len.c | 6 | ||||
| -rw-r--r-- | src/p_args_quotes.c | 6 | 
6 files changed, 42 insertions, 33 deletions
| diff --git a/src/d_define.h b/src/d_define.h index 66cc619..ce0ccc9 100644 --- a/src/d_define.h +++ b/src/d_define.h @@ -67,7 +67,7 @@  #define C_SQUOTE	'\''  #define C_DQUOTE	'"' -#define C_BACKSLASH	'\\' +#define C_BS		'\\'  #define C_NULL		'\000'  /* diff --git a/src/m_loop_next.c b/src/m_loop_next.c index 1163a49..75c00ac 100644 --- a/src/m_loop_next.c +++ b/src/m_loop_next.c @@ -15,6 +15,7 @@  #include <unistd.h>  #include "d_define.h" +#include "m_loop_next.h"  #include "m_prompt.h"  #include "s_struct.h" @@ -141,38 +142,39 @@ char  	return (line);  } -static void -	m_set_q_arr(size_t q[], char line[]) +static t_bool +	m_check_missing_quotes(char line[])  { -	char	*ptr; - -	q[0] = 0; -	q[1] = 0; -	ptr = line; -	while (*ptr != C_NULL) +	char	*p; +	uint8_t	mode; +	t_bool	ret; + +	ret = FALSE; +	p = line; +	mode = M_NO_MODE; +	while (*p != C_NULL)  	{ -		if (*ptr == C_SQUOTE) -		{ -			q[0] += 1; -		} -		else if (*ptr == C_DQUOTE) +		if (*p == C_SQUOTE || *p == C_DQUOTE)  		{ -			if (*(ptr - 1) != C_BACKSLASH) -				q[1] += 1; -			else if (*(ptr - 2) == C_BACKSLASH) -				q[1] += 1; +			if (((p - line) == 0) || +				((p - line) == 1 && *(p - 1) != C_BS) || +				((p - line) > 1 && *(p - 1) == C_BS && +				 *(p - 2) == C_BS)) +				mode = (*p == C_SQUOTE) ? (M_SQ_MODE) : (M_DQ_MODE);  		} -		ptr++; +		p++;  	} +	return (ret);  }  char  	*m_check_multi_quotes(int32_t fd, char line[], t_msh *msh)  { -	size_t	q[2]; +	t_bool	reparse; -	m_set_q_arr(q, line); -	if (q[0] % 2 == 1 || q[1] % 2 == 1) +	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); diff --git a/src/m_loop_next.h b/src/m_loop_next.h index b4ca62c..1c80e2a 100644 --- a/src/m_loop_next.h +++ b/src/m_loop_next.h @@ -17,6 +17,13 @@  #include "s_struct.h" +enum +{ +	M_NO_MODE, +	M_SQ_MODE, +	M_DQ_MODE +}; +  char	*m_check_multi_backslash(int32_t fd, char line[], t_msh *msh);  char	*m_check_multi_pipe(int32_t fd, char line[], t_msh *msh);  char	*m_check_multi_and(int32_t fd, char line[], t_msh *msh); diff --git a/src/p_args.c b/src/p_args.c index 9ce0230..0ec391c 100644 --- a/src/p_args.c +++ b/src/p_args.c @@ -52,9 +52,9 @@ static char  		ptr++;  		if (*ptr == c && c == C_DQUOTE)  		{ -			if (*(ptr - 1) == C_BACKSLASH) +			if (*(ptr - 1) == C_BS)  			{ -				if (*(ptr - 2) != C_BACKSLASH) +				if (*(ptr - 2) != C_BS)  					ptr++;  			}  		} @@ -74,13 +74,13 @@ static int32_t  	{  		(*ptr)++;  		if ((*(*ptr) == C_SQUOTE || *(*ptr) == C_DQUOTE) && -			*(*ptr - 1) != C_BACKSLASH) +			*(*ptr - 1) != C_BS)  		{  			(*ptr) += 1;  			return (p_count_args(head, *ptr, argc, start));  		} -		if (ft_iswhitespace(*(*ptr)) == TRUE && *(*ptr - 1) == C_BACKSLASH && -			*(*ptr - 2) != C_BACKSLASH) +		if (ft_iswhitespace(*(*ptr)) == TRUE && *(*ptr - 1) == C_BS && +			*(*ptr - 2) != C_BS)  		{  			(*ptr) += 1;  			return (-1); diff --git a/src/p_args_len.c b/src/p_args_len.c index 8bab9d7..c736a3a 100644 --- a/src/p_args_len.c +++ b/src/p_args_len.c @@ -26,7 +26,7 @@ static size_t  		end++;  		if (word[end] == c && c == C_DQUOTE)  		{ -			if (word[end - 1] == C_BACKSLASH && word[end - 2] != C_BACKSLASH) +			if (word[end - 1] == C_BS && word[end - 2] != C_BS)  			{  				end++;  			} @@ -46,12 +46,12 @@ static size_t  	{  		end++;  		if (ft_iswhitespace(word[end]) == TRUE && end == 1 && -			word[end - 1] == C_BACKSLASH) +			word[end - 1] == C_BS)  		{  			end++;  		}  		else if (ft_iswhitespace(word[end]) == TRUE && end > 1 && -			word[end - 1] == C_BACKSLASH && word[end - 2] != C_BACKSLASH) +			word[end - 1] == C_BS && word[end - 2] != C_BS)  		{  			end++;  		} diff --git a/src/p_args_quotes.c b/src/p_args_quotes.c index 6ecbb90..e6fdd92 100644 --- a/src/p_args_quotes.c +++ b/src/p_args_quotes.c @@ -37,10 +37,10 @@ static void  	{  		if (ptr - word == 0)  			ft_memmove(word, word + 1, ft_strlen(word)); -		else if (ptr - word == 1 && *(ptr - 1) == C_BACKSLASH) +		else if (ptr - word == 1 && *(ptr - 1) == C_BS)  			ptr++; -		else if (ptr - word > 1 && *(ptr - 1) == C_BACKSLASH && -			*(ptr - 2) != C_BACKSLASH) +		else if (ptr - word > 1 && *(ptr - 1) == C_BS && +			*(ptr - 2) != C_BS)  			ptr++;  		else  			ft_memmove(word + (ptr - word), ptr + 1, ft_strlen(ptr + 1) + 1); | 
