diff options
Diffstat (limited to '')
| -rw-r--r-- | Makefile | 1 | ||||
| -rw-r--r-- | src/p_lblock_next.c | 102 | ||||
| -rw-r--r-- | src/p_lblock_next.h | 1 | ||||
| -rw-r--r-- | src/p_subst_alias.c | 132 | ||||
| -rw-r--r-- | src/p_subst_alias.h | 23 | ||||
| -rw-r--r-- | src/s_com.c | 1 | 
6 files changed, 160 insertions, 100 deletions
| @@ -80,6 +80,7 @@ SRCS_NAME		+= p_lblock_more  SRCS_NAME		+= p_redirs  SRCS_NAME		+= p_redirs_heredoc  SRCS_NAME		+= p_split +SRCS_NAME		+= p_subst_alias  SRCS_NAME		+= p_subst_home  SRCS_NAME		+= u_alias  SRCS_NAME		+= u_parse diff --git a/src/p_lblock_next.c b/src/p_lblock_next.c index d964f11..9def230 100644 --- a/src/p_lblock_next.c +++ b/src/p_lblock_next.c @@ -88,108 +88,12 @@ void			p_subst_vars(char word[], t_msh *msh)  	}  } -static char		*p_skip_whitespace(char *ptr) -{ -	while (*ptr != C_NUL && ft_iswhitespace(*ptr)) -		ptr++; -	return (ptr); -} -static t_bool	p_meet_whitespace(char *head, char *ptr, t_quote_mode mode) -{ -	if (mode == Q_NONE && u_is_not_escaped(head, ptr) == TRUE) -	{ -		return (TRUE); -	} -	return (FALSE); -} -size_t			p_subst_alias(char word[], t_bool reset, t_msh *msh) -{ -	static size_t	used[4096]; -	static size_t	i = 0; -	char			value[ARG_MAX]; -	char			tmp[255]; -	size_t			locat[2]; -	size_t			j; -	size_t			usedcmp; -	char			*ptr; -	t_bool			good; -	t_quote_mode	mode; -	if (reset == TRUE) -	{ -		i = 0; -		while (i < 4096) -		{ -			used[i] = 0; -			i++; -		} -		i = 0; -	} -	mode = Q_NONE; -	ptr = word; -	ptr = p_skip_whitespace(ptr); -	good = TRUE; -	locat[0] = (ptr - word); -	locat[1] = (ptr - word); -	while (*ptr != C_NUL) -	{ -		if (*ptr == C_DQUOTE) -			mode = u_meet_dquote(word, ptr, mode); -		if (*ptr == C_SQUOTE) -			mode = u_meet_squote(word, ptr, mode); -		if (mode == Q_NONE && *ptr == C_EQUALS) -			good = FALSE; -		if (ft_iswhitespace(*ptr) == TRUE && -			p_meet_whitespace((char*)word, ptr, mode) == TRUE) -		{ -			locat[1] = (ptr - word); -			if (good == TRUE) -				break ; -			else -			{ -				ptr = p_skip_whitespace(ptr); -				locat[0] = (ptr - word); -				ptr -= 1; -				good = TRUE; -			} -		} -		ptr++; -	} -	if (*ptr == C_NUL && good == TRUE) -		locat[1] = (ptr - word); -	if (good == TRUE) -	{ -		ft_strlcpy(tmp, -			word + locat[0], -			((locat[1] - locat[0] < 253) ? (locat[1] - locat[0]) : (254)) + 1); -		if ((usedcmp = u_get_alias_value(value, tmp, ARG_MAX, msh)) != 0) -		{ -			j = 0; -			good = TRUE; -			while (j < i) -			{ -				if (used[j] == usedcmp) -					good = FALSE; -				j++; -			} -			if (good == TRUE) -			{ -				(void)ft_memmove(word + (locat[0] + ft_strlen(value)), -					word + locat[1], -					ft_strlen(word + locat[1]) + 1 * sizeof(char)); -				(void)ft_memmove(word + locat[0], -					value, -					ft_strlen(value) * sizeof(char)); -				used[i] = usedcmp; -				i++; -				return (usedcmp); -			} -		} -	} -	return (0); -} + + +  static char		**p_alloc_rewords(char *words[], int64_t j, t_msh *msh)  { diff --git a/src/p_lblock_next.h b/src/p_lblock_next.h index 7af7881..5d8aeb8 100644 --- a/src/p_lblock_next.h +++ b/src/p_lblock_next.h @@ -19,7 +19,6 @@  # include "s_struct.h"  void	p_subst_vars(char word[], t_msh *msh); -size_t	p_subst_alias(char word[], t_bool reset, t_msh *msh);  char	**p_subst_args(const char word[], int8_t redir);  char	**p_check_args_equals(char *words[], t_msh *msh); diff --git a/src/p_subst_alias.c b/src/p_subst_alias.c new file mode 100644 index 0000000..9e25087 --- /dev/null +++ b/src/p_subst_alias.c @@ -0,0 +1,132 @@ +/* ************************************************************************** */ +/*                                                                            */ +/*                                                        :::      ::::::::   */ +/*   p_subst_alias.c                                    :+:      :+:    :+:   */ +/*                                                    +:+ +:+         +:+     */ +/*   By: rbousset <marvin@42.fr>                    +#+  +:+       +#+        */ +/*                                                +#+#+#+#+#+   +#+           */ +/*   Created: 2020/02/14 17:19:27 by rbousset          #+#    #+#             */ +/*   Updated: 2020/02/14 17:19:29 by rbousset         ###   ########lyon.fr   */ +/*                                                                            */ +/* ************************************************************************** */ + +#include <libft.h> +#include <stddef.h> + +#include "s_struct.h" +#include "u_alias.h" +#include "u_parse.h" +#include "u_utils.h" +#include "u_vars.h" + +static char		*p_skip_whitespace(char *ptr) +{ +	while (*ptr != C_NUL && ft_iswhitespace(*ptr)) +	{ +		ptr++; +	} +	return (ptr); +} + +static t_bool	p_meet_whitespace(char *head, char *ptr, t_quote_mode mode) +{ +	if (mode == Q_NONE && u_is_not_escaped(head, ptr) == TRUE) +	{ +		return (TRUE); +	} +	return (FALSE); +} + +static char		*p_set_ptr(char *ptr, char word[], t_bool *good, size_t locat[]) +{ +	t_quote_mode	mode; + +	mode = Q_NONE; +	while (*ptr != C_NUL) +	{ +		if (*ptr == C_DQUOTE) +			mode = u_meet_dquote(word, ptr, mode); +		if (*ptr == C_SQUOTE) +			mode = u_meet_squote(word, ptr, mode); +		if (mode == Q_NONE && *ptr == C_EQUALS) +			*good = FALSE; +		if (ft_iswhitespace(*ptr) == TRUE +			&& p_meet_whitespace((char*)word, ptr, mode) == TRUE) +		{ +			locat[1] = (ptr - word); +			if (*good == TRUE) +				break ; +			else +			{ +				ptr = p_skip_whitespace(ptr); +				locat[0] = (ptr - word); +				ptr -= 1; +				*good = TRUE; +			} +		} +		ptr++; +	} +	return (ptr); +} + +size_t			p_subst_alias(char word[], t_bool reset, t_msh *msh) +{ +	static size_t	used[4096]; +	static size_t	i = 0; +	char			value[ARG_MAX]; +	char			tmp[255]; +	size_t			locat[2]; +	size_t			j; +	size_t			usedcmp; +	char			*ptr; +	t_bool			good; + +	if (reset == TRUE) +	{ +		i = 0; +		while (i < 4096) +		{ +			used[i] = 0; +			i++; +		} +		i = 0; +	} +	ptr = word; +	ptr = p_skip_whitespace(ptr); +	good = TRUE; +	locat[0] = (ptr - word); +	locat[1] = (ptr - word); +	ptr = p_set_ptr(ptr, word, &good, locat); +	if (*ptr == C_NUL && good == TRUE) +		locat[1] = (ptr - word); +	if (good == TRUE) +	{ +		ft_strlcpy(tmp, +			word + locat[0], +			((locat[1] - locat[0] < 253) ? (locat[1] - locat[0]) : (254)) + 1); +		if ((usedcmp = u_get_alias_value(value, tmp, ARG_MAX, msh)) != 0) +		{ +			j = 0; +			good = TRUE; +			while (j < i) +			{ +				if (used[j] == usedcmp) +					good = FALSE; +				j++; +			} +			if (good == TRUE) +			{ +				(void)ft_memmove(word + (locat[0] + ft_strlen(value)), +					word + locat[1], +					ft_strlen(word + locat[1]) + 1 * sizeof(char)); +				(void)ft_memmove(word + locat[0], +					value, +					ft_strlen(value) * sizeof(char)); +				used[i] = usedcmp; +				i++; +				return (usedcmp); +			} +		} +	} +	return (0); +} diff --git a/src/p_subst_alias.h b/src/p_subst_alias.h new file mode 100644 index 0000000..5d5476f --- /dev/null +++ b/src/p_subst_alias.h @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/*                                                                            */ +/*                                                        :::      ::::::::   */ +/*   p_subst_alias.h                                    :+:      :+:    :+:   */ +/*                                                    +:+ +:+         +:+     */ +/*   By: rbousset <marvin@42.fr>                    +#+  +:+       +#+        */ +/*                                                +#+#+#+#+#+   +#+           */ +/*   Created: 2020/02/14 17:19:27 by rbousset          #+#    #+#             */ +/*   Updated: 2020/02/14 17:19:29 by rbousset         ###   ########lyon.fr   */ +/*                                                                            */ +/* ************************************************************************** */ + +#ifndef FT_P_SUBST_ALIAS_H +# define FT_P_SUBST_ALIAS_H + +# include <libft.h> +# include <stddef.h> + +# include "s_struct.h" + +size_t	p_subst_alias(char word[], t_bool reset, t_msh *msh); + +#endif diff --git a/src/s_com.c b/src/s_com.c index 84e0f35..2927a51 100644 --- a/src/s_com.c +++ b/src/s_com.c @@ -19,6 +19,7 @@  #include "p_args.h"  #include "p_lblock.h"  #include "p_lblock_next.h" +#include "p_subst_alias.h"  #include "p_subst_home.h"  #include "p_redirs.h"  #include "s_lredir.h" | 
