diff options
author | Neil Fortner <nfortne2@hdfgroup.org> | 2009-03-23 19:14:55 (GMT) |
---|---|---|
committer | Neil Fortner <nfortne2@hdfgroup.org> | 2009-03-23 19:14:55 (GMT) |
commit | 1598893d1403ff264bff1df49f647f3054b6f3f8 (patch) | |
tree | fa11ad6ac997d90955249790c768944ad63f0104 /src/H5B.c | |
parent | 1cc1da51338ec4ce20f229c315b3943ff6a35070 (diff) | |
download | hdf5-1598893d1403ff264bff1df49f647f3054b6f3f8.zip hdf5-1598893d1403ff264bff1df49f647f3054b6f3f8.tar.gz hdf5-1598893d1403ff264bff1df49f647f3054b6f3f8.tar.bz2 |
[svn-r16595] Purpose: fix bug 1189
Description:
Some files apparently exist in the wild which have corrupt symbol table messages
on the root group. These files can be opened by 1.6 (which uses the cached
information in the superblock) but not by 1.8. This patch fixes 1.8 and 1.9 so
they can now open these files, and will correct them if necessary. Also fix
some potential (rare) problems with array datatype versions.
Tested: jam (parallel; h5committest not working on linew or smirom)
Diffstat (limited to 'src/H5B.c')
-rw-r--r-- | src/H5B.c | 44 |
1 files changed, 44 insertions, 0 deletions
@@ -2057,3 +2057,47 @@ done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5B_get_info() */ +#ifndef H5_STRICT_FORMAT_CHECKS + +/*------------------------------------------------------------------------- + * Function: H5B_valid + * + * Purpose: Attempt to load a b-tree node. + * + * Return: Non-negative on success/Negative on failure + * + * Programmer: Neil Fortner + * March 17, 2009 + * + *------------------------------------------------------------------------- + */ +htri_t +H5B_valid(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t addr) +{ + H5B_t *bt; /* The btree */ + htri_t ret_value = SUCCEED; /* Return value */ + + FUNC_ENTER_NOAPI(H5B_valid, FAIL) + + /* + * Check arguments. + */ + HDassert(f); + HDassert(type); + + if(!H5F_addr_defined(addr)) + HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "address is undefined") + + /* Protect the node */ + if(NULL == (bt = (H5B_t *)H5AC_protect(f, dxpl_id, H5AC_BT, addr, type, NULL, H5AC_READ))) + HGOTO_ERROR(H5E_BTREE, H5E_CANTLOAD, FAIL, "unable to load B-tree node") + + /* Release the node */ + if(H5AC_unprotect(f, dxpl_id, H5AC_BT, addr, bt, H5AC__NO_FLAGS_SET) < 0) + HGOTO_ERROR(H5E_BTREE, H5E_PROTECT, FAIL, "unable to release B-tree node") + +done: + FUNC_LEAVE_NOAPI(ret_value) +} /* end H5B_valid() */ +#endif /* H5_STRICT_FORMAT_CHECKS */ + |