diff --git a/asdf b/asdf deleted file mode 100644 index e69de29..0000000 diff --git a/include/parsing.h b/include/parsing.h index fb98baa..62c5df4 100644 --- a/include/parsing.h +++ b/include/parsing.h @@ -6,7 +6,7 @@ /* By: adjoly +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/04/25 12:20:26 by adjoly #+# #+# */ -/* Updated: 2024/07/10 14:13:41 by adjoly ### ########.fr */ +/* Updated: 2024/07/13 16:35:57 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ @@ -126,6 +126,7 @@ char *search_for_next_quote(char *s, t_quote quote_type); */ char *env_var_replace(char *readline, t_env *env); size_t get_size_with_env(char *readline, t_env *env); +size_t strlen_till_notalnum(char *s); /* * ONLY FOR DEBUG TO BE REMOVED diff --git a/src/main.c b/src/main.c index c52cb12..161fb3f 100644 --- a/src/main.c +++ b/src/main.c @@ -6,7 +6,7 @@ /* By: mmoussou +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/06/05 21:14:04 by adjoly #+# #+# */ -/* Updated: 2024/07/13 14:14:20 by adjoly ### ########.fr */ +/* Updated: 2024/07/13 17:21:59 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ #include #include #include "parsing.h" +#include "minishell.h" #include "env.h" void __cpy_dollar(char *tmp, size_t dollar_size, t_env *env, char **rl_dlrd) @@ -39,11 +40,27 @@ size_t strlen_till_notalnum(char *s) return (tmp - s); } +size_t __add_dollar(t_env *env, char **rl_dollared, char *tmp) +{ + size_t dollar_size; + + tmp++; + if ((*tmp) == '?') + { + ft_strlcat(*rl_dollared, ft_itoa(get_exit_code(-1)), \ + ft_strlen(ft_itoa(get_exit_code(-1))) \ + + ft_strlen(*rl_dollared) + 1); + return (1); + } + dollar_size = strlen_till_notalnum(tmp); + __cpy_dollar(tmp, dollar_size, env, rl_dollared); + return (dollar_size); +} + char *env_var_replace(char *readline, t_env *env) { char *tmp; char *rl_dollared; - size_t dollar_size; rl_dollared = ft_calloc(get_size_with_env(readline, env) + 1, sizeof(char)); if (rl_dollared == NULL) @@ -52,17 +69,7 @@ char *env_var_replace(char *readline, t_env *env) while (*tmp) { if (*tmp == '$' && is_inquote(readline, tmp - readline) != SINGLE) - { - tmp++; - if ((*tmp) == '?') - { - tmp++; - continue ; - } - dollar_size = strlen_till_notalnum(tmp); - __cpy_dollar(tmp, dollar_size, env, &rl_dollared); - tmp += dollar_size; - } + tmp += __add_dollar(env, &rl_dollared, tmp) + 1; else { ft_strlcat(rl_dollared, tmp, ft_strlen(rl_dollared) + 2); diff --git a/src/parsing/env_var/get_size_with_env.c b/src/parsing/env_var/get_size_with_env.c index 5e146b2..3c94b5b 100644 --- a/src/parsing/env_var/get_size_with_env.c +++ b/src/parsing/env_var/get_size_with_env.c @@ -6,7 +6,7 @@ /* By: adjoly +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/06/06 15:01:19 by adjoly #+# #+# */ -/* Updated: 2024/07/09 15:09:44 by adjoly ### ########.fr */ +/* Updated: 2024/07/13 17:03:06 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ @@ -15,26 +15,43 @@ #include "parsing.h" #include "libft.h" +#include + +size_t __add_sizeof_dollar(size_t size, char **tmp, t_env *env, char *readline) +{ + char *dollar; + + if (**tmp == '$' && **tmp == '?' && \ + is_inquote(*tmp, *tmp - readline) != SINGLE && \ + is_inquote(*tmp, *tmp - readline) != NOT_CLOSED) + { + *tmp += 2; + size++; + } + else if (**tmp == '$' && is_inquote(*tmp, *tmp - readline) != SINGLE && \ + is_inquote(*tmp, *tmp - readline) != NOT_CLOSED) + { + (*tmp)++; + size -= strlen_till_notalnum(*tmp); + dollar = env_getn_value(*tmp, env, strlen_till_notalnum(*tmp)); + if (!dollar) + return (size); + size += ft_strlen(dollar); + free(dollar); + } + return (size); +} + size_t get_size_with_env(char *readline, t_env *env) { size_t size; char *tmp; - char *dollar; tmp = readline; size = ft_strlen(readline); while (*tmp) { - if (*tmp == '$' && is_inquote(tmp, tmp - readline) != SINGLE && \ - is_inquote(tmp, tmp - readline) != NOT_CLOSED) - { - tmp++; - size -= strlen_till_char(tmp, ' '); - dollar = env_getn_value(tmp, env, strlen_till_char(tmp, ' ')); - if (!dollar) - continue ; - size += ft_strlen(dollar); - } + size = __add_sizeof_dollar(size, &tmp, env, readline); tmp++; } return (size + 1);