diff options
author | Neil Fortner <nfortne2@hdfgroup.org> | 2009-03-23 18:51:29 (GMT) |
---|---|---|
committer | Neil Fortner <nfortne2@hdfgroup.org> | 2009-03-23 18:51:29 (GMT) |
commit | 849d015bbd0e12c8a920c3367bd67515842790bf (patch) | |
tree | 5e041cef4b5b9e932f6ff1101c42efadf88f8b1d /src/H5G.c | |
parent | 6f342514df3dbf035f5401783b9322f6deb0c87a (diff) | |
download | hdf5-849d015bbd0e12c8a920c3367bd67515842790bf.zip hdf5-849d015bbd0e12c8a920c3367bd67515842790bf.tar.gz hdf5-849d015bbd0e12c8a920c3367bd67515842790bf.tar.bz2 |
[svn-r16594] 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/H5G.c')
-rw-r--r-- | src/H5G.c | 18 |
1 files changed, 18 insertions, 0 deletions
@@ -896,6 +896,24 @@ H5G_mkroot(H5F_t *f, hid_t dxpl_id, H5G_loc_t *loc) */ if(H5O_open(loc->oloc) < 0) HGOTO_ERROR(H5E_SYM, H5E_CANTOPENOBJ, FAIL, "unable to open root group") + +#ifndef H5_STRICT_FORMAT_CHECKS + /* If symbol table information is cached, check if we should replace the + * symbol table message with the cached symbol table information */ + if((H5F_INTENT(f) & H5F_ACC_RDWR) && f->shared->root_ent + && (f->shared->root_ent->type == H5G_CACHED_STAB)) { + H5O_stab_t cached_stab; + + /* Retrieve the cached symbol table information */ + cached_stab.btree_addr = f->shared->root_ent->cache.stab.btree_addr; + cached_stab.heap_addr = f->shared->root_ent->cache.stab.heap_addr; + + /* Check if the symbol table message is valid, and replace with the + * cached symbol table if necessary */ + if(H5G_stab_valid(loc->oloc, dxpl_id, &cached_stab) < 0) + HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "unable to verify symbol table") + } /* end if */ +#endif /* H5_STRICT_FORMAT_CHECKS */ } /* end else */ /* Create the path names for the root group's entry */ |