to be debuged
This commit is contained in:
@@ -46,11 +46,21 @@ void add_to_tab(char ***tab, char *str)
|
|||||||
char **tmp;
|
char **tmp;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
if (!str)
|
||||||
|
return ;
|
||||||
tmp = *tab;
|
tmp = *tab;
|
||||||
i = 0;
|
i = 0;
|
||||||
while ((*tab)[i])
|
if (*tab)
|
||||||
|
{
|
||||||
|
while ((*tab) && (*tab)[i])
|
||||||
i++;
|
i++;
|
||||||
*tab = add_space_to_tab(*tab, i + 1);
|
*tab = add_space_to_tab(*tab, i + 1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*tab = malloc(sizeof(char *) * 2);
|
||||||
|
}
|
||||||
free(tmp);
|
free(tmp);
|
||||||
(*tab)[i] = ft_strdup(str);
|
(*tab)[i] = ft_strdup(str);
|
||||||
|
(*tab)[i + 1] = NULL;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,11 +40,13 @@ t_redir get_redir(t_node *node)
|
|||||||
{
|
{
|
||||||
if (!node)
|
if (!node)
|
||||||
return (_NR);
|
return (_NR);
|
||||||
if (!ft_strncmp(node->val, ">", 1))
|
else if (!ft_strncmp(node->val, ">>", 2))
|
||||||
return (_RED_R);
|
|
||||||
if (!ft_strncmp(node->val, ">>", 1))
|
|
||||||
return (_RED_DR);
|
return (_RED_DR);
|
||||||
if (!ft_strncmp(node->val, "<", 1))
|
else if (!ft_strncmp(node->val, ">", 1))
|
||||||
|
return (_RED_R);
|
||||||
|
else if (!ft_strncmp(node->val, "<<", 2))
|
||||||
|
return (_RED_DL);
|
||||||
|
else if (!ft_strncmp(node->val, "<", 1))
|
||||||
return (_RED_L);
|
return (_RED_L);
|
||||||
return (_NR);
|
return (_NR);
|
||||||
}
|
}
|
||||||
@@ -76,34 +78,64 @@ char **lltotab(t_node *lst, t_node *limiter)
|
|||||||
out[count] = NULL;
|
out[count] = NULL;
|
||||||
return (out);
|
return (out);
|
||||||
}
|
}
|
||||||
//
|
|
||||||
// void add_redir(t_redir redir, t_redir *redir_list)
|
void add_redir(t_redir redir, t_redir **redir_list)
|
||||||
// {
|
{
|
||||||
// int i;
|
int i;
|
||||||
// }
|
int j;
|
||||||
|
t_redir *tmp;
|
||||||
|
|
||||||
|
i = 0;
|
||||||
|
while ((*redir_list)[i] != _NR)
|
||||||
|
i++;
|
||||||
|
tmp = ft_calloc(i + 2, sizeof(t_redir));
|
||||||
|
j = -1;
|
||||||
|
while ((*redir_list)[++j] != _NR)
|
||||||
|
tmp[j] = (*redir_list)[j];
|
||||||
|
tmp[j++] = redir;
|
||||||
|
tmp[j] = _NR;
|
||||||
|
free(*redir_list);
|
||||||
|
*redir_list = tmp;
|
||||||
|
}
|
||||||
|
|
||||||
void create_redir(t_node *cpy, t_ast_n *self)
|
void create_redir(t_node *cpy, t_ast_n *self)
|
||||||
{
|
{
|
||||||
t_redir redir;
|
t_redir redir;
|
||||||
|
|
||||||
while (cpy)
|
while (cpy && cpy->next && get_redir(cpy) == _NR)
|
||||||
{
|
{
|
||||||
redir = get_redir(cpy);
|
redir = get_redir(cpy);
|
||||||
// add_redir(redir, self->redir);
|
add_redir(redir, &self->redir);
|
||||||
add_to_tab(&self->files, cpy->next->val);
|
add_to_tab(&self->files, cpy->next->val);
|
||||||
cpy = cpy->next;
|
cpy = cpy->next;
|
||||||
while (cpy && get_redir(cpy) == _NR)
|
while (cpy && cpy->next && get_redir(cpy) == _NR)
|
||||||
cpy = cpy->next;
|
cpy = cpy->next;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
t_node *get_cmd(t_node *lst)
|
||||||
|
{
|
||||||
|
while (lst)
|
||||||
|
{
|
||||||
|
if (get_redir(lst) != _NR && lst->next && lst->next->next && get_redir(lst->next->next) == _NR)
|
||||||
|
return (lst);
|
||||||
|
lst = lst->next;
|
||||||
|
}
|
||||||
|
return (lst);
|
||||||
|
}
|
||||||
|
|
||||||
void create_cmd(t_ast_n *self, t_node *lst)
|
void create_cmd(t_ast_n *self, t_node *lst)
|
||||||
{
|
{
|
||||||
t_node *cpy;
|
t_node *cpy;
|
||||||
|
t_node *cmd_node;
|
||||||
|
|
||||||
self->state = _CMD;
|
self->state = _CMD;
|
||||||
self->files = NULL;
|
self->files = NULL;
|
||||||
self->redir = NULL;
|
self->redir = ft_calloc(1, sizeof(t_redir));
|
||||||
|
self->redir[0] = _NR;
|
||||||
|
cmd_node = get_cmd(lst);
|
||||||
|
self->cmd = cmd_node->val;
|
||||||
|
self->args = ft_split("NOT SET", " ");
|
||||||
cpy = lst;
|
cpy = lst;
|
||||||
create_redir(cpy, self);
|
create_redir(cpy, self);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,20 +31,20 @@ const char *translate_state(t_state state)
|
|||||||
return (out);
|
return (out);
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *translate_redir(t_redir redir)
|
// const char *translate_redir(t_redir redir)
|
||||||
{
|
// {
|
||||||
const char *out;
|
// const char *out;
|
||||||
|
//
|
||||||
if (redir == _RED_L)
|
// if (redir == _RED_L)
|
||||||
out = "redir : RED_L ";
|
// out = "redir : RED_L ";
|
||||||
else if (redir == _RED_R)
|
// else if (redir == _RED_R)
|
||||||
out = "redir : RED_R ";
|
// out = "redir : RED_R ";
|
||||||
else if (redir == _RED_DR)
|
// else if (redir == _RED_DR)
|
||||||
out = "redir : _RED_DR ";
|
// out = "redir : _RED_DR ";
|
||||||
else
|
// else
|
||||||
out = "Not redirected ";
|
// out = "Not redirected ";
|
||||||
return (out);
|
// return (out);
|
||||||
}
|
// }
|
||||||
|
|
||||||
t_dio_node get_cmd_txt(t_ast_n *node)
|
t_dio_node get_cmd_txt(t_ast_n *node)
|
||||||
{
|
{
|
||||||
@@ -59,9 +59,12 @@ t_dio_node get_cmd_txt(t_ast_n *node)
|
|||||||
args = ft_tabstr(node->args);
|
args = ft_tabstr(node->args);
|
||||||
txt.args = ft_sprintf("%s%s%s", NL, args, NL);
|
txt.args = ft_sprintf("%s%s%s", NL, args, NL);
|
||||||
free(args);
|
free(args);
|
||||||
txt.redir = translate_redir(node->redir);
|
// txt.redir = translate_redir(node->redir);
|
||||||
txt.inf = ft_sprintf("Infile : %s%s", node->infile, NL);
|
// txt.inf = ft_sprintf("Infile : %s%s", node->infile, NL);
|
||||||
txt.outf = ft_sprintf("Outfile : %s", node->outfile);
|
// txt.outf = ft_sprintf("Outfile : %s", node->outfile);
|
||||||
|
txt.redir = "";
|
||||||
|
txt.inf = ft_sprintf("Infile : UNCHECKED");
|
||||||
|
txt.outf = ft_sprintf("Outfile : UNCHECKED");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user