/* By: ljiriste <ljiriste@student.42prague.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/07/21 08:57:54 by ljiriste #+# #+# */
-/* Updated: 2024/07/22 22:11:44 by ljiriste ### ########.fr */
+/* Updated: 2024/07/22 22:29:04 by ljiriste ### ########.fr */
/* */
/* ************************************************************************** */
return ;
}
-int add_assignment(t_vec *assignments, const char *assignment)
+int add_word(t_vec *exp_str, const char *word, const t_execution_env *env);
+
+void unquote_field(char *field);
+
+int add_assignment(t_vec *assignments, const char *assignment, const t_execution_env *env)
{
+ t_vec advanced_copy;
char *copy;
- copy = ft_strdup(assignment);
- if (!copy)
+ if (ft_vec_init(&advanced_copy, sizeof(char)) != success)
+ return (1);
+ if (add_word(&advanced_copy, assignment, env))
return (1);
+ copy = advanced_copy.vec;
+ unquote_field(copy);
clear_old(assignments, copy);
if (ft_vec_append(assignments, ©) == success)
return (0);
+ free(copy);
return (1);
}
-int save_assignments_prefix(t_vec *assignments, t_parse_tree_node *prefix)
+int save_assignments_prefix(t_vec *assignments, t_parse_tree_node *prefix, const t_execution_env *env)
{
size_t i;
t_parse_tree_node *subnode;
subnode = ft_vec_access(&prefix->children, i);
if (is_token_type(subnode, "ASSIGNMENT_WORD"))
{
- if (add_assignment(assignments, subnode->token.str))
+ if (add_assignment(assignments, subnode->token.str, env))
return (1);
}
else if (is_token_type(subnode, "cmd_prefix"))
- if (save_assignments_prefix(assignments, subnode))
+ if (save_assignments_prefix(assignments, subnode, env))
return (1);
++i;
}
return (0);
}
-int save_assignments(t_vec *assignments, t_parse_tree_node *simple_command)
+int save_assignments(t_vec *assignments, t_parse_tree_node *simple_command, const t_execution_env *env)
{
t_parse_tree_node *subnode;
return (1);
subnode = ft_vec_access(&simple_command->children, 0);
if (is_token_type(subnode, "cmd_prefix"))
- return (save_assignments_prefix(assignments, subnode));
+ return (save_assignments_prefix(assignments, subnode, env));
return (0);
}
int res;
res = save_redirections(&redirections, simple_command, env);
- res = res || save_assignments(&assignments, simple_command);
+ res = res || save_assignments(&assignments, simple_command, env);
if (!res)
fields = expand(simple_command, env);
if (!fields || res)