to be debuged

This commit is contained in:
gazhonsepaskwa
2025-02-04 12:38:42 +01:00
parent a42eaf579a
commit eafa6c47b6
3 changed files with 78 additions and 33 deletions

View File

@@ -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;
} }

View File

@@ -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);
} }

View File

@@ -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&#10;"; // out = "redir : RED_L&#10;";
else if (redir == _RED_R) // else if (redir == _RED_R)
out = "redir : RED_R&#10;"; // out = "redir : RED_R&#10;";
else if (redir == _RED_DR) // else if (redir == _RED_DR)
out = "redir : _RED_DR &#10;"; // out = "redir : _RED_DR &#10;";
else // else
out = "Not redirected &#10;"; // out = "Not redirected &#10;";
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
{ {