Я не понимаю следующее между erl_eterm а также erl_interface.h
В erl_eterm следующие описаны как:
ETERM *ERL_PID_NODE(t)
ETERM *ERL_PID_NODE_UTF8(t)
ETERM *ERL_PORT_NODE(t)
ETERM *ERL_PORT_NODE_UTF8(t)
Где как в erl_interface.h они определены как
#define ERL_PID_NODE(x) erl_atom_ptr_latin1((Erl_Atom_data*) &(x)->uval.pidval.node)
#define ERL_PID_NODE_UTF8(x) erl_atom_ptr_utf8((Erl_Atom_data*) &(x)->uval.pidval.node)
#define ERL_PORT_NODE(x) erl_atom_ptr_latin1((Erl_Atom_data*) &(x)->uval.portval.node)
#define ERL_PORT_NODE_UTF8(x) erl_atom_ptr_utf8((Erl_Atom_data*) &(x)->uval.portval.node)
#define ERL_REF_NODE(x) erl_atom_ptr_latin1((Erl_Atom_data*) &(x)->uval.refval.node)
Если ERL_ATOM_PTR / ERL_ATOM_PTR_UTF8 необходимо использовать вместе с ERL_ATOM_SIZE / ERL_ATOM_SIZE_UTF8 для создания завершающей строки c NULL (char *), то же самое должно быть верно для макросов ERL _ * _ NODE *, поскольку все они определены одинаково. И ни один из них не возвращает ETERM *, как определено в документе.
Что мне здесь не хватает?
Задача ещё не решена.
Других решений пока нет …