int
saf_describe_algebraic(SAF_ParMode pmode,
SAF_Algebraic *alg, /* Algebraic to describe */
char **name, /* If non-null, on return points to malloc'd algebraic name if any */
char **url, /* If non-null, on return points to malloc'd URL if any */
hbool_t *indirect /* If non-null, on return points to non-zero if type is indirect */
)
{
SAF_ENTER(saf_describe_algebraic, SAF_PRECONDITION_ERROR);
if (!_saf_is_participating_proc(pmode)) SAF_RETURN(-1);
SAF_REQUIRE(SS_ALGEBRAIC(alg), SAF_LOW_CHK_COST, SAF_PRECONDITION_ERROR,
_saf_errmsg("ALG must be a valid algebraic handle"));
_saf_setupReturned_string(name, ss_string_ptr(SS_ALGEBRAIC_P(alg,name)));
_saf_setupReturned_string(url, ss_string_ptr(SS_ALGEBRAIC_P(alg,url)));
if (indirect) *indirect = SS_ALGEBRAIC(alg)->indirect;
SAF_LEAVE(SAF_SUCCESS);
}