From 1009b131f69ee6dbf293c106a1aaa003951f2d07 Mon Sep 17 00:00:00 2001 From: Quincey Koziol Date: Wed, 23 Jun 2004 09:03:22 -0500 Subject: [svn-r8725] Purpose: Refactor bug fix Description: Make bug fix for detecting the type of a soft link more general by registering an "isa" function for soft links. Platforms tested: FreeBSD 4.10 (sleipnir) Too minor to require h5committest --- src/H5G.c | 38 ++++++++++++++++++++++++++++++++++++++ src/H5Gnode.c | 11 +---------- 2 files changed, 39 insertions(+), 10 deletions(-) diff --git a/src/H5G.c b/src/H5G.c index 4c6fd16..181bbc9 100644 --- a/src/H5G.c +++ b/src/H5G.c @@ -172,6 +172,7 @@ static H5G_t *H5G_create(H5G_entry_t *loc, const char *name, size_t size_hint, h static H5G_t *H5G_reopen(H5G_t *grp); #endif /* NOT_YET */ static htri_t H5G_isa(H5G_entry_t *ent, hid_t dxpl_id); +static htri_t H5G_link_isa(H5G_entry_t *ent, hid_t dxpl_id); static herr_t H5G_link(H5G_entry_t *cur_loc, const char *cur_name, H5G_entry_t *new_loc, const char *new_name, H5G_link_t type, unsigned namei_flags, hid_t dxpl_id); @@ -966,6 +967,7 @@ H5G_init_interface(void) H5G_register_type(H5G_TYPE, H5T_isa, "datatype"); H5G_register_type(H5G_GROUP, H5G_isa, "group"); H5G_register_type(H5G_DATASET, H5D_isa, "dataset"); + H5G_register_type(H5G_LINK, H5G_link_isa, "link"); done: FUNC_LEAVE_NOAPI(ret_value); @@ -1819,7 +1821,43 @@ H5G_isa(H5G_entry_t *ent, hid_t dxpl_id) done: FUNC_LEAVE_NOAPI(ret_value); } + + +/*------------------------------------------------------------------------- + * Function: H5G_link_isa + * + * Purpose: Determines if an object has the requisite form for being + * a soft link. + * + * Return: Success: TRUE if the symbol table entry is of type + * H5G_LINK; FALSE otherwise. + * + * Failure: Shouldn't fail. + * + * Programmer: Quincey Koziol + * Wednesday, June 23, 2004 + * + * Modifications: + * + *------------------------------------------------------------------------- + */ +static htri_t +H5G_link_isa(H5G_entry_t *ent, hid_t UNUSED dxpl_id) +{ + htri_t ret_value; + FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5G_link_isa); + + assert(ent); + + if(ent->type == H5G_CACHED_SLINK) + ret_value=TRUE; + else + ret_value=FALSE; + + FUNC_LEAVE_NOAPI(ret_value); +} /* end H5G_link_isa() */ + /*------------------------------------------------------------------------- * Function: H5G_open diff --git a/src/H5Gnode.c b/src/H5Gnode.c index 71a1f1a..4ddc799 100644 --- a/src/H5Gnode.c +++ b/src/H5Gnode.c @@ -1630,16 +1630,7 @@ 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; - - /* 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); - + bt_udata->type = H5G_get_type(&(sn->entry[loc_idx]), dxpl_id); ret_value = H5B_ITER_STOP; } else { bt_udata->num_objs += sn->nsyms; -- cgit v0.12