summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--hl/src/H5DS.c61
1 files changed, 32 insertions, 29 deletions
diff --git a/hl/src/H5DS.c b/hl/src/H5DS.c
index c129e43..bd4c196 100644
--- a/hl/src/H5DS.c
+++ b/hl/src/H5DS.c
@@ -1914,9 +1914,9 @@ htri_t H5DSis_scale(hid_t did)
hid_t tid = -1; /* attribute type ID */
hid_t aid = -1; /* attribute ID */
herr_t attr_class; /* has the "CLASS" attribute */
- htri_t is_ds = 0; /* set to "not a dimension scale" */
+ htri_t is_ds = -1; /* set to "not a dimension scale" */
H5I_type_t it; /* type of identifier */
- char *buf; /* buffer to read name of attribute */
+ char *buf = NULL; /* buffer to read name of attribute */
size_t string_size; /* size of storage for the attribute */
H5T_class_t type_class;
H5T_str_t strpad;
@@ -1927,18 +1927,19 @@ htri_t H5DSis_scale(hid_t did)
*/
/* get ID type */
if ((it = H5Iget_type(did)) < 0)
- return FAIL;
+ goto out;
if(H5I_DATASET != it)
- return FAIL;
+ goto out;
/* try to find the attribute "CLASS" on the dataset */
if((attr_class = H5LT_find_attribute(did, "CLASS")) < 0)
- return FAIL;
-
- if(attr_class == 0)
- return is_ds;
+ goto out;
+ if(attr_class == 0) {
+ is_ds = 0;
+ goto out;
+ }
else
{
if((aid = H5Aopen(did, "CLASS", H5P_DEFAULT)) < 0)
@@ -1951,21 +1952,27 @@ htri_t H5DSis_scale(hid_t did)
if not, then it is not dimension scale */
if((type_class = H5Tget_class(tid)) < 0)
goto out;
- if(H5T_STRING != type_class)
- goto out_success;
-
+ if(H5T_STRING != type_class) {
+ is_ds = 0;
+ goto out;
+ }
/* check to make sure string is null-terminated;
if not, then it is not dimension scale */
if((strpad = H5Tget_strpad(tid)) < 0 )
goto out;
- if(H5T_STR_NULLTERM != strpad)
- goto out_success;
+ if(H5T_STR_NULLTERM != strpad) {
+ is_ds = 0;
+ goto out;
+ }
- /* get string size should be 16 to hold "DIMENSION_SCALE" string */
+ /* According to Spec string is ASCII and its size should be 16 to hold
+ "DIMENSION_SCALE" string */
if((string_size = H5Tget_size(tid)) == 0)
- return FAIL;
- if(string_size != 16)
- goto out_success;
+ goto out;
+ if(string_size != 16) {
+ is_ds = 0;
+ goto out;
+ }
buf = (char*)HDmalloc((size_t)string_size * sizeof(char));
if(buf == NULL)
@@ -1987,20 +1994,16 @@ htri_t H5DSis_scale(hid_t did)
if (H5Aclose(aid) < 0)
goto out;
-
- goto out_success;
-
}
-out_success:
- return is_ds;
- /* error zone */
out:
- H5E_BEGIN_TRY {
- H5Aclose(aid);
- H5Tclose(tid);
- } H5E_END_TRY;
- return FAIL;
-
+ if(is_ds < 0) {
+ HDfree(buf);
+ H5E_BEGIN_TRY {
+ H5Aclose(aid);
+ H5Tclose(tid);
+ } H5E_END_TRY;
+ }
+ return is_ds;
}
/*-------------------------------------------------------------------------