#include static enum bshell_status collect_children( struct bshell_ast_node *node, struct bshell_ast_iterator *it) { struct bshell_redirection_ast_node *redirection = (struct bshell_redirection_ast_node *)node; if (redirection->n_out_path_expr) { bshell_ast_iterator_enqueue(it, redirection->n_out_path_expr); } return BSHELL_SUCCESS; } static void to_string(const struct bshell_ast_node *node, fx_bstr *out) { struct bshell_redirection_ast_node *redirection = (struct bshell_redirection_ast_node *)node; fx_bstr_write_fmt(out, NULL, "&%u", redirection->n_in); if (redirection->n_append) { fx_bstr_write_fmt(out, NULL, " >>"); } else { fx_bstr_write_fmt(out, NULL, " >"); } if (redirection->n_out_is_fd) { fx_bstr_write_fmt(out, NULL, " &"); } else { fx_bstr_write_fmt(out, NULL, " "); } if (redirection->n_out_is_expr) { fx_bstr_write_fmt(out, NULL, ""); } else if (redirection->n_out_path) { fx_bstr_write_fmt(out, NULL, "'%s'", redirection->n_out_path); } else { fx_bstr_write_fmt(out, NULL, "%u", redirection->n_out); } } struct bshell_ast_node_definition redirection_bshell_ast_node = { .def_id = BSHELL_AST_REDIRECTION, .def_node_size = sizeof(struct bshell_redirection_ast_node), .def_collect_children = collect_children, .def_to_string = to_string, };