1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
 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);
 }