diff options
Diffstat (limited to 'hl/src/H5DS.c')
-rw-r--r-- | hl/src/H5DS.c | 51 |
1 files changed, 28 insertions, 23 deletions
diff --git a/hl/src/H5DS.c b/hl/src/H5DS.c index 432a725..e9ea9cf 100644 --- a/hl/src/H5DS.c +++ b/hl/src/H5DS.c @@ -318,7 +318,7 @@ herr_t H5DSattach_scale(hid_t did, ref_j = ((hobj_ref_t *)buf[idx].p)[i]; /* get the scale id for this REF */ - if((dsid_j = H5Rdereference(did,H5R_OBJECT,&ref_j)) < 0) + if((dsid_j = H5Rdereference2(did, H5P_DEFAULT, H5R_OBJECT, &ref_j)) < 0) goto out; /* get info for DS in the parameter list */ @@ -690,7 +690,7 @@ herr_t H5DSdetach_scale(hid_t did, ref = ((hobj_ref_t *)buf[idx].p)[j]; /* get the DS id */ - if ((dsid_j = H5Rdereference(did,H5R_OBJECT,&ref)) < 0) + if ((dsid_j = H5Rdereference2(did,H5P_DEFAULT,H5R_OBJECT,&ref)) < 0) goto out; /* get info for this DS */ @@ -800,7 +800,7 @@ herr_t H5DSdetach_scale(hid_t did, ref = dsbuf[ii].ref; /* get the dataset id */ - if ((did_i = H5Rdereference(did,H5R_OBJECT,&ref)) < 0) + if ((did_i = H5Rdereference2(did,H5P_DEFAULT,H5R_OBJECT,&ref)) < 0) goto out; /* get info for this dataset */ @@ -813,10 +813,8 @@ herr_t H5DSdetach_scale(hid_t did, /* same object, reset. we want to detach only for this DIM */ if(did_oi.fileno == tmp_oi.fileno && did_oi.addr == tmp_oi.addr) { - /* if we found not the last one, copy the last one to replace - the one which is found */ - if(i < nelmts-1) - dsbuf[ii] = dsbuf[nelmts-1]; + /* copy the last one to replace the one which is found */ + dsbuf[ii] = dsbuf[nelmts-1]; nelmts--; found_dset=1; break; @@ -1050,7 +1048,7 @@ htri_t H5DSis_attached(hid_t did, ref = ((hobj_ref_t *)buf[idx].p)[i]; /* get the scale id for this REF */ - if ((dsid_j = H5Rdereference(did,H5R_OBJECT,&ref)) < 0) + if ((dsid_j = H5Rdereference2(did,H5P_DEFAULT,H5R_OBJECT,&ref)) < 0) goto out; /* get info for DS in the parameter list */ @@ -1140,7 +1138,7 @@ htri_t H5DSis_attached(hid_t did, if (ref) { /* get the dataset id */ - if ((did_i = H5Rdereference(did,H5R_OBJECT,&ref)) < 0) + if ((did_i = H5Rdereference2(did,H5P_DEFAULT,H5R_OBJECT,&ref)) < 0) goto out; /* get info for dataset in the parameter list */ @@ -1344,7 +1342,7 @@ herr_t H5DSiterate_scales(hid_t did, /* disable error reporting, the ID might refer to a deleted dataset */ H5E_BEGIN_TRY { /* get the DS id */ - if ((scale_id = H5Rdereference(did,H5R_OBJECT,&ref)) < 0) + if ((scale_id = H5Rdereference2(did,H5P_DEFAULT,H5R_OBJECT,&ref)) < 0) goto out; } H5E_END_TRY; @@ -1619,6 +1617,8 @@ out: * Comments: * * Modifications: +* JIRA HDFFV-7673: Added a check to see if the label name exists, +* if not then returns zero. July 30, 2011. MSB * *------------------------------------------------------------------------- */ @@ -1631,7 +1631,7 @@ ssize_t H5DSget_label(hid_t did, unsigned int idx, char *label, size_t size) int rank; /* rank of dataset */ char **buf = NULL; /* buffer to store in the attribute */ H5I_type_t it; /* ID type */ - size_t nbytes; + size_t nbytes = 0; size_t copy_len; int i; @@ -1687,6 +1687,7 @@ ssize_t H5DSget_label(hid_t did, unsigned int idx, char *label, size_t size) if ((aid = H5Aopen(did, DIMENSION_LABELS, H5P_DEFAULT)) < 0) goto out; + if ((tid = H5Aget_type(aid)) < 0) goto out; @@ -1700,26 +1701,30 @@ ssize_t H5DSget_label(hid_t did, unsigned int idx, char *label, size_t size) if (H5Aread(aid, tid, buf) < 0) goto out; - /* get the real string length */ - nbytes = strlen(buf[idx]); + /* do only if the label name exists for the dimension */ + if (buf[idx] != NULL) + { + /* get the real string length */ + nbytes = strlen(buf[idx]); - /* compute the string length which will fit into the user's buffer */ - copy_len = MIN(size-1, nbytes); + /* compute the string length which will fit into the user's buffer */ + copy_len = MIN(size-1, nbytes); - /* copy all/some of the name */ - if (label) - { - memcpy(label, buf[idx], copy_len); + /* copy all/some of the name */ + if (label) + { + memcpy(label, buf[idx], copy_len); + + /* terminate the string */ + label[copy_len] = '\0'; + } - /* terminate the string */ - label[copy_len] = '\0'; } - /* free all the ptr's from the H5Aread() */ for (i = 0; i < rank; i++) { if (buf[i]) - free(buf[i]); + free(buf[i]); } /* close */ |