summaryrefslogtreecommitdiffstats
path: root/src/H5F.c
diff options
context:
space:
mode:
authorNeil Fortner <nfortne2@hdfgroup.org>2013-09-13 22:03:22 (GMT)
committerNeil Fortner <nfortne2@hdfgroup.org>2013-09-13 22:03:22 (GMT)
commita80cf34324810aa52c97586950606bbfc64b0e37 (patch)
tree18c48cc4e3226fd1c286f90ff72c3a0fc42022dd /src/H5F.c
parent309f3e7a23805c7be1fb65e00338fea831f977e7 (diff)
downloadhdf5-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.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/src/H5F.c b/src/H5F.c
index 78fe79f..676daef 100644
--- a/src/H5F.c
+++ b/src/H5F.c
@@ -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 */