summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
Diffstat (limited to 'tools')
-rw-r--r--tools/h5repack/h5repack.c92
-rw-r--r--tools/lib/h5diff_attr.c216
2 files changed, 135 insertions, 173 deletions
diff --git a/tools/h5repack/h5repack.c b/tools/h5repack/h5repack.c
index 4a1f4d7..6672b68 100644
--- a/tools/h5repack/h5repack.c
+++ b/tools/h5repack/h5repack.c
@@ -404,7 +404,7 @@ int copy_attr(hid_t loc_in,
hid_t ftype_id=-1; /* file type ID */
hid_t wtype_id=-1; /* read/write type ID */
size_t msize; /* size of type */
- void *buf=NULL; /* data buffer */
+ void *buf = NULL; /* data buffer */
hsize_t nelmts; /* number of elements in dataset */
int rank; /* rank of dataset */
htri_t is_named; /* Whether the datatype is named */
@@ -421,28 +421,23 @@ int copy_attr(hid_t loc_in,
* copy all attributes
*-------------------------------------------------------------------------
*/
-
- for ( u = 0; u < (unsigned)oinfo.num_attrs; u++)
- {
- buf=NULL;
-
+ for(u = 0; u < (unsigned)oinfo.num_attrs; u++) {
/* open attribute */
if((attr_id = H5Aopen_by_idx(loc_in, ".", H5_INDEX_CRT_ORDER, H5_ITER_INC, (hsize_t)u, H5P_DEFAULT, H5P_DEFAULT)) < 0)
goto error;
/* get name */
- if (H5Aget_name( attr_id, (size_t)255, name ) < 0)
+ if(H5Aget_name(attr_id, (size_t)255, name) < 0)
goto error;
/* get the file datatype */
- if ((ftype_id = H5Aget_type( attr_id )) < 0 )
+ if((ftype_id = H5Aget_type(attr_id)) < 0 )
goto error;
/* Check if the datatype is committed */
if((is_named = H5Tcommitted(ftype_id)) < 0)
goto error;
- if(is_named)
- {
+ if(is_named && travt) {
hid_t fidout;
/* Create out file id */
@@ -460,29 +455,26 @@ int copy_attr(hid_t loc_in,
if(H5Fclose(fidout) < 0)
goto error;
} /* end if */
+ else {
+ if(options->use_native == 1)
+ wtype_id = h5tools_get_native_type(ftype_id);
+ else
+ wtype_id = H5Tcopy(ftype_id);
+ } /* end else */
/* get the dataspace handle */
- if ((space_id = H5Aget_space( attr_id )) < 0 )
+ if((space_id = H5Aget_space(attr_id)) < 0)
goto error;
/* get dimensions */
- if ( (rank = H5Sget_simple_extent_dims(space_id, dims, NULL)) < 0 )
+ if((rank = H5Sget_simple_extent_dims(space_id, dims, NULL)) < 0)
goto error;
- nelmts=1;
- for (j=0; j<rank; j++)
- nelmts*=dims[j];
+ nelmts = 1;
+ for(j = 0; j < rank; j++)
+ nelmts *= dims[j];
- /* wtype_id will have already been set if using a named dtype */
- if(!is_named)
- {
- if (options->use_native==1)
- wtype_id = h5tools_get_native_type(ftype_id);
- else
- wtype_id = H5Tcopy(ftype_id);
- } /* end if */
-
- if ((msize=H5Tget_size(wtype_id))==0)
+ if((msize = H5Tget_size(wtype_id)) == 0)
goto error;
/*-------------------------------------------------------------------------
@@ -493,23 +485,20 @@ int copy_attr(hid_t loc_in,
*-------------------------------------------------------------------------
*/
- if (H5T_REFERENCE==H5Tget_class(wtype_id))
- {
+ if(H5T_REFERENCE == H5Tget_class(wtype_id)) {
;
}
- else
- {
+ else {
/*-------------------------------------------------------------------------
* read to memory
*-------------------------------------------------------------------------
*/
buf = (void *)HDmalloc((size_t)(nelmts * msize));
- if(buf == NULL)
- {
+ if(buf == NULL) {
error_msg("h5repack", "cannot read into memory\n" );
goto error;
- }
+ } /* end if */
if(H5Aread(attr_id, wtype_id, buf) < 0)
goto error;
@@ -527,10 +516,12 @@ int copy_attr(hid_t loc_in,
if(H5Aclose(attr_out) < 0)
goto error;
-
- if(buf)
- free(buf);
-
+ /* Check if we have VL data in the attribute's datatype that must
+ * be reclaimed */
+ if(TRUE == H5Tdetect_class(wtype_id, H5T_VLEN))
+ H5Dvlen_reclaim(wtype_id, space_id, H5P_DEFAULT, buf);
+ HDfree(buf);
+ buf = NULL;
} /*H5T_REFERENCE*/
@@ -542,28 +533,39 @@ int copy_attr(hid_t loc_in,
*-------------------------------------------------------------------------
*/
- if (H5Tclose(ftype_id) < 0) goto error;
- if (H5Tclose(wtype_id) < 0) goto error;
- if (H5Sclose(space_id) < 0) goto error;
- if (H5Aclose(attr_id) < 0) goto error;
-
+ if(H5Tclose(ftype_id) < 0)
+ goto error;
+ if(H5Tclose(wtype_id) < 0)
+ goto error;
+ if(H5Sclose(space_id) < 0)
+ goto error;
+ if(H5Aclose(attr_id) < 0)
+ goto error;
} /* u */
-
return 0;
error:
H5E_BEGIN_TRY {
+ if(buf) {
+ /* Check if we have VL data in the attribute's datatype that must
+ * be reclaimed */
+ if(TRUE == H5Tdetect_class(wtype_id, H5T_VLEN))
+ H5Dvlen_reclaim(wtype_id, space_id, H5P_DEFAULT, buf);
+
+ /* Free buf */
+ free(buf);
+ } /* end if */
+
H5Tclose(ftype_id);
H5Tclose(wtype_id);
H5Sclose(space_id);
H5Aclose(attr_id);
H5Aclose(attr_out);
- if (buf)
- free(buf);
} H5E_END_TRY;
+
return -1;
-}
+} /* end copy_attr() */
/*-------------------------------------------------------------------------
* Function: check_options
diff --git a/tools/lib/h5diff_attr.c b/tools/lib/h5diff_attr.c
index 2cf6539..ad6f45b 100644
--- a/tools/lib/h5diff_attr.c
+++ b/tools/lib/h5diff_attr.c
@@ -79,8 +79,7 @@ hsize_t diff_attr(hid_t loc1_id,
if(oinfo1.num_attrs != oinfo2.num_attrs)
return 1;
- for( u = 0; u < (unsigned)oinfo1.num_attrs; u++)
- {
+ for(u = 0; u < (unsigned)oinfo1.num_attrs; u++) {
/* reset buffers for every attribute, we might goto out and call free */
buf1 = NULL;
buf2 = NULL;
@@ -104,29 +103,29 @@ hsize_t diff_attr(hid_t loc1_id,
goto error;
/* get the datatypes */
- if ((ftype1_id = H5Aget_type(attr1_id)) < 0)
+ if((ftype1_id = H5Aget_type(attr1_id)) < 0)
goto error;
- if ((ftype2_id = H5Aget_type(attr2_id)) < 0)
+ if((ftype2_id = H5Aget_type(attr2_id)) < 0)
goto error;
- if ((mtype1_id = h5tools_get_native_type(ftype1_id))<0)
+ if((mtype1_id = h5tools_get_native_type(ftype1_id))<0)
goto error;
- if ((mtype2_id = h5tools_get_native_type(ftype2_id))<0)
+ if((mtype2_id = h5tools_get_native_type(ftype2_id))<0)
goto error;
- if ((msize1 = H5Tget_size(mtype1_id))==0)
+ if((msize1 = H5Tget_size(mtype1_id))==0)
goto error;
- if ((msize2 = H5Tget_size(mtype2_id))==0)
+ if((msize2 = H5Tget_size(mtype2_id))==0)
goto error;
/* get the dataspace */
- if ((space1_id = H5Aget_space(attr1_id)) < 0)
+ if((space1_id = H5Aget_space(attr1_id)) < 0)
goto error;
- if ((space2_id = H5Aget_space(attr2_id)) < 0)
+ if((space2_id = H5Aget_space(attr2_id)) < 0)
goto error;
/* get dimensions */
- if ( (rank1 = H5Sget_simple_extent_dims(space1_id, dims1, NULL)) < 0 )
+ if((rank1 = H5Sget_simple_extent_dims(space1_id, dims1, NULL)) < 0)
goto error;
- if ( (rank2 = H5Sget_simple_extent_dims(space2_id, dims2, NULL)) < 0 )
+ if((rank2 = H5Sget_simple_extent_dims(space2_id, dims2, NULL)) < 0)
goto error;
@@ -135,43 +134,28 @@ hsize_t diff_attr(hid_t loc1_id,
*----------------------------------------------------------------------
*/
- if ( msize1 != msize2
- ||
- diff_can_type(ftype1_id,
- ftype2_id,
- rank1,
- rank2,
- dims1,
- dims2,
- NULL,
- NULL,
- name1,
- name2,
- options,
- 0)!=1)
+ if(msize1 != msize2 ||
+ diff_can_type(ftype1_id, ftype2_id, rank1, rank2, dims1,
+ dims2, NULL, NULL, name1, name2, options, 0) != 1)
{
-
-
- if (H5Tclose(ftype1_id)<0)
+ if(H5Tclose(ftype1_id) < 0)
goto error;
- if (H5Tclose(ftype2_id)<0)
+ if(H5Tclose(ftype2_id) < 0)
goto error;
- if (H5Sclose(space1_id)<0)
+ if(H5Sclose(space1_id) < 0)
goto error;
- if (H5Sclose(space2_id)<0)
+ if(H5Sclose(space2_id) < 0)
goto error;
- if (H5Aclose(attr1_id)<0)
+ if(H5Aclose(attr1_id) < 0)
goto error;
- if (H5Aclose(attr2_id)<0)
+ if(H5Aclose(attr2_id) < 0)
goto error;
- if (H5Tclose(mtype1_id)<0)
+ if(H5Tclose(mtype1_id) < 0)
goto error;
- if (H5Tclose(mtype2_id)<0)
+ if(H5Tclose(mtype2_id) < 0)
goto error;
continue;
-
-
}
@@ -179,19 +163,19 @@ hsize_t diff_attr(hid_t loc1_id,
* read
*----------------------------------------------------------------------
*/
- nelmts1=1;
- for (j=0; j<rank1; j++)
- nelmts1*=dims1[j];
+ nelmts1 = 1;
+ for(j = 0; j < rank1; j++)
+ nelmts1 *= dims1[j];
- buf1=(void *) HDmalloc((unsigned)(nelmts1*msize1));
- buf2=(void *) HDmalloc((unsigned)(nelmts1*msize2));
- if ( buf1==NULL || buf2==NULL){
+ buf1 = (void *)HDmalloc((unsigned)(nelmts1 * msize1));
+ buf2 = (void *)HDmalloc((unsigned)(nelmts1 * msize2));
+ if(buf1 == NULL || buf2 == NULL) {
parallel_print( "cannot read into memory\n" );
goto error;
}
- if (H5Aread(attr1_id,mtype1_id,buf1)<0)
+ if(H5Aread(attr1_id,mtype1_id,buf1) < 0)
goto error;
- if (H5Aread(attr2_id,mtype2_id,buf2)<0)
+ if(H5Aread(attr2_id,mtype2_id,buf2) < 0)
goto error;
/* format output string */
@@ -205,63 +189,29 @@ hsize_t diff_attr(hid_t loc1_id,
/* always print name */
/* verbose (-v) and report (-r) mode */
- if(options->m_verbose || options->m_report)
- {
- do_print_objname ("attribute", np1, np2);
- nfound = diff_array(buf1,
- buf2,
- nelmts1,
- (hsize_t)0,
- rank1,
- dims1,
- options,
- np1,
- np2,
- mtype1_id,
- attr1_id,
- attr2_id);
- print_found(nfound);
+ if(options->m_verbose || options->m_report) {
+ do_print_objname("attribute", np1, np2);
+ nfound = diff_array(buf1, buf2, nelmts1, (hsize_t)0, rank1, dims1,
+ options, np1, np2, mtype1_id, attr1_id, attr2_id);
+ print_found(nfound);
}
/* quiet mode (-q), just count differences */
- else if(options->m_quiet)
- {
- nfound = diff_array(buf1,
- buf2,
- nelmts1,
- (hsize_t)0,
- rank1,
- dims1,
- options,
- np1,
- np2,
- mtype1_id,
- attr1_id,
- attr2_id);
+ else if(options->m_quiet) {
+ nfound = diff_array(buf1, buf2, nelmts1, (hsize_t)0, rank1, dims1,
+ options, np1, np2, mtype1_id, attr1_id, attr2_id);
}
/* the rest (-c, none, ...) */
- else
- {
- nfound = diff_array(buf1,
- buf2,
- nelmts1,
- (hsize_t)0,
- rank1,
- dims1,
- options,
- np1,
- np2,
- mtype1_id,
- attr1_id,
- attr2_id);
+ else {
+ nfound = diff_array(buf1, buf2, nelmts1, (hsize_t)0, rank1, dims1,
+ options, np1, np2, mtype1_id, attr1_id, attr2_id);
/* not comparable, no display the different number */
- if (!options->not_cmp && nfound)
- {
- do_print_objname ("attribute", np1, np2);
+ if(!options->not_cmp && nfound) {
+ do_print_objname("attribute", np1, np2);
print_found(nfound);
- }
- }
+ } /* end if */
+ } /* end else */
/*----------------------------------------------------------------------
@@ -269,51 +219,61 @@ hsize_t diff_attr(hid_t loc1_id,
*----------------------------------------------------------------------
*/
- if (H5Tclose(ftype1_id)<0)
+ /* Free buf1 and buf2, being careful to reclaim any VL data first */
+ if(TRUE == H5Tdetect_class(mtype1_id, H5T_VLEN))
+ H5Dvlen_reclaim(mtype1_id, space1_id, H5P_DEFAULT, buf1);
+ HDfree(buf1);
+ buf1 = NULL;
+ if(TRUE == H5Tdetect_class(mtype2_id, H5T_VLEN))
+ H5Dvlen_reclaim(mtype2_id, space2_id, H5P_DEFAULT, buf2);
+ HDfree(buf2);
+ buf2 = NULL;
+
+ if(H5Tclose(ftype1_id) < 0)
goto error;
- if (H5Tclose(ftype2_id)<0)
+ if(H5Tclose(ftype2_id) < 0)
goto error;
- if (H5Sclose(space1_id)<0)
+ if(H5Sclose(space1_id) < 0)
goto error;
- if (H5Sclose(space2_id)<0)
+ if(H5Sclose(space2_id) < 0)
goto error;
- if (H5Aclose(attr1_id)<0)
+ if(H5Aclose(attr1_id) < 0)
goto error;
- if (H5Aclose(attr2_id)<0)
+ if(H5Aclose(attr2_id) < 0)
goto error;
- if (H5Tclose(mtype1_id)<0)
+ if(H5Tclose(mtype1_id) < 0)
goto error;
- if (H5Tclose(mtype2_id)<0)
+ if(H5Tclose(mtype2_id) < 0)
goto error;
- if (buf1)
- HDfree(buf1);
- if (buf2)
- HDfree(buf2);
-
nfound_total += nfound;
- } /* u */
+ } /* u */
- return nfound_total;
+ return nfound_total;
error:
- H5E_BEGIN_TRY {
- H5Tclose(ftype1_id);
- H5Tclose(ftype2_id);
- H5Tclose(mtype1_id);
- H5Tclose(mtype2_id);
- H5Sclose(space1_id);
- H5Sclose(space2_id);
- H5Aclose(attr1_id);
- H5Aclose(attr2_id);
- if (buf1)
- HDfree(buf1);
- if (buf2)
- HDfree(buf2);
- } H5E_END_TRY;
-
- options->err_stat=1;
- return nfound_total;
+ H5E_BEGIN_TRY {
+ if(buf1) {
+ if(TRUE == H5Tdetect_class(mtype1_id, H5T_VLEN))
+ H5Dvlen_reclaim(mtype1_id, space1_id, H5P_DEFAULT, buf1);
+ HDfree(buf1);
+ } /* end if */
+ if(buf2) {
+ if(TRUE == H5Tdetect_class(mtype2_id, H5T_VLEN))
+ H5Dvlen_reclaim(mtype2_id, space2_id, H5P_DEFAULT, buf2);
+ HDfree(buf2);
+ } /* end if */
+ H5Tclose(ftype1_id);
+ H5Tclose(ftype2_id);
+ H5Tclose(mtype1_id);
+ H5Tclose(mtype2_id);
+ H5Sclose(space1_id);
+ H5Sclose(space2_id);
+ H5Aclose(attr1_id);
+ H5Aclose(attr2_id);
+ } H5E_END_TRY;
+
+ options->err_stat = 1;
+ return nfound_total;
}
-