diff options
author | Neil Fortner <nfortne2@hdfgroup.org> | 2013-09-13 22:03:22 (GMT) |
---|---|---|
committer | Neil Fortner <nfortne2@hdfgroup.org> | 2013-09-13 22:03:22 (GMT) |
commit | a80cf34324810aa52c97586950606bbfc64b0e37 (patch) | |
tree | 18c48cc4e3226fd1c286f90ff72c3a0fc42022dd /src/H5F.c | |
parent | 309f3e7a23805c7be1fb65e00338fea831f977e7 (diff) | |
download | hdf5-a80cf34324810aa52c97586950606bbfc64b0e37.zip hdf5-a80cf34324810aa52c97586950606bbfc64b0e37.tar.gz hdf5-a80cf34324810aa52c97586950606bbfc64b0e37.tar.bz2 |
[svn-r24140] Purpose: Remove problematic abandonment of error stack
Description:
H5Fis_hdf5 uses H5F_locate_signature to check if the file is hdf5. If it does
not locate the signature, H5F_locate_signature would issue an error and return
HADDR_UNDEF. H5Fis_hdf5 does not consider it an error if the signature is not
found, so it does not issue an error or clear the stack. The filled stack could
then cause issues later on.
Changed H5F_locate_signature to return herr_t, not issue an error if the
signature is not found, and added a parameter for a pointer to the signature
address that the function fills in.
Tested: jam, koala, ostrich (h5committest)
Diffstat (limited to 'src/H5F.c')
-rw-r--r-- | src/H5F.c | 13 |
1 files changed, 8 insertions, 5 deletions
@@ -825,22 +825,25 @@ done: htri_t H5Fis_hdf5(const char *name) { - H5FD_t *file = NULL; /* Low-level file struct */ - htri_t ret_value; /* Return value */ + H5FD_t *file = NULL; /* Low-level file struct */ + haddr_t sig_addr; /* Address of hdf5 file signature */ + htri_t ret_value; /* Return value */ FUNC_ENTER_API(FAIL) H5TRACE1("t", "*s", name); /* Check args and all the boring stuff. */ if(!name || !*name) - HGOTO_ERROR(H5E_ARGS, H5E_BADRANGE, FAIL, "no file name specified") + HGOTO_ERROR(H5E_ARGS, H5E_BADRANGE, FAIL, "no file name specified") /* Open the file at the virtual file layer */ if(NULL == (file = H5FD_open(name, H5F_ACC_RDONLY, H5P_FILE_ACCESS_DEFAULT, HADDR_UNDEF))) - HGOTO_ERROR(H5E_IO, H5E_CANTINIT, FAIL, "unable to open file") + HGOTO_ERROR(H5E_IO, H5E_CANTINIT, FAIL, "unable to open file") /* The file is an hdf5 file if the hdf5 file signature can be found */ - ret_value = (HADDR_UNDEF != H5F_locate_signature(file, H5AC_ind_dxpl_id)); + if(H5F_locate_signature(file, H5AC_ind_dxpl_id, &sig_addr) < 0) + HGOTO_ERROR(H5E_FILE, H5E_NOTHDF5, FAIL, "unable to locate file signature") + ret_value = (HADDR_UNDEF != sig_addr); done: /* Close the file */ |