[svn-r8723] Purpose: Bug fix and test.

Description:  Function H5Gget_objtype_by_idx failed to handle soft link
object.  The library returned object type by calling H5G_get_type through
H5B_iterate.  But H5G_get_type only deals with objects with valid header
address which soft link doesn't have.


Solution:  In H5G_node_type, make soft link a special case by checking if
the object type is H5G_CACHED_SLINK.  Also added a test of soft and hard links
to titerate.c


Platforms tested:  eirene and copper(tested h5committest for v1.7)
This commit is contained in:
Raymond Lu
2004-06-22 16:51:41 -05:00
parent bb5ed44dd6
commit da4021c41d

View File

@@ -1448,7 +1448,16 @@ H5G_node_type(H5F_t *f, hid_t dxpl_id, void UNUSED *_lt_key, haddr_t addr,
if(bt_udata->idx >= bt_udata->num_objs && bt_udata->idx < (bt_udata->num_objs+sn->nsyms)) {
loc_idx = bt_udata->idx - bt_udata->num_objs;
bt_udata->type = H5G_get_type(&(sn->entry[loc_idx]), dxpl_id);
/* Since H5G_get_type has to use header address in table entry and the
* header address for soft link is HADDR_UNDEF, make a special case for
* soft link here.
*/
if(sn->entry[loc_idx].type == H5G_CACHED_SLINK)
bt_udata->type = H5G_LINK;
else
bt_udata->type = H5G_get_type(&(sn->entry[loc_idx]), dxpl_id);
HGOTO_DONE(H5B_ITER_STOP);
}