const char *
ss_attr_describe(ss_attr_t *attr, /* The attribute to be described. */
ss_pers_t *owner, /* OUT: Optional object to which attribute belongs. */
hid_t *type, /* OUT: Optional datatype of attribute data. The caller should invoke
* H5Tclose() when this is no longer needed. */
size_t *nelmts /* OUT: Optional number of elements stored by the attribute. */
)
{
SS_ENTER(ss_attr_describe, const_charP);
const char *retval=NULL;
SS_ASSERT_MEM(attr, ss_attr_t);
if (owner) *owner = SS_ATTR(attr)->owner;
if (type && (*type=ss_array_targeted(SS_ATTR_P(attr,value)))<0) SS_ERROR(FAILED);
if (nelmts && (SS_NOSIZE==(*nelmts=ss_array_nelmts(SS_ATTR_P(attr,value))))) SS_ERROR(FAILED);
if (NULL==(retval=ss_string_ptr(SS_ATTR_P(attr,name)))) SS_ERROR(FAILED);
SS_CLEANUP:
SS_LEAVE(retval);
}