summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJozanLeClerc <bousset.rudy@gmail.com>2020-09-12 16:33:02 +0200
committerJozanLeClerc <bousset.rudy@gmail.com>2020-09-12 16:33:02 +0200
commit949f93b57b6411b07eb12110e0db37cdf393db0c (patch)
treece90ac0b84cbdab7c3ea2c47c8397310045db386
parentFix (diff)
download42-minishell-949f93b57b6411b07eb12110e0db37cdf393db0c.tar.gz
42-minishell-949f93b57b6411b07eb12110e0db37cdf393db0c.tar.bz2
42-minishell-949f93b57b6411b07eb12110e0db37cdf393db0c.tar.xz
42-minishell-949f93b57b6411b07eb12110e0db37cdf393db0c.tar.zst
42-minishell-949f93b57b6411b07eb12110e0db37cdf393db0c.zip
Fuck
-rw-r--r--src/b_alias.c2
-rw-r--r--src/p_lblock_next.c55
-rw-r--r--src/p_lblock_next.h3
-rw-r--r--src/s_com.c7
-rw-r--r--src/s_lalias.c5
-rw-r--r--src/s_struct.h1
-rw-r--r--src/u_alias.c8
7 files changed, 63 insertions, 18 deletions
diff --git a/src/b_alias.c b/src/b_alias.c
index 8aff531..08298b3 100644
--- a/src/b_alias.c
+++ b/src/b_alias.c
@@ -50,7 +50,7 @@ static uint8_t
}
if (*ptr == C_NUL)
{
- if (u_get_alias_value(val, arg, ARG_MAX, msh) == 0)
+ if (u_get_alias_value(val, arg, ARG_MAX, msh) != 0)
{
ft_printf("alias %s='%s'", arg, val);
return (0);
diff --git a/src/p_lblock_next.c b/src/p_lblock_next.c
index 3fa0ea5..0c1c1f4 100644
--- a/src/p_lblock_next.c
+++ b/src/p_lblock_next.c
@@ -110,16 +110,30 @@ static t_bool
return (FALSE);
}
-void
- p_subst_alias(char word[], t_msh *msh)
+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);
@@ -157,15 +171,36 @@ void
ft_strlcpy(tmp,
word + locat[0],
((locat[1] - locat[0] < 253) ? (locat[1] - locat[0]) : (254)) + 1);
- if (u_get_alias_value(value, tmp, ARG_MAX, msh) != 0)
- return ;
- (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));
+ 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);
+ }
+ }
+ /* ptr = value; */
+ /* save = value; */
+ /* while (*ptr != C_NUL && ft_iswhitespace(*ptr) == FALSE) */
+ /* ptr++; */
+ /* ft_strlcpy(tmp, save, (ptr - save) + 1); */
}
+ return (0);
}
char
diff --git a/src/p_lblock_next.h b/src/p_lblock_next.h
index 030be27..4ffdfcf 100644
--- a/src/p_lblock_next.h
+++ b/src/p_lblock_next.h
@@ -13,12 +13,13 @@
#ifndef P_LCOM_NEXT_H
#define P_LCOM_NEXT_H
+#include <libft.h>
#include <stdint.h>
#include "s_struct.h"
void p_subst_vars(char word[], t_msh *msh);
-void p_subst_alias(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_subst_home(char *word[], t_msh *msh);
char **p_check_args_equals(char *words[], t_msh *msh);
diff --git a/src/s_com.c b/src/s_com.c
index a5c594a..b899555 100644
--- a/src/s_com.c
+++ b/src/s_com.c
@@ -103,6 +103,7 @@ t_com
char nword[ARG_MAX];
t_com *com;
char **words;
+ size_t ret;
if ((com = (t_com*)malloc(sizeof(t_com))) == NULL)
return (NULL);
@@ -117,7 +118,11 @@ t_com
if (p_get_redir(nword, &com) != 0)
return (NULL);
if (msh->alias != NULL)
- p_subst_alias(nword, msh);
+ {
+ ret = p_subst_alias(nword, TRUE, msh);
+ while (ret != 0)
+ ret = p_subst_alias(nword, TRUE, msh);
+ }
p_subst_vars(nword, msh);
if ((words = p_split_args(nword, com->redir)) == NULL)
return (NULL);
diff --git a/src/s_lalias.c b/src/s_lalias.c
index eeac08b..56b3985 100644
--- a/src/s_lalias.c
+++ b/src/s_lalias.c
@@ -72,7 +72,8 @@ void
t_lalias
*s_lalias_new(const char name[], const char val[])
{
- t_lalias *link;
+ t_lalias *link;
+ static size_t id = 1;
if ((link = (t_lalias*)malloc(sizeof(t_lalias))) == NULL)
{
@@ -86,6 +87,8 @@ t_lalias
{
return (NULL);
}
+ link->id = id;
link->next = NULL;
+ id += 1;
return (link);
}
diff --git a/src/s_struct.h b/src/s_struct.h
index 310c5f4..ba56e82 100644
--- a/src/s_struct.h
+++ b/src/s_struct.h
@@ -29,6 +29,7 @@ typedef struct s_lalias
{
char *name;
char *val;
+ size_t id;
struct s_lalias *next;
} t_lalias;
diff --git a/src/u_alias.c b/src/u_alias.c
index 92bd498..14ca75e 100644
--- a/src/u_alias.c
+++ b/src/u_alias.c
@@ -18,7 +18,7 @@
#include "s_lalias.h"
#include "s_struct.h"
-uint8_t
+size_t
u_get_alias_value(char str[], const char name[], size_t dstsize, t_msh *msh)
{
t_lalias *ptr;
@@ -34,13 +34,13 @@ uint8_t
}
if (ptr == NULL)
{
- return (1);
+ return (0);
}
if (str != NULL)
{
ft_strlcpy(str, ptr->val, dstsize);
}
- return (0);
+ return (ptr->id);
}
void
@@ -48,7 +48,7 @@ void
{
t_lalias *new;
- if (u_get_alias_value(NULL, name, 0, msh) == 0)
+ if (u_get_alias_value(NULL, name, 0, msh) != 0)
{
s_lalias_rebind(&msh->alias, name, value);
}