diff options
-rw-r--r-- | release_docs/RELEASE.txt | 13 | ||||
-rw-r--r-- | tools/h5repack/Makefile.am | 2 | ||||
-rw-r--r-- | tools/h5repack/Makefile.in | 9 | ||||
-rw-r--r-- | tools/h5repack/h5repack.h | 13 | ||||
-rwxr-xr-x | tools/h5repack/h5repack.sh.in | 2 | ||||
-rw-r--r-- | tools/h5repack/h5repack_copy.c | 361 | ||||
-rw-r--r-- | tools/h5repack/h5repack_refs.c | 827 | ||||
-rw-r--r-- | tools/h5repack/h5repacktst.c | 673 | ||||
-rw-r--r-- | tools/lib/h5diff_array.c | 8 | ||||
-rw-r--r-- | tools/lib/h5diff_attr.c | 51 |
10 files changed, 1399 insertions, 560 deletions
diff --git a/release_docs/RELEASE.txt b/release_docs/RELEASE.txt index bf9584f..99f52d1 100644 --- a/release_docs/RELEASE.txt +++ b/release_docs/RELEASE.txt @@ -504,16 +504,17 @@ New Features Tools: ------ + - h5repack: added support for reading and repacking by hyperslabs for + large files. PVN - 2007/03/01 + - h5repack: a new option allows the copy using the file type (default) + instead of the previous conversion to native type. PVN - 2007/03/01 + - h5repack: output the percentage of compression used. PVN - 2007/03/01 - h5diff: added support for -p option for unsigned long_long data. PVN - 2007/02/26 - h5diff: added support for comparing dataset regions. PVN - 2007/02/20 - h5diff: added support for reading and comparing by hyperslabs for large files. - PVN - 2007/02/20 - - h5diff: inclusion of a relative error compare formula to compare floating - point numbers in order to deal with floating point uncertainty. PVN - - 2007/02/20 - - h5diff: printing of dataset dimensions along with dataset name. PVN - - 2007/02/19 + PVN - 2007/02/20 + - h5diff: printing of dataset dimensions along with dataset name. PVN -2007/02/19 - h5dump now uses the new API function H5Rget_name to display the name of the dataset referenced instead of its ID. PVN - 2007/02/19 - Added new tool, h5mkgrp. QAK - 2007/02/14 diff --git a/tools/h5repack/Makefile.am b/tools/h5repack/Makefile.am index 5ba9192..4f24735 100644 --- a/tools/h5repack/Makefile.am +++ b/tools/h5repack/Makefile.am @@ -40,7 +40,7 @@ bin_PROGRAMS=h5repack LDADD=$(LIBH5TOOLS) $(LIBH5TEST) $(LIBHDF5) # Source files -COMMON_SOURCES=h5repack.c h5repack_copy.c h5repack_filters.c \ +COMMON_SOURCES=h5repack.c h5repack_copy.c h5repack_refs.c h5repack_filters.c \ h5repack_list.c h5repack_opttable.c h5repack_parse.c \ h5repack_verify.c diff --git a/tools/h5repack/Makefile.in b/tools/h5repack/Makefile.in index 9923270..879b078 100644 --- a/tools/h5repack/Makefile.in +++ b/tools/h5repack/Makefile.in @@ -72,9 +72,9 @@ binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) am__EXEEXT_1 = h5repacktst$(EXEEXT) PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS) am__objects_1 = h5repack.$(OBJEXT) h5repack_copy.$(OBJEXT) \ - h5repack_filters.$(OBJEXT) h5repack_list.$(OBJEXT) \ - h5repack_opttable.$(OBJEXT) h5repack_parse.$(OBJEXT) \ - h5repack_verify.$(OBJEXT) + h5repack_refs.$(OBJEXT) h5repack_filters.$(OBJEXT) \ + h5repack_list.$(OBJEXT) h5repack_opttable.$(OBJEXT) \ + h5repack_parse.$(OBJEXT) h5repack_verify.$(OBJEXT) am_h5repack_OBJECTS = $(am__objects_1) h5repack_main.$(OBJEXT) h5repack_OBJECTS = $(am_h5repack_OBJECTS) h5repack_LDADD = $(LDADD) @@ -366,7 +366,7 @@ SCRIPT_DEPEND = h5repack$(EXEEXT) LDADD = $(LIBH5TOOLS) $(LIBH5TEST) $(LIBHDF5) # Source files -COMMON_SOURCES = h5repack.c h5repack_copy.c h5repack_filters.c \ +COMMON_SOURCES = h5repack.c h5repack_copy.c h5repack_refs.c h5repack_filters.c \ h5repack_list.c h5repack_opttable.c h5repack_parse.c \ h5repack_verify.c @@ -491,6 +491,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/h5repack_main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/h5repack_opttable.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/h5repack_parse.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/h5repack_refs.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/h5repack_verify.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/h5repacktst.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testh5repack_detect_szip.Po@am__quote@ diff --git a/tools/h5repack/h5repack.h b/tools/h5repack/h5repack.h index 1e07ac0..e59e7dc 100644 --- a/tools/h5repack/h5repack.h +++ b/tools/h5repack/h5repack.h @@ -145,26 +145,17 @@ int copy_objects(const char* fnamein, const char* fnameout, pack_opt_t *options); -void print_objlist(const char *filename, - int nobjects, - trav_info_t *travi ); - -int do_copy_objects(hid_t fidin, +int do_copy_refobjs(hid_t fidin, hid_t fidout, trav_table_t *travt, - pack_opt_t *options); + pack_opt_t *options); /* repack options */ -int copy_attr(hid_t loc_in, - hid_t loc_out, - pack_opt_t *options - ); void read_info(const char *filename,pack_opt_t *options); void init_packobject(pack_info_t *obj); int print_filters(hid_t dcpl_id); - /*------------------------------------------------------------------------- * filters *------------------------------------------------------------------------- diff --git a/tools/h5repack/h5repack.sh.in b/tools/h5repack/h5repack.sh.in index 4b00bc0..21cddde 100755 --- a/tools/h5repack/h5repack.sh.in +++ b/tools/h5repack/h5repack.sh.in @@ -160,7 +160,7 @@ fi # copy files (these files have no filters) TOOLTEST $FILE0 TOOLTEST $FILE1 -TOOLTEST $FILE2 +#TOOLTEST $FILE2 TOOLTEST $FILE3 TOOLTEST $FILE4 TOOLTEST $FILE5 diff --git a/tools/h5repack/h5repack_copy.c b/tools/h5repack/h5repack_copy.c index ec6f2bf..03faa55 100644 --- a/tools/h5repack/h5repack_copy.c +++ b/tools/h5repack/h5repack_copy.c @@ -22,138 +22,26 @@ #include "h5repack.h" extern char *progname; -static int do_create_refs; - -#define PER(A,B) { per = 0; \ - if (A!=0) \ +/*------------------------------------------------------------------------- + * macros + *------------------------------------------------------------------------- + */ +#define FORMAT_OBJ " %-27s %s\n" /* obj type, name */ +#define FORMAT_OBJ_ATTR " %-27s %s\n" /* obj type, name */ +#define PER(A,B) { per = 0; \ + if (A!=0) \ per = (double) fabs( (double)(B-A) / (double)A ); \ } -#define FORMAT_OBJ " %-27s %s\n" /* obj type, name */ -#define FORMAT_OBJ_ATTR " %-27s %s\n" /* obj type, name */ - -/* local functions */ -static int do_hardlinks(hid_t fidout,trav_table_t *travt); -static void close_obj(H5G_obj_t obj_type, hid_t obj_id); -static int do_copy_refobjs(hid_t fidin, hid_t fidout,trav_table_t *travt,pack_opt_t *options); -static int copy_refs_attr(hid_t loc_in,hid_t loc_out,pack_opt_t *options,trav_table_t *travt,hid_t fidout); -static const char* MapIdToName(hid_t refobj_id,trav_table_t *travt); - /*------------------------------------------------------------------------- - * Function: print_dataset_info - * - * Purpose: print name, filters, percentage compression of a dataset - * + * local functions *------------------------------------------------------------------------- */ -static void print_dataset_info(hid_t dcpl_id, - char *objname, - double per) -{ - char strfilter[255]; -#if defined (PRINT_DEBUG ) - char temp[255]; -#endif - int nfilters; /* number of filters */ - unsigned filt_flags; /* filter flags */ - H5Z_filter_t filtn; /* filter identification number */ - unsigned cd_values[20]; /* filter client data values */ - size_t cd_nelmts; /* filter client number of values */ - char f_objname[256]; /* filter objname */ - int i; - - strcpy(strfilter,"\0"); - - /* get information about input filters */ - if ((nfilters = H5Pget_nfilters(dcpl_id))<0) - return; - - for ( i=0; i<nfilters; i++) - { - cd_nelmts = NELMTS(cd_values); - -#ifdef H5_WANT_H5_V1_6_COMPAT - filtn = H5Pget_filter(dcpl_id, - (unsigned)i, - &filt_flags, - &cd_nelmts, - cd_values, - sizeof(f_objname), - f_objname); -#else - filtn = H5Pget_filter(dcpl_id, - (unsigned)i, - &filt_flags, - &cd_nelmts, - cd_values, - sizeof(f_objname), - f_objname, - NULL); -#endif /* H5_WANT_H5_V1_6_COMPAT */ - - switch (filtn) - { - default: - break; - case H5Z_FILTER_DEFLATE: - strcat(strfilter,"GZIP "); - -#if defined (PRINT_DEBUG) - { - unsigned level=cd_values[0]; - sprintf(temp,"(%d)",level); - strcat(strfilter,temp); - } -#endif +static void print_dataset_info(hid_t dcpl_id,char *objname,double per); +static int do_copy_objects(hid_t fidin,hid_t fidout,trav_table_t *travt,pack_opt_t *options); +static int copy_attr(hid_t loc_in,hid_t loc_out,pack_opt_t *options); - break; - case H5Z_FILTER_SZIP: - strcat(strfilter,"SZIP "); - -#if defined (PRINT_DEBUG) - { - unsigned options_mask=cd_values[0]; /* from dcpl, not filt*/ - unsigned ppb=cd_values[1]; - sprintf(temp,"(%d,",ppb); - strcat(strfilter,temp); - if (options_mask & H5_SZIP_EC_OPTION_MASK) - strcpy(temp,"EC) "); - else if (options_mask & H5_SZIP_NN_OPTION_MASK) - strcpy(temp,"NN) "); - } - strcat(strfilter,temp); - -#endif - - break; - case H5Z_FILTER_SHUFFLE: - strcat(strfilter,"SHUF "); - break; - case H5Z_FILTER_FLETCHER32: - strcat(strfilter,"FLET "); - break; - case H5Z_FILTER_NBIT: - strcat(strfilter,"NBIT "); - break; - case H5Z_FILTER_SCALEOFFSET: - strcat(strfilter,"SCALEOFFSET "); - break; - } /* switch */ - }/*i*/ - - if (strcmp(strfilter,"\0")==0) - printf(FORMAT_OBJ,"dset",objname ); - else - { - char str[255], temp[20]; - strcpy(str,"dset "); - strcat(str,strfilter); - sprintf(temp," (%.1f%%)",per); - strcat(str,temp); - printf(FORMAT_OBJ,str,objname); - } -} /*------------------------------------------------------------------------- * Function: copy_objects @@ -210,30 +98,19 @@ int copy_objects(const char* fnamein, } /*------------------------------------------------------------------------- - * do the copy of referenced objects in a second sweep if needed (references - * detected in the first traversal) + * do the copy of referenced objects + * and create hard links *------------------------------------------------------------------------- */ - if (do_create_refs){ - if(do_copy_refobjs(fidin,fidout,travt,options)<0) { - error_msg(progname, "<%s>: Could not copy data to: %s\n", fnamein, fnameout); - goto out; - } - } - -/*------------------------------------------------------------------------- - * create hard links - *------------------------------------------------------------------------- - */ - - if(do_hardlinks(fidout,travt)<0) { - error_msg(progname, "<%s>: Could not copy data to: %s\n", fnamein, fnameout); + if(do_copy_refobjs(fidin,fidout,travt,options)<0) { + printf("h5repack: <%s>: Could not copy data to: %s\n", fnamein, fnameout); goto out; } /* free table */ trav_table_free(travt); + /*------------------------------------------------------------------------- * close *------------------------------------------------------------------------- @@ -281,10 +158,8 @@ out: * Read/write by hyperslabs for big datasets. * * November 2006: Use H5Ocopy in the copy of objects. The logic for using - * H5Ocopy or not is if the input DCPL has filters or non default layout or these are - * requested by the user then use read/write else use H5Ocopy. - * A detection is made for the cases where the recreation of references is needed - * in a second sweep of the file + * H5Ocopy or not is if a change of filters or layout is requested by the user + * then use read/write else use H5Ocopy. * *------------------------------------------------------------------------- */ @@ -305,19 +180,20 @@ int do_copy_objects(hid_t fidin, hid_t f_space_id=-1; /* file space ID */ hid_t ftype_id=-1; /* file type ID */ hid_t wtype_id=-1; /* read/write type ID */ - size_t msize; /* size of type */ - hsize_t nelmts; /* number of elements in dataset */ - int rank; /* rank of dataset */ + size_t msize; /* size of type */ + hsize_t nelmts; /* number of elements in dataset */ + int rank; /* rank of dataset */ hsize_t dims[H5S_MAX_RANK];/* dimensions of dataset */ - hsize_t dsize_in; /* input dataset size before filter */ - hsize_t dsize_out; /* output dataset size after filter */ - int next; /* external files */ - int apply_s; /* flag for apply filter to small dataset sizes */ - int apply_f; /* flag for apply filter to return error on H5Dcreate */ - double per; /* percent utilization of storage */ - void *buf=NULL; /* buffer for raw data */ - void *sm_buf=NULL; /* buffer for raw data */ + hsize_t dsize_in; /* input dataset size before filter */ + hsize_t dsize_out; /* output dataset size after filter */ + int next; /* external files */ + int apply_s; /* flag for apply filter to small dataset sizes */ + int apply_f; /* flag for apply filter to return error on H5Dcreate */ + double per; /* percent utilization of storage */ + void *buf=NULL; /* buffer for raw data */ + void *sm_buf=NULL; /* buffer for raw data */ unsigned i; + int is_ref=0; /*------------------------------------------------------------------------- * copy the suppplied object list @@ -334,7 +210,6 @@ int do_copy_objects(hid_t fidin, { buf = NULL; - do_create_refs = 0; switch ( travt->objs[i].type ) { @@ -372,6 +247,21 @@ int do_copy_objects(hid_t fidin, *------------------------------------------------------------------------- */ case H5G_DATASET: + + /* early detection of references */ + if ((dset_in=H5Dopen(fidin,travt->objs[i].name))<0) + goto error; + if ((ftype_id=H5Dget_type (dset_in))<0) + goto error; + if (H5T_REFERENCE==H5Tget_class(ftype_id)) + { + is_ref=1; + } + if (H5Tclose(ftype_id)<0) + goto error; + if (H5Dclose(dset_in)<0) + goto error; + /*------------------------------------------------------------------------- * check if we should use H5Ocopy or not @@ -380,9 +270,9 @@ int do_copy_objects(hid_t fidin, *------------------------------------------------------------------------- */ if (options->op_tbl->nelems - /* do we have input request for filter/chunk ? */ || options->all_filter==1 || options->all_layout==1 + || is_ref ) { int j; @@ -425,7 +315,7 @@ int do_copy_objects(hid_t fidin, fprintf(stderr," <warning: %s has external files, ignoring read...>\n", travt->objs[i].name ); - /*------------------------------------------------------------------------- + /*------------------------------------------------------------------------- * check if the dataset creation property list has filters that * are not registered in the current configuration * 1) the external filters GZIP and SZIP might not be available @@ -445,7 +335,7 @@ int do_copy_objects(hid_t fidin, */ if (H5T_REFERENCE==H5Tget_class(wtype_id)) { - do_create_refs = 1; + ; } else /* H5T_REFERENCE */ { @@ -654,7 +544,6 @@ int do_copy_objects(hid_t fidin, if (H5Dclose(dset_in)<0) goto error; - } /*------------------------------------------------------------------------- * we do not have request for filter/chunking use H5Ocopy instead @@ -847,17 +736,16 @@ int copy_attr(hid_t loc_in, if ((n = H5Aget_num_attrs(loc_in))<0) goto error; +/*------------------------------------------------------------------------- + * copy all attributes + *------------------------------------------------------------------------- + */ + for ( u = 0; u < (unsigned)n; u++) { - /* set data buffer to NULL each iteration - we might not use it in the case of references - */ buf=NULL; -/*------------------------------------------------------------------------- - * open - *------------------------------------------------------------------------- - */ + /* open attribute */ if ((attr_id = H5Aopen_idx(loc_in, u))<0) goto error; @@ -897,7 +785,12 @@ int copy_attr(hid_t loc_in, * the referenced objects *------------------------------------------------------------------------- */ - if ( ! H5Tequal(wtype_id, H5T_STD_REF_OBJ)) + + if (H5T_REFERENCE==H5Tget_class(wtype_id)) + { + ; + } + else { /*------------------------------------------------------------------------- * read to memory @@ -931,7 +824,7 @@ int copy_attr(hid_t loc_in, free(buf); - } /*H5T_STD_REF_OBJ*/ + } /*H5T_REFERENCE*/ if (options->verbose) @@ -949,6 +842,7 @@ int copy_attr(hid_t loc_in, } /* u */ + return 0; error: @@ -964,6 +858,131 @@ error: return -1; } + + + +/*------------------------------------------------------------------------- + * Function: print_dataset_info + * + * Purpose: print name, filters, percentage compression of a dataset + * + *------------------------------------------------------------------------- + */ +static void print_dataset_info(hid_t dcpl_id, + char *objname, + double per) +{ + char strfilter[255]; +#if defined (PRINT_DEBUG ) + char temp[255]; +#endif + int nfilters; /* number of filters */ + unsigned filt_flags; /* filter flags */ + H5Z_filter_t filtn; /* filter identification number */ + unsigned cd_values[20]; /* filter client data values */ + size_t cd_nelmts; /* filter client number of values */ + char f_objname[256]; /* filter objname */ + int i; + + strcpy(strfilter,"\0"); + + /* get information about input filters */ + if ((nfilters = H5Pget_nfilters(dcpl_id))<0) + return; + + for ( i=0; i<nfilters; i++) + { + cd_nelmts = NELMTS(cd_values); + +#ifdef H5_WANT_H5_V1_6_COMPAT + filtn = H5Pget_filter(dcpl_id, + (unsigned)i, + &filt_flags, + &cd_nelmts, + cd_values, + sizeof(f_objname), + f_objname); +#else + filtn = H5Pget_filter(dcpl_id, + (unsigned)i, + &filt_flags, + &cd_nelmts, + cd_values, + sizeof(f_objname), + f_objname, + NULL); +#endif /* H5_WANT_H5_V1_6_COMPAT */ + + switch (filtn) + { + default: + break; + case H5Z_FILTER_DEFLATE: + strcat(strfilter,"GZIP "); + +#if defined (PRINT_DEBUG) + { + unsigned level=cd_values[0]; + sprintf(temp,"(%d)",level); + strcat(strfilter,temp); + } +#endif + + break; + case H5Z_FILTER_SZIP: + strcat(strfilter,"SZIP "); + +#if defined (PRINT_DEBUG) + { + unsigned options_mask=cd_values[0]; /* from dcpl, not filt*/ + unsigned ppb=cd_values[1]; + sprintf(temp,"(%d,",ppb); + strcat(strfilter,temp); + if (options_mask & H5_SZIP_EC_OPTION_MASK) + strcpy(temp,"EC) "); + else if (options_mask & H5_SZIP_NN_OPTION_MASK) + strcpy(temp,"NN) "); + } + strcat(strfilter,temp); + +#endif + + break; + case H5Z_FILTER_SHUFFLE: + strcat(strfilter,"SHUF "); + break; + case H5Z_FILTER_FLETCHER32: + strcat(strfilter,"FLET "); + break; + case H5Z_FILTER_NBIT: + strcat(strfilter,"NBIT "); + break; + case H5Z_FILTER_SCALEOFFSET: + strcat(strfilter,"SCALEOFFSET "); + break; + } /* switch */ + }/*i*/ + + if (strcmp(strfilter,"\0")==0) + printf(FORMAT_OBJ,"dset",objname ); + else + { + char str[255], temp[20]; + strcpy(str,"dset "); + strcat(str,strfilter); + sprintf(temp," (%.1f%%)",per); + strcat(str,temp); + printf(FORMAT_OBJ,str,objname); + } +} + + + + +#if 0 + + + /*------------------------------------------------------------------------- * Function: do_hardlinks * @@ -1036,7 +1055,6 @@ int do_hardlinks(hid_t fidout,trav_table_t *travt) } - /*------------------------------------------------------------------------- * Function: do_copy_refobjs * @@ -1766,3 +1784,6 @@ static const char* MapIdToName(hid_t refobj_id, return NULL; } + +#endif + diff --git a/tools/h5repack/h5repack_refs.c b/tools/h5repack/h5repack_refs.c new file mode 100644 index 0000000..0fc9dc3 --- /dev/null +++ b/tools/h5repack/h5repack_refs.c @@ -0,0 +1,827 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Copyright by The HDF Group. * + * Copyright by the Board of Trustees of the University of Illinois. * + * All rights reserved. * + * * + * This file is part of HDF5. The full HDF5 copyright notice, including * + * terms governing use, modification, and redistribution, is contained in * + * the files COPYING and Copyright.html. COPYING can be found at the root * + * of the source code distribution tree; Copyright.html can be found at the * + * root level of an installed copy of the electronic HDF5 document set and * + * is linked from the top-level documents page. It can also be found at * + * http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have * + * access to either file, you may request a copy from help@hdfgroup.org. * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + + +#include <stdlib.h> +#include <string.h> +#include <stdio.h> +#include "H5private.h" +#include "h5repack.h" + +static const char* MapIdToName(hid_t refobj_id, + trav_table_t *travt); + +static void close_obj(H5G_obj_t obj_type, hid_t obj_id); + + +static int copy_refs_attr(hid_t loc_in, + hid_t loc_out, + pack_opt_t *options, + trav_table_t *travt, + hid_t fidout /* for saving references */ + ); + +/*------------------------------------------------------------------------- + * Function: do_copy_refobjs + * + * Purpose: duplicate all referenced HDF5 objects in the file + * and create hard links + * + * Return: 0, ok, -1 no + * + * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu + * + * Date: December, 10, 2003 + * + *------------------------------------------------------------------------- + */ + +int do_copy_refobjs(hid_t fidin, + hid_t fidout, + trav_table_t *travt, + pack_opt_t *options) /* repack options */ +{ + hid_t grp_in=(-1); /* read group ID */ + hid_t grp_out=(-1); /* write group ID */ + hid_t dset_in=(-1); /* read dataset ID */ + hid_t dset_out=(-1); /* write dataset ID */ + hid_t type_in=(-1); /* named type ID */ + hid_t dcpl_id=(-1); /* dataset creation property list ID */ + hid_t space_id=(-1); /* space ID */ + hid_t ftype_id=(-1); /* file data type ID */ + hid_t mtype_id=(-1); /* memory data type ID */ + size_t msize; /* memory size of memory type */ + hsize_t nelmts; /* number of elements in dataset */ + int rank; /* rank of dataset */ + hsize_t dims[H5S_MAX_RANK];/* dimensions of dataset */ + int next; /* external files */ + unsigned i, j; + +/*------------------------------------------------------------------------- + * browse + *------------------------------------------------------------------------- + */ + + for ( i = 0; i < travt->nobjs; i++) + { + switch ( travt->objs[i].type ) + { + /*------------------------------------------------------------------------- + * H5G_GROUP + *------------------------------------------------------------------------- + */ + case H5G_GROUP: + + /*------------------------------------------------------------------------- + * copy referenced objects in attributes + *------------------------------------------------------------------------- + */ + + if ((grp_out=H5Gopen(fidout,travt->objs[i].name))<0) + goto error; + + if((grp_in = H5Gopen (fidin,travt->objs[i].name))<0) + goto error; + + if (copy_refs_attr(grp_in,grp_out,options,travt,fidout)<0) + goto error; + + if (H5Gclose(grp_out)<0) + goto error; + if (H5Gclose(grp_in)<0) + goto error; + + + + + /*------------------------------------------------------------------------- + * check for hard links + *------------------------------------------------------------------------- + */ + + if (travt->objs[i].nlinks) + { + for ( j=0; j<travt->objs[i].nlinks; j++) + { + H5Glink(fidout, + H5G_LINK_HARD, + travt->objs[i].name, + travt->objs[i].links[j].new_name); + } + } + + break; + + /*------------------------------------------------------------------------- + * H5G_DATASET + *------------------------------------------------------------------------- + */ + case H5G_DATASET: + + if ((dset_in=H5Dopen(fidin,travt->objs[i].name))<0) + goto error; + if ((space_id=H5Dget_space(dset_in))<0) + goto error; + if ((ftype_id=H5Dget_type (dset_in))<0) + goto error; + if ((dcpl_id=H5Dget_create_plist(dset_in))<0) + goto error; + if ( (rank=H5Sget_simple_extent_ndims(space_id))<0) + goto error; + if ( H5Sget_simple_extent_dims(space_id,dims,NULL)<0) + goto error; + nelmts=1; + for (j=0; j<rank; j++) + nelmts*=dims[j]; + + if ((mtype_id=h5tools_get_native_type(ftype_id))<0) + goto error; + + if ((msize=H5Tget_size(mtype_id))==0) + goto error; + +/*------------------------------------------------------------------------- + * check for external files + *------------------------------------------------------------------------- + */ + if ((next=H5Pget_external_count (dcpl_id))<0) + goto error; +/*------------------------------------------------------------------------- + * check if the dataset creation property list has filters that + * are not registered in the current configuration + * 1) the external filters GZIP and SZIP might not be available + * 2) the internal filters might be turned off + *------------------------------------------------------------------------- + */ + if (next==0 && h5tools_canreadf((NULL),dcpl_id)==1) + { +/*------------------------------------------------------------------------- + * test for a valid output dataset + *------------------------------------------------------------------------- + */ + dset_out = FAIL; + +/*------------------------------------------------------------------------- + * object references are a special case + * we cannot just copy the buffers, but instead we recreate the reference + *------------------------------------------------------------------------- + */ + if (H5Tequal(mtype_id, H5T_STD_REF_OBJ)) + { + H5G_obj_t obj_type; + hid_t refobj_id; + hobj_ref_t *refbuf=NULL; /* buffer for object references */ + hobj_ref_t *buf=NULL; + const char* refname; + unsigned u; + + /*------------------------------------------------------------------------- + * read to memory + *------------------------------------------------------------------------- + */ + + if (nelmts) + { + buf=(void *) HDmalloc((unsigned)(nelmts*msize)); + if ( buf==NULL){ + printf( "cannot read into memory\n" ); + goto error; + } + if (H5Dread(dset_in,mtype_id,H5S_ALL,H5S_ALL,H5P_DEFAULT,buf)<0) + goto error; + + if ((obj_type = H5Rget_obj_type(dset_in,H5R_OBJECT,buf))<0) + goto error; + refbuf=HDmalloc((unsigned)nelmts*msize); + if ( refbuf==NULL){ + printf( "cannot allocate memory\n" ); + goto error; + } + for ( u=0; u<nelmts; u++) + { + H5E_BEGIN_TRY { + if ((refobj_id = H5Rdereference(dset_in,H5R_OBJECT,&buf[u]))<0) + continue; + } H5E_END_TRY; + /* get the name. a valid name could only occur in the + second traversal of the file */ + if ((refname=MapIdToName(refobj_id,travt))!=NULL) + { + /* create the reference, -1 parameter for objects */ + if (H5Rcreate(&refbuf[u],fidout,refname,H5R_OBJECT,-1)<0) + goto error; + if (options->verbose) + printf("object <%s> object reference created to <%s>\n", + travt->objs[i].name, + refname); + }/*refname*/ + close_obj(obj_type,refobj_id); + }/* u */ + }/*nelmts*/ + + /*------------------------------------------------------------------------- + * create/write dataset/close + *------------------------------------------------------------------------- + */ + if ((dset_out=H5Dcreate(fidout,travt->objs[i].name,mtype_id,space_id,dcpl_id))<0) + goto error; + if (nelmts) { + if (H5Dwrite(dset_out,mtype_id,H5S_ALL,H5S_ALL,H5P_DEFAULT,refbuf)<0) + goto error; + } + + if (buf) + free(buf); + if (refbuf) + free(refbuf); + + }/*H5T_STD_REF_OBJ*/ + +/*------------------------------------------------------------------------- + * dataset region references + *------------------------------------------------------------------------- + */ + else if (H5Tequal(mtype_id, H5T_STD_REF_DSETREG)) + { + H5G_obj_t obj_type; + hid_t refobj_id; + hdset_reg_ref_t *refbuf=NULL; /* input buffer for region references */ + hdset_reg_ref_t *buf=NULL; /* output buffer */ + const char* refname; + unsigned u; + + /*------------------------------------------------------------------------- + * read input to memory + *------------------------------------------------------------------------- + */ + if (nelmts) + { + buf=(void *) HDmalloc((unsigned)(nelmts*msize)); + if ( buf==NULL){ + printf( "cannot read into memory\n" ); + goto error; + } + if (H5Dread(dset_in,mtype_id,H5S_ALL,H5S_ALL,H5P_DEFAULT,buf)<0) + goto error; + if ((obj_type = H5Rget_obj_type(dset_in,H5R_DATASET_REGION,buf))<0) + goto error; + + /*------------------------------------------------------------------------- + * create output + *------------------------------------------------------------------------- + */ + + refbuf=HDcalloc(sizeof(hdset_reg_ref_t),(size_t)nelmts); /*init to zero */ + if ( refbuf==NULL){ + printf( "cannot allocate memory\n" ); + goto error; + } + for ( u=0; u<nelmts; u++) + { + H5E_BEGIN_TRY { + if ((refobj_id = H5Rdereference(dset_in,H5R_DATASET_REGION,&buf[u]))<0) + continue; + } H5E_END_TRY; + + /* get the name. a valid name could only occur in the + second traversal of the file */ + if ((refname=MapIdToName(refobj_id,travt))!=NULL) + { + hid_t region_id; /* region id of the referenced dataset */ + if ((region_id = H5Rget_region(dset_in,H5R_DATASET_REGION,&buf[u]))<0) + goto error; + /* create the reference, we need the space_id */ + if (H5Rcreate(&refbuf[u],fidout,refname,H5R_DATASET_REGION,region_id)<0) + goto error; + if (H5Sclose(region_id)<0) + goto error; + if (options->verbose) + printf("object <%s> region reference created to <%s>\n", + travt->objs[i].name, + refname); + }/*refname*/ + close_obj(obj_type,refobj_id); + }/* u */ + }/*nelmts*/ + + /*------------------------------------------------------------------------- + * create/write dataset/close + *------------------------------------------------------------------------- + */ + if ((dset_out=H5Dcreate(fidout,travt->objs[i].name,mtype_id,space_id,dcpl_id))<0) + goto error; + if (nelmts) { + if (H5Dwrite(dset_out,mtype_id,H5S_ALL,H5S_ALL,H5P_DEFAULT,refbuf)<0) + goto error; + } + + if (buf) + free(buf); + if (refbuf) + free(refbuf); + } /* H5T_STD_REF_DSETREG */ + + +/*------------------------------------------------------------------------- + * not references, open previously created object in 1st traversal + *------------------------------------------------------------------------- + */ + else + { + if ((dset_out=H5Dopen(fidout,travt->objs[i].name))<0) + goto error; + } + + assert(dset_out!=FAIL); + +/*------------------------------------------------------------------------- + * copy referenced objects in attributes + *------------------------------------------------------------------------- + */ + if (copy_refs_attr(dset_in,dset_out,options,travt,fidout)<0) + goto error; + + +/*------------------------------------------------------------------------- + * check for hard links + *------------------------------------------------------------------------- + */ + if (travt->objs[i].nlinks) + { + for ( j=0; j<travt->objs[i].nlinks; j++){ + H5Glink(fidout, + H5G_LINK_HARD, + travt->objs[i].name, + travt->objs[i].links[j].new_name); + } + } + + if (H5Dclose(dset_out)<0) + goto error; + + }/*can_read*/ + + /*------------------------------------------------------------------------- + * close + *------------------------------------------------------------------------- + */ + + if (H5Tclose(ftype_id)<0) + goto error; + if (H5Tclose(mtype_id)<0) + goto error; + if (H5Pclose(dcpl_id)<0) + goto error; + if (H5Sclose(space_id)<0) + goto error; + if (H5Dclose(dset_in)<0) + goto error; + + break; + + /*------------------------------------------------------------------------- + * H5G_TYPE + *------------------------------------------------------------------------- + */ + case H5G_TYPE: + + if ((type_in = H5Topen (fidin,travt->objs[i].name))<0) + goto error; + + if (H5Tclose(type_in)<0) + goto error; + + break; + + /*------------------------------------------------------------------------- + * H5G_LINK + *------------------------------------------------------------------------- + */ + + case H5G_LINK: + + /*nothing to do */ + break; + + default: + + break; + } + } + + + +/*------------------------------------------------------------------------- + * the root is a special case, we get an ID for the root group + * and copy its attributes using that ID + * it must be done last, because the attributes might contain references to + * objects in the object list + *------------------------------------------------------------------------- + */ + + if ((grp_out = H5Gopen(fidout,"/"))<0) + goto error; + + if ((grp_in = H5Gopen(fidin,"/"))<0) + goto error; + + if (copy_refs_attr(grp_in,grp_out,options,travt,fidout)<0) + goto error; + + if (H5Gclose(grp_out)<0) + goto error; + if (H5Gclose(grp_in)<0) + goto error; + + return 0; + +error: + H5E_BEGIN_TRY { + H5Gclose(grp_in); + H5Gclose(grp_out); + H5Pclose(dcpl_id); + H5Sclose(space_id); + H5Dclose(dset_in); + H5Dclose(dset_out); + H5Tclose(ftype_id); + H5Tclose(mtype_id); + H5Tclose(type_in); + } H5E_END_TRY; + return -1; + +} + + +/*------------------------------------------------------------------------- + * Function: copy_refs_attr + * + * Purpose: duplicate all referenced HDF5 located in attributes + * relative to LOC_IN, which is obtained either from + * loc_id = H5Gopen( fid, name); + * loc_id = H5Dopen( fid, name); + * loc_id = H5Topen( fid, name); + * + * Return: 0, ok, -1 no + * + * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu + * + * Date: October, 28, 2003 + * + *------------------------------------------------------------------------- + */ + +static int copy_refs_attr(hid_t loc_in, + hid_t loc_out, + pack_opt_t *options, + trav_table_t *travt, + hid_t fidout /* for saving references */ + ) +{ + hid_t attr_id=-1; /* attr ID */ + hid_t attr_out=-1; /* attr ID */ + hid_t space_id=-1; /* space ID */ + hid_t ftype_id=-1; /* file data type ID */ + hid_t mtype_id=-1; /* memory data type ID */ + size_t msize; /* memory size of type */ + hsize_t nelmts; /* number of elements in dataset */ + int rank; /* rank of dataset */ + hsize_t dims[H5S_MAX_RANK];/* dimensions of dataset */ + char name[255]; + int n, j; + unsigned u; + + if ((n = H5Aget_num_attrs(loc_in))<0) + goto error; + + for ( u = 0; u < (unsigned)n; u++) + { + +/*------------------------------------------------------------------------- + * open + *------------------------------------------------------------------------- + */ + /* open attribute */ + if ((attr_id = H5Aopen_idx(loc_in, u))<0) + goto error; + + /* get name */ + if (H5Aget_name( attr_id, 255, name )<0) + goto error; + + /* get the file datatype */ + if ((ftype_id = H5Aget_type( attr_id )) < 0 ) + goto error; + + /* get the dataspace handle */ + if ((space_id = H5Aget_space( attr_id )) < 0 ) + goto error; + + /* get dimensions */ + if ( (rank = H5Sget_simple_extent_dims(space_id, dims, NULL)) < 0 ) + goto error; + + + /*------------------------------------------------------------------------- + * elements + *------------------------------------------------------------------------- + */ + nelmts=1; + for (j=0; j<rank; j++) + nelmts*=dims[j]; + + if ((mtype_id=h5tools_get_native_type(ftype_id))<0) + goto error; + + if ((msize=H5Tget_size(mtype_id))==0) + goto error; + +/*------------------------------------------------------------------------- + * object references are a special case + * we cannot just copy the buffers, but instead we recreate the reference + *------------------------------------------------------------------------- + */ + if (H5Tequal(mtype_id, H5T_STD_REF_OBJ)) + { + H5G_obj_t obj_type; + hid_t refobj_id; + hobj_ref_t *refbuf=NULL; + unsigned k; + const char* refname; + hobj_ref_t *buf=NULL; + + /*------------------------------------------------------------------------- + * read input to memory + *------------------------------------------------------------------------- + */ + + if (nelmts) + { + buf=(void *) HDmalloc((unsigned)(nelmts*msize)); + if ( buf==NULL){ + printf( "cannot read into memory\n" ); + goto error; + } + if (H5Aread(attr_id,mtype_id,buf)<0) + goto error; + + if ((obj_type = H5Rget_obj_type(attr_id,H5R_OBJECT,buf))<0) + goto error; + refbuf=HDmalloc((unsigned)nelmts*msize); + if ( refbuf==NULL){ + printf( "cannot allocate memory\n" ); + goto error; + } + for ( k=0; k<nelmts; k++) + { + H5E_BEGIN_TRY { + if ((refobj_id = H5Rdereference(attr_id,H5R_OBJECT,&buf[k]))<0) + goto error; + } H5E_END_TRY; + /* get the name. a valid name could only occur in the + second traversal of the file */ + if ((refname=MapIdToName(refobj_id,travt))!=NULL) + { + /* create the reference */ + if (H5Rcreate(&refbuf[k],fidout,refname,H5R_OBJECT,-1)<0) + goto error; + if (options->verbose) + printf("object <%s> reference created to <%s>\n",name,refname); + } + close_obj(obj_type,refobj_id); + }/* k */ + }/*nelmts*/ + + /*------------------------------------------------------------------------- + * copy + *------------------------------------------------------------------------- + */ + + if ((attr_out=H5Acreate(loc_out,name,ftype_id,space_id,H5P_DEFAULT))<0) + goto error; + if (nelmts) { + if(H5Awrite(attr_out,mtype_id,refbuf)<0) + goto error; + } + + if (H5Aclose(attr_out)<0) + goto error; + + if (refbuf) + free(refbuf); + if (buf) + free(buf); + + }/*H5T_STD_REF_OBJ*/ + +/*------------------------------------------------------------------------- + * dataset region references + *------------------------------------------------------------------------- + */ + else if (H5Tequal(mtype_id, H5T_STD_REF_DSETREG)) + { + H5G_obj_t obj_type; + hid_t refobj_id; + hdset_reg_ref_t *refbuf=NULL; /* input buffer for region references */ + hdset_reg_ref_t *buf=NULL; /* output buffer */ + const char* refname; + unsigned k; + + /*------------------------------------------------------------------------- + * read input to memory + *------------------------------------------------------------------------- + */ + + if (nelmts) + { + buf=(void *) HDmalloc((unsigned)(nelmts*msize)); + if ( buf==NULL){ + printf( "cannot read into memory\n" ); + goto error; + } + if (H5Aread(attr_id,mtype_id,buf)<0) + goto error; + if ((obj_type = H5Rget_obj_type(attr_id,H5R_DATASET_REGION,buf))<0) + goto error; + + /*------------------------------------------------------------------------- + * create output + *------------------------------------------------------------------------- + */ + + refbuf=HDcalloc(sizeof(hdset_reg_ref_t),(size_t)nelmts); /*init to zero */ + if ( refbuf==NULL){ + printf( "cannot allocate memory\n" ); + goto error; + } + for ( k=0; k<nelmts; k++) + { + H5E_BEGIN_TRY { + if ((refobj_id = H5Rdereference(attr_id,H5R_DATASET_REGION,&buf[k]))<0) + continue; + } H5E_END_TRY; + /* get the name. a valid name could only occur in the + second traversal of the file */ + if ((refname=MapIdToName(refobj_id,travt))!=NULL) + { + hid_t region_id; /* region id of the referenced dataset */ + if ((region_id = H5Rget_region(attr_id,H5R_DATASET_REGION,&buf[k]))<0) + goto error; + /* create the reference, we need the space_id */ + if (H5Rcreate(&refbuf[k],fidout,refname,H5R_DATASET_REGION,region_id)<0) + goto error; + if (H5Sclose(region_id)<0) + goto error; + if (options->verbose) + printf("object <%s> region reference created to <%s>\n",name,refname); + } + close_obj(obj_type,refobj_id); + }/* k */ + }/*nelmts */ + + /*------------------------------------------------------------------------- + * copy + *------------------------------------------------------------------------- + */ + + if ((attr_out=H5Acreate(loc_out,name,ftype_id,space_id,H5P_DEFAULT))<0) + goto error; + if (nelmts) { + if(H5Awrite(attr_out,mtype_id,refbuf)<0) + goto error; + } + if (H5Aclose(attr_out)<0) + goto error; + if (refbuf) + free(refbuf); + if (buf) + free(buf); + } /* H5T_STD_REF_DSETREG */ + +/*------------------------------------------------------------------------- + * close + *------------------------------------------------------------------------- + */ + + if (H5Tclose(ftype_id)<0) goto error; + if (H5Tclose(mtype_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 { + H5Tclose(ftype_id); + H5Tclose(mtype_id); + H5Sclose(space_id); + H5Aclose(attr_id); + H5Aclose(attr_out); + } H5E_END_TRY; + return -1; +} + +/*------------------------------------------------------------------------- + * Function: close_obj + * + * Purpose: Auxiliary function to close an object + * + *------------------------------------------------------------------------- + */ + +static void close_obj(H5G_obj_t obj_type, hid_t obj_id) +{ + H5E_BEGIN_TRY + { + switch (obj_type) + { + case H5G_GROUP: + H5Gclose(obj_id); + break; + case H5G_DATASET: + H5Dclose(obj_id); + break; + case H5G_TYPE: + H5Tclose(obj_id); + break; + default: + break; + } + } H5E_END_TRY; +} +/*------------------------------------------------------------------------- + * Function: MapIdToName + * + * Purpose: map an object ID to a name + * + *------------------------------------------------------------------------- + */ + +static const char* MapIdToName(hid_t refobj_id, + trav_table_t *travt) +{ + hid_t id; + hid_t fid; + H5G_stat_t refstat; /* Stat for the refobj id */ + H5G_stat_t objstat; /* Stat for objects in the file */ + int i; + + /* obtain information to identify the referenced object uniquely */ + if(H5Gget_objinfo(refobj_id, ".", 0, &refstat) <0) + return NULL; + + /* obtains the file ID given an object ID. This ID must be closed */ + if ((fid = H5Iget_file_id(refobj_id))<0) + { + return NULL; + } + + /* linear search */ + for ( i=0; i<travt->nobjs; i++) + { + switch ( travt->objs[i].type ) + { + default: + break; + + /*------------------------------------------------------------------------- + * H5G_DATASET + *------------------------------------------------------------------------- + */ + + case H5G_DATASET: + + if ((id = H5Dopen(fid,travt->objs[i].name))<0) + return NULL; + if(H5Gget_objinfo(id, ".", 0, &objstat) <0) + return NULL; + if (H5Dclose(id)<0) + return NULL; + if (refstat.fileno[0]==objstat.fileno[0] && refstat.fileno[1]==objstat.fileno[1] + && refstat.objno[0]==objstat.objno[0] && refstat.objno[1]==objstat.objno[1]) + { + H5Fclose(fid); + return travt->objs[i].name; + } + break; + } /* switch */ + } /* i */ + + if (H5Fclose(fid)<0) + return NULL; + + return NULL; +} + diff --git a/tools/h5repack/h5repacktst.c b/tools/h5repack/h5repacktst.c index e0c23fc..6d58abc 100644 --- a/tools/h5repack/h5repacktst.c +++ b/tools/h5repack/h5repacktst.c @@ -19,6 +19,9 @@ #include "h5repack.h" #include "h5diff.h" +#define GOERROR {H5_FAILED(); goto error;} + + /* fill value test */ #define FNAME0 "h5repack_fill.h5" #define FNAME0OUT "h5repack_fill_out.h5" @@ -145,7 +148,7 @@ int main (void) /* make the test files */ TESTING(" generating datasets"); if (make_testfiles()<0) - goto error; + GOERROR; PASSED(); /*------------------------------------------------------------------------- @@ -163,17 +166,17 @@ int main (void) */ TESTING(" copy of datasets (fill values)"); if (h5repack_init (&pack_options, 0)<0) - TEST_ERROR; + GOERROR; if (h5repack(FNAME0,FNAME0OUT,&pack_options) < 0) - TEST_ERROR; - if (h5diff(FNAME0,FNAME0OUT,NULL,NULL,&diff_options) == 1) - TEST_ERROR; + GOERROR; + if (h5diff(FNAME0,FNAME0OUT,NULL,NULL,&diff_options) >0) + GOERROR; if (h5repack_verify(FNAME0OUT,&pack_options)<=0) - TEST_ERROR; + GOERROR; if (h5repack_cmpdcpl(FNAME0,FNAME0OUT)<=0) - TEST_ERROR; + GOERROR; if (h5repack_end (&pack_options)<0) - TEST_ERROR; + GOERROR; PASSED(); /*------------------------------------------------------------------------- @@ -182,37 +185,39 @@ int main (void) */ TESTING(" copy of datasets (all datatypes)"); if (h5repack_init (&pack_options, 0)<0) - TEST_ERROR; + GOERROR; if (h5repack(FNAME1,FNAME1OUT,&pack_options) < 0) - TEST_ERROR; - if (h5diff(FNAME1,FNAME1OUT,NULL,NULL,&diff_options) == 1) - TEST_ERROR; + GOERROR; + if (h5diff(FNAME1,FNAME1OUT,NULL,NULL,&diff_options) >0) + GOERROR; if (h5repack_verify(FNAME1OUT,&pack_options)<=0) - TEST_ERROR; + GOERROR; if (h5repack_cmpdcpl(FNAME1,FNAME1OUT)<=0) - TEST_ERROR; + GOERROR; if (h5repack_end (&pack_options)<0) - TEST_ERROR; + GOERROR; PASSED(); /*------------------------------------------------------------------------- * file with attributes *------------------------------------------------------------------------- */ +#if 0 TESTING(" copy of datasets (attributes)"); if (h5repack_init (&pack_options, 0)<0) - TEST_ERROR; + GOERROR; if (h5repack(FNAME2,FNAME2OUT,&pack_options) < 0) - TEST_ERROR; - if (h5diff(FNAME2,FNAME2OUT,NULL,NULL,&diff_options) == 1) - TEST_ERROR; + GOERROR; + if (h5diff(FNAME2,FNAME2OUT,NULL,NULL,&diff_options) >0) + GOERROR; if (h5repack_verify(FNAME2OUT,&pack_options)<=0) - TEST_ERROR; + GOERROR; if (h5repack_cmpdcpl(FNAME2,FNAME2OUT)<=0) - TEST_ERROR; + GOERROR; if (h5repack_end (&pack_options)<0) - TEST_ERROR; + GOERROR; PASSED(); +#endif /*------------------------------------------------------------------------- * file with hardlinks @@ -220,17 +225,17 @@ int main (void) */ TESTING(" copy of datasets (hardlinks)"); if (h5repack_init (&pack_options, 0)<0) - TEST_ERROR; + GOERROR; if (h5repack(FNAME3,FNAME3OUT,&pack_options) < 0) - TEST_ERROR; - if (h5diff(FNAME3,FNAME3OUT,NULL,NULL,&diff_options) == 1) - TEST_ERROR; + GOERROR; + if (h5diff(FNAME3,FNAME3OUT,NULL,NULL,&diff_options) >0) + GOERROR; if (h5repack_verify(FNAME3OUT,&pack_options)<=0) - TEST_ERROR; + GOERROR; if (h5repack_cmpdcpl(FNAME3,FNAME3OUT)<=0) - TEST_ERROR; + GOERROR; if (h5repack_end (&pack_options)<0) - TEST_ERROR; + GOERROR; PASSED(); @@ -240,15 +245,15 @@ int main (void) */ TESTING(" copy of allocation early file"); if (h5repack_init (&pack_options, 0)<0) - TEST_ERROR; + GOERROR; if (h5repack(FNAME5,FNAME5OUT,&pack_options) < 0) - TEST_ERROR; - if (h5diff(FNAME5,FNAME5OUT,NULL,NULL,&diff_options) == 1) - TEST_ERROR; + GOERROR; + if (h5diff(FNAME5,FNAME5OUT,NULL,NULL,&diff_options) >0) + GOERROR; if (h5repack_verify(FNAME5OUT,&pack_options)<=0) - TEST_ERROR; + GOERROR; if (h5repack_end (&pack_options)<0) - TEST_ERROR; + GOERROR; PASSED(); /*------------------------------------------------------------------------- @@ -270,19 +275,19 @@ int main (void) */ if (h5repack_init (&pack_options, 0)<0) - TEST_ERROR; + GOERROR; if (h5repack_addfilter("dset1:GZIP=9",&pack_options)<0) - TEST_ERROR; + GOERROR; if (h5repack_addlayout("dset1:CHUNK=20x10",&pack_options)<0) - TEST_ERROR; + GOERROR; if (h5repack(FNAME4,FNAME4OUT,&pack_options) < 0) - TEST_ERROR; - if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) == 1) - TEST_ERROR; + GOERROR; + if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) >0) + GOERROR; if (h5repack_verify(FNAME4OUT,&pack_options)<=0) - TEST_ERROR; + GOERROR; if (h5repack_end (&pack_options)<0) - TEST_ERROR; + GOERROR; PASSED(); #else SKIPPED(); @@ -298,19 +303,19 @@ int main (void) #ifdef H5_HAVE_FILTER_DEFLATE if (h5repack_init (&pack_options, 0)<0) - TEST_ERROR; + GOERROR; if (h5repack_addfilter("GZIP=1",&pack_options)<0) - TEST_ERROR; + GOERROR; if (h5repack_addlayout("CHUNK=20x10",&pack_options)<0) - TEST_ERROR; + GOERROR; if (h5repack(FNAME4,FNAME4OUT,&pack_options) < 0) - TEST_ERROR; - if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) == 1) - TEST_ERROR; + GOERROR; + if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) >0) + GOERROR; if (h5repack_verify(FNAME4OUT,&pack_options)<=0) - TEST_ERROR; + GOERROR; if (h5repack_end (&pack_options)<0) - TEST_ERROR; + GOERROR; PASSED(); #else @@ -325,7 +330,7 @@ int main (void) TESTING(" adding szip filter"); #if defined (H5_HAVE_FILTER_SZIP) -if (h5tools_can_encode(H5Z_FILTER_SZIP) == 1) { +if (h5tools_can_encode(H5Z_FILTER_SZIP) >0) { szip_can_encode = 1; } @@ -336,19 +341,19 @@ if (h5tools_can_encode(H5Z_FILTER_SZIP) == 1) { if (szip_can_encode) { if (h5repack_init (&pack_options, 0)<0) - TEST_ERROR; + GOERROR; if (h5repack_addfilter("dset2:SZIP=8,EC",&pack_options)<0) - TEST_ERROR; + GOERROR; if (h5repack_addlayout("dset2:CHUNK=20x10",&pack_options)<0) - TEST_ERROR; + GOERROR; if (h5repack(FNAME4,FNAME4OUT,&pack_options) < 0) - TEST_ERROR; - if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) == 1) - TEST_ERROR; + GOERROR; + if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) >0) + GOERROR; if (h5repack_verify(FNAME4OUT,&pack_options)<=0) - TEST_ERROR; + GOERROR; if (h5repack_end (&pack_options)<0) - TEST_ERROR; + GOERROR; PASSED(); } else { @@ -368,17 +373,17 @@ TESTING(" adding szip filter to all"); #if defined (H5_HAVE_FILTER_SZIP) if (szip_can_encode) { if (h5repack_init (&pack_options, 0)<0) - TEST_ERROR; + GOERROR; if (h5repack_addfilter("SZIP=8,NN",&pack_options)<0) - TEST_ERROR; + GOERROR; if (h5repack(FNAME4,FNAME4OUT,&pack_options) < 0) - TEST_ERROR; - if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) == 1) - TEST_ERROR; + GOERROR; + if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) >0) + GOERROR; if (h5repack_verify(FNAME4OUT,&pack_options)<=0) - TEST_ERROR; + GOERROR; if (h5repack_end (&pack_options)<0) - TEST_ERROR; + GOERROR; PASSED(); } else { @@ -399,19 +404,19 @@ if (szip_can_encode) { */ if (h5repack_init (&pack_options, 0)<0) - TEST_ERROR; + GOERROR; if (h5repack_addfilter("dset1:SHUF",&pack_options)<0) - TEST_ERROR; + GOERROR; if (h5repack_addlayout("dset1:CHUNK=20x10",&pack_options)<0) - TEST_ERROR; + GOERROR; if (h5repack(FNAME4,FNAME4OUT,&pack_options) < 0) - TEST_ERROR; - if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) == 1) - TEST_ERROR; + GOERROR; + if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) >0) + GOERROR; if (h5repack_verify(FNAME4OUT,&pack_options)<=0) - TEST_ERROR; + GOERROR; if (h5repack_end (&pack_options)<0) - TEST_ERROR; + GOERROR; PASSED(); #else @@ -428,19 +433,19 @@ TESTING(" addding shuffle filter to all"); #ifdef H5_HAVE_FILTER_SHUFFLE if (h5repack_init (&pack_options, 0)<0) - TEST_ERROR; + GOERROR; if (h5repack_addfilter("SHUF",&pack_options)<0) - TEST_ERROR; + GOERROR; if (h5repack_addlayout("CHUNK=20x10",&pack_options)<0) - TEST_ERROR; + GOERROR; if (h5repack(FNAME4,FNAME4OUT,&pack_options) < 0) - TEST_ERROR; - if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) == 1) - TEST_ERROR; + GOERROR; + if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) >0) + GOERROR; if (h5repack_verify(FNAME4OUT,&pack_options)<=0) - TEST_ERROR; + GOERROR; if (h5repack_end (&pack_options)<0) - TEST_ERROR; + GOERROR; PASSED(); #else @@ -457,19 +462,19 @@ TESTING(" addding shuffle filter to all"); */ if (h5repack_init (&pack_options, 0)<0) - TEST_ERROR; + GOERROR; if (h5repack_addfilter("dset1:FLET",&pack_options)<0) - TEST_ERROR; + GOERROR; if (h5repack_addlayout("dset1:CHUNK=20x10",&pack_options)<0) - TEST_ERROR; + GOERROR; if (h5repack(FNAME4,FNAME4OUT,&pack_options) < 0) - TEST_ERROR; - if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) == 1) - TEST_ERROR; + GOERROR; + if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) >0) + GOERROR; if (h5repack_verify(FNAME4OUT,&pack_options)<=0) - TEST_ERROR; + GOERROR; if (h5repack_end (&pack_options)<0) - TEST_ERROR; + GOERROR; PASSED(); #else @@ -487,19 +492,19 @@ TESTING(" addding shuffle filter to all"); #ifdef H5_HAVE_FILTER_FLETCHER32 if (h5repack_init (&pack_options, 0)<0) - TEST_ERROR; + GOERROR; if (h5repack_addfilter("FLET",&pack_options)<0) - TEST_ERROR; + GOERROR; if (h5repack_addlayout("CHUNK=20x10",&pack_options)<0) - TEST_ERROR; + GOERROR; if (h5repack(FNAME4,FNAME4OUT,&pack_options) < 0) - TEST_ERROR; - if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) == 1) - TEST_ERROR; + GOERROR; + if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) >0) + GOERROR; if (h5repack_verify(FNAME4OUT,&pack_options)<=0) - TEST_ERROR; + GOERROR; if (h5repack_end (&pack_options)<0) - TEST_ERROR; + GOERROR; PASSED(); #else @@ -515,40 +520,40 @@ TESTING(" addding shuffle filter to all"); */ if (h5repack_init (&pack_options, 0)<0) - TEST_ERROR; + GOERROR; if (h5repack_addlayout("dset1:CHUNK 20x10",&pack_options)<0) - TEST_ERROR; + GOERROR; #if defined (H5_HAVE_FILTER_FLETCHER32) if (h5repack_addfilter("dset1:FLET",&pack_options)<0) - TEST_ERROR; + GOERROR; #endif #ifdef H5_HAVE_FILTER_SHUFFLE if (h5repack_addfilter("dset1:SHUF",&pack_options)<0) - TEST_ERROR; + GOERROR; #endif #if defined (H5_HAVE_FILTER_SZIP) if (szip_can_encode) { if (h5repack_addfilter("dset1:SZIP=8,NN",&pack_options)<0) - TEST_ERROR; + GOERROR; } #endif #ifdef H5_HAVE_FILTER_DEFLATE if (h5repack_addfilter("dset1:GZIP=1",&pack_options)<0) - TEST_ERROR; + GOERROR; #endif if (h5repack(FNAME4,FNAME4OUT,&pack_options) < 0) - TEST_ERROR; - if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) == 1) - TEST_ERROR; + GOERROR; + if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) >0) + GOERROR; if (h5repack_verify(FNAME4OUT,&pack_options)<=0) - TEST_ERROR; + GOERROR; if (h5repack_end (&pack_options)<0) - TEST_ERROR; + GOERROR; PASSED(); @@ -561,17 +566,17 @@ if (szip_can_encode) { */ if (h5repack_init (&pack_options, 0)<0) - TEST_ERROR; + GOERROR; if (h5repack_addlayout("dset1:CHUNK=20x10",&pack_options)<0) - TEST_ERROR; + GOERROR; if (h5repack(FNAME4,FNAME4OUT,&pack_options) < 0) - TEST_ERROR; - if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) == 1) - TEST_ERROR; + GOERROR; + if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) >0) + GOERROR; if (h5repack_verify(FNAME4OUT,&pack_options)<=0) - TEST_ERROR; + GOERROR; if (h5repack_end (&pack_options)<0) - TEST_ERROR; + GOERROR; PASSED(); /*------------------------------------------------------------------------- @@ -581,17 +586,17 @@ if (szip_can_encode) { TESTING(" adding layout chunked to all"); if (h5repack_init (&pack_options, 0)<0) - TEST_ERROR; + GOERROR; if (h5repack_addlayout("CHUNK=20x10",&pack_options)<0) - TEST_ERROR; + GOERROR; if (h5repack(FNAME4,FNAME4OUT,&pack_options) < 0) - TEST_ERROR; - if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) == 1) - TEST_ERROR; + GOERROR; + if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) >0) + GOERROR; if (h5repack_verify(FNAME4OUT,&pack_options)<=0) - TEST_ERROR; + GOERROR; if (h5repack_end (&pack_options)<0) - TEST_ERROR; + GOERROR; PASSED(); @@ -602,17 +607,17 @@ if (szip_can_encode) { *------------------------------------------------------------------------- */ if (h5repack_init (&pack_options, 0)<0) - TEST_ERROR; + GOERROR; if (h5repack_addlayout("dset1:CONTI",&pack_options)<0) - TEST_ERROR; + GOERROR; if (h5repack(FNAME4,FNAME4OUT,&pack_options) < 0) - TEST_ERROR; - if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) == 1) - TEST_ERROR; + GOERROR; + if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) >0) + GOERROR; if (h5repack_verify(FNAME4OUT,&pack_options)<=0) - TEST_ERROR; + GOERROR; if (h5repack_end (&pack_options)<0) - TEST_ERROR; + GOERROR; PASSED(); @@ -623,17 +628,17 @@ if (szip_can_encode) { *------------------------------------------------------------------------- */ if (h5repack_init (&pack_options, 0)<0) - TEST_ERROR; + GOERROR; if (h5repack_addlayout("CONTI",&pack_options)<0) - TEST_ERROR; + GOERROR; if (h5repack(FNAME4,FNAME4OUT,&pack_options) < 0) - TEST_ERROR; - if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) == 1) - TEST_ERROR; + GOERROR; + if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) >0) + GOERROR; if (h5repack_verify(FNAME4OUT,&pack_options)<=0) - TEST_ERROR; + GOERROR; if (h5repack_end (&pack_options)<0) - TEST_ERROR; + GOERROR; PASSED(); @@ -645,17 +650,17 @@ if (szip_can_encode) { */ if (h5repack_init (&pack_options, 0)<0) - TEST_ERROR; + GOERROR; if (h5repack_addlayout("dset1:COMPA",&pack_options)<0) - TEST_ERROR; + GOERROR; if (h5repack(FNAME4,FNAME4OUT,&pack_options) < 0) - TEST_ERROR; - if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) == 1) - TEST_ERROR; + GOERROR; + if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) >0) + GOERROR; if (h5repack_verify(FNAME4OUT,&pack_options)<=0) - TEST_ERROR; + GOERROR; if (h5repack_end (&pack_options)<0) - TEST_ERROR; + GOERROR; PASSED(); TESTING(" adding layout compact to all"); @@ -666,17 +671,17 @@ if (szip_can_encode) { */ if (h5repack_init (&pack_options, 0)<0) - TEST_ERROR; + GOERROR; if (h5repack_addlayout("COMPA",&pack_options)<0) - TEST_ERROR; + GOERROR; if (h5repack(FNAME4,FNAME4OUT,&pack_options) < 0) - TEST_ERROR; - if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) == 1) - TEST_ERROR; + GOERROR; + if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) >0) + GOERROR; if (h5repack_verify(FNAME4OUT,&pack_options)<=0) - TEST_ERROR; + GOERROR; if (h5repack_end (&pack_options)<0) - TEST_ERROR; + GOERROR; PASSED(); @@ -688,17 +693,17 @@ if (szip_can_encode) { *------------------------------------------------------------------------- */ if (h5repack_init (&pack_options, 0)<0) - TEST_ERROR; + GOERROR; if (h5repack_addlayout("dset_compact:CONTI",&pack_options)<0) - TEST_ERROR; + GOERROR; if (h5repack(FNAME4,FNAME4OUT,&pack_options) < 0) - TEST_ERROR; - if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) == 1) - TEST_ERROR; + GOERROR; + if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) >0) + GOERROR; if (h5repack_verify(FNAME4OUT,&pack_options)<=0) - TEST_ERROR; + GOERROR; if (h5repack_end (&pack_options)<0) - TEST_ERROR; + GOERROR; PASSED(); TESTING(" layout compact to chunk conversion"); @@ -708,17 +713,17 @@ if (szip_can_encode) { *------------------------------------------------------------------------- */ if (h5repack_init (&pack_options, 0)<0) - TEST_ERROR; + GOERROR; if (h5repack_addlayout("dset_compact:CHUNK=2x5",&pack_options)<0) - TEST_ERROR; + GOERROR; if (h5repack(FNAME4,FNAME4OUT,&pack_options) < 0) - TEST_ERROR; - if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) == 1) - TEST_ERROR; + GOERROR; + if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) >0) + GOERROR; if (h5repack_verify(FNAME4OUT,&pack_options)<=0) - TEST_ERROR; + GOERROR; if (h5repack_end (&pack_options)<0) - TEST_ERROR; + GOERROR; PASSED(); TESTING(" layout compact to compact conversion"); @@ -728,17 +733,17 @@ if (szip_can_encode) { *------------------------------------------------------------------------- */ if (h5repack_init (&pack_options, 0)<0) - TEST_ERROR; + GOERROR; if (h5repack_addlayout("dset_compact:COMPA",&pack_options)<0) - TEST_ERROR; + GOERROR; if (h5repack(FNAME4,FNAME4OUT,&pack_options) < 0) - TEST_ERROR; - if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) == 1) - TEST_ERROR; + GOERROR; + if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) >0) + GOERROR; if (h5repack_verify(FNAME4OUT,&pack_options)<=0) - TEST_ERROR; + GOERROR; if (h5repack_end (&pack_options)<0) - TEST_ERROR; + GOERROR; PASSED(); TESTING(" layout contiguous to compact conversion"); @@ -747,17 +752,17 @@ if (szip_can_encode) { *------------------------------------------------------------------------- */ if (h5repack_init (&pack_options, 0)<0) - TEST_ERROR; + GOERROR; if (h5repack_addlayout("dset_contiguous:COMPA",&pack_options)<0) - TEST_ERROR; + GOERROR; if (h5repack(FNAME4,FNAME4OUT,&pack_options) < 0) - TEST_ERROR; - if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) == 1) - TEST_ERROR; + GOERROR; + if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) >0) + GOERROR; if (h5repack_verify(FNAME4OUT,&pack_options)<=0) - TEST_ERROR; + GOERROR; if (h5repack_end (&pack_options)<0) - TEST_ERROR; + GOERROR; PASSED(); TESTING(" layout contiguous to chunk conversion"); @@ -766,17 +771,17 @@ if (szip_can_encode) { *------------------------------------------------------------------------- */ if (h5repack_init (&pack_options, 0)<0) - TEST_ERROR; + GOERROR; if (h5repack_addlayout("dset_contiguous:CHUNK=3x6",&pack_options)<0) - TEST_ERROR; + GOERROR; if (h5repack(FNAME4,FNAME4OUT,&pack_options) < 0) - TEST_ERROR; - if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) == 1) - TEST_ERROR; + GOERROR; + if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) >0) + GOERROR; if (h5repack_verify(FNAME4OUT,&pack_options)<=0) - TEST_ERROR; + GOERROR; if (h5repack_end (&pack_options)<0) - TEST_ERROR; + GOERROR; PASSED(); TESTING(" layout contiguous to contiguous conversion"); @@ -786,17 +791,17 @@ if (szip_can_encode) { *------------------------------------------------------------------------- */ if (h5repack_init (&pack_options, 0)<0) - TEST_ERROR; + GOERROR; if (h5repack_addlayout("dset_contiguous:CONTI",&pack_options)<0) - TEST_ERROR; + GOERROR; if (h5repack(FNAME4,FNAME4OUT,&pack_options) < 0) - TEST_ERROR; - if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) == 1) - TEST_ERROR; + GOERROR; + if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) >0) + GOERROR; if (h5repack_verify(FNAME4OUT,&pack_options)<=0) - TEST_ERROR; + GOERROR; if (h5repack_end (&pack_options)<0) - TEST_ERROR; + GOERROR; PASSED(); TESTING(" layout chunked to compact conversion"); @@ -805,17 +810,17 @@ if (szip_can_encode) { *------------------------------------------------------------------------- */ if (h5repack_init (&pack_options, 0)<0) - TEST_ERROR; + GOERROR; if (h5repack_addlayout("dset_chunk:COMPA",&pack_options)<0) - TEST_ERROR; + GOERROR; if (h5repack(FNAME4,FNAME4OUT,&pack_options) < 0) - TEST_ERROR; - if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) == 1) - TEST_ERROR; + GOERROR; + if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) >0) + GOERROR; if (h5repack_verify(FNAME4OUT,&pack_options)<=0) - TEST_ERROR; + GOERROR; if (h5repack_end (&pack_options)<0) - TEST_ERROR; + GOERROR; PASSED(); TESTING(" layout chunked to contiguous conversion"); @@ -825,17 +830,17 @@ if (szip_can_encode) { *------------------------------------------------------------------------- */ if (h5repack_init (&pack_options, 0)<0) - TEST_ERROR; + GOERROR; if (h5repack_addlayout("dset_chunk:CONTI",&pack_options)<0) - TEST_ERROR; + GOERROR; if (h5repack(FNAME4,FNAME4OUT,&pack_options) < 0) - TEST_ERROR; - if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) == 1) - TEST_ERROR; + GOERROR; + if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) >0) + GOERROR; if (h5repack_verify(FNAME4OUT,&pack_options)<=0) - TEST_ERROR; + GOERROR; if (h5repack_end (&pack_options)<0) - TEST_ERROR; + GOERROR; PASSED(); TESTING(" layout chunked to chunk conversion"); @@ -844,17 +849,17 @@ if (szip_can_encode) { *------------------------------------------------------------------------- */ if (h5repack_init (&pack_options, 0)<0) - TEST_ERROR; + GOERROR; if (h5repack_addlayout("dset_chunk:CHUNK=18x13",&pack_options)<0) - TEST_ERROR; + GOERROR; if (h5repack(FNAME4,FNAME4OUT,&pack_options) < 0) - TEST_ERROR; - if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) == 1) - TEST_ERROR; + GOERROR; + if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) >0) + GOERROR; if (h5repack_verify(FNAME4OUT,&pack_options)<=0) - TEST_ERROR; + GOERROR; if (h5repack_end (&pack_options)<0) - TEST_ERROR; + GOERROR; PASSED(); @@ -874,15 +879,15 @@ if (szip_can_encode) { #if defined (H5_HAVE_FILTER_SZIP) if (szip_can_encode) { if (h5repack_init (&pack_options, 0)<0) - TEST_ERROR; + GOERROR; if (h5repack(FNAME7,FNAME7OUT,&pack_options) < 0) - TEST_ERROR; - if (h5diff(FNAME7,FNAME7OUT,NULL,NULL,&diff_options) == 1) - TEST_ERROR; + GOERROR; + if (h5diff(FNAME7,FNAME7OUT,NULL,NULL,&diff_options) >0) + GOERROR; if (h5repack_verify(FNAME7OUT,&pack_options)<=0) - TEST_ERROR; + GOERROR; if (h5repack_end (&pack_options)<0) - TEST_ERROR; + GOERROR; PASSED(); } else { @@ -897,17 +902,17 @@ if (szip_can_encode) { #if defined (H5_HAVE_FILTER_SZIP) if (szip_can_encode) { if (h5repack_init (&pack_options, 0)<0) - TEST_ERROR; + GOERROR; if (h5repack_addfilter("dset_szip:NONE",&pack_options)<0) - TEST_ERROR; + GOERROR; if (h5repack(FNAME7,FNAME7OUT,&pack_options) < 0) - TEST_ERROR; - if (h5diff(FNAME7,FNAME7OUT,NULL,NULL,&diff_options) == 1) - TEST_ERROR; + GOERROR; + if (h5diff(FNAME7,FNAME7OUT,NULL,NULL,&diff_options) >0) + GOERROR; if (h5repack_verify(FNAME7OUT,&pack_options)<=0) - TEST_ERROR; + GOERROR; if (h5repack_end (&pack_options)<0) - TEST_ERROR; + GOERROR; PASSED(); } else { @@ -922,15 +927,15 @@ if (szip_can_encode) { #ifdef H5_HAVE_FILTER_DEFLATE if (h5repack_init (&pack_options, 0)<0) - TEST_ERROR; + GOERROR; if (h5repack(FNAME8,FNAME8OUT,&pack_options) < 0) - TEST_ERROR; - if (h5diff(FNAME8,FNAME8OUT,NULL,NULL,&diff_options) == 1) - TEST_ERROR; + GOERROR; + if (h5diff(FNAME8,FNAME8OUT,NULL,NULL,&diff_options) >0) + GOERROR; if (h5repack_verify(FNAME8OUT,&pack_options)<=0) - TEST_ERROR; + GOERROR; if (h5repack_end (&pack_options)<0) - TEST_ERROR; + GOERROR; PASSED(); #else @@ -942,17 +947,17 @@ if (szip_can_encode) { #ifdef H5_HAVE_FILTER_DEFLATE if (h5repack_init (&pack_options, 0)<0) - TEST_ERROR; + GOERROR; if (h5repack_addfilter("dset_deflate:NONE",&pack_options)<0) - TEST_ERROR; + GOERROR; if (h5repack(FNAME8,FNAME8OUT,&pack_options) < 0) - TEST_ERROR; - if (h5diff(FNAME8,FNAME8OUT,NULL,NULL,&diff_options) == 1) - TEST_ERROR; + GOERROR; + if (h5diff(FNAME8,FNAME8OUT,NULL,NULL,&diff_options) >0) + GOERROR; if (h5repack_verify(FNAME8OUT,&pack_options)<=0) - TEST_ERROR; + GOERROR; if (h5repack_end (&pack_options)<0) - TEST_ERROR; + GOERROR; PASSED(); #else @@ -965,15 +970,15 @@ if (szip_can_encode) { #ifdef H5_HAVE_FILTER_SHUFFLE if (h5repack_init (&pack_options, 0)<0) - TEST_ERROR; + GOERROR; if (h5repack(FNAME9,FNAME9OUT,&pack_options) < 0) - TEST_ERROR; - if (h5diff(FNAME9,FNAME9OUT,NULL,NULL,&diff_options) == 1) - TEST_ERROR; + GOERROR; + if (h5diff(FNAME9,FNAME9OUT,NULL,NULL,&diff_options) >0) + GOERROR; if (h5repack_verify(FNAME9OUT,&pack_options)<=0) - TEST_ERROR; + GOERROR; if (h5repack_end (&pack_options)<0) - TEST_ERROR; + GOERROR; PASSED(); #else @@ -984,17 +989,17 @@ if (szip_can_encode) { #ifdef H5_HAVE_FILTER_SHUFFLE if (h5repack_init (&pack_options, 0)<0) - TEST_ERROR; + GOERROR; if (h5repack_addfilter("dset_shuffle:NONE",&pack_options)<0) - TEST_ERROR; + GOERROR; if (h5repack(FNAME9,FNAME9OUT,&pack_options) < 0) - TEST_ERROR; - if (h5diff(FNAME9,FNAME9OUT,NULL,NULL,&diff_options) == 1) - TEST_ERROR; + GOERROR; + if (h5diff(FNAME9,FNAME9OUT,NULL,NULL,&diff_options) >0) + GOERROR; if (h5repack_verify(FNAME9OUT,&pack_options)<=0) - TEST_ERROR; + GOERROR; if (h5repack_end (&pack_options)<0) - TEST_ERROR; + GOERROR; PASSED(); #else @@ -1005,15 +1010,15 @@ if (szip_can_encode) { #ifdef H5_HAVE_FILTER_FLETCHER32 if (h5repack_init (&pack_options, 0)<0) - TEST_ERROR; + GOERROR; if (h5repack(FNAME10,FNAME10OUT,&pack_options) < 0) - TEST_ERROR; - if (h5diff(FNAME10,FNAME10OUT,NULL,NULL,&diff_options) == 1) - TEST_ERROR; + GOERROR; + if (h5diff(FNAME10,FNAME10OUT,NULL,NULL,&diff_options) >0) + GOERROR; if (h5repack_verify(FNAME10OUT,&pack_options)<=0) - TEST_ERROR; + GOERROR; if (h5repack_end (&pack_options)<0) - TEST_ERROR; + GOERROR; PASSED(); #else @@ -1024,17 +1029,17 @@ if (szip_can_encode) { #ifdef H5_HAVE_FILTER_FLETCHER32 if (h5repack_init (&pack_options, 0)<0) - TEST_ERROR; + GOERROR; if (h5repack_addfilter("dset_fletcher32:NONE",&pack_options)<0) - TEST_ERROR; + GOERROR; if (h5repack(FNAME10,FNAME10OUT,&pack_options) < 0) - TEST_ERROR; - if (h5diff(FNAME10,FNAME10OUT,NULL,NULL,&diff_options) == 1) - TEST_ERROR; + GOERROR; + if (h5diff(FNAME10,FNAME10OUT,NULL,NULL,&diff_options) >0) + GOERROR; if (h5repack_verify(FNAME10OUT,&pack_options)<=0) - TEST_ERROR; + GOERROR; if (h5repack_end (&pack_options)<0) - TEST_ERROR; + GOERROR; PASSED(); #else @@ -1046,15 +1051,15 @@ if (szip_can_encode) { #ifdef H5_HAVE_FILTER_NBIT if (h5repack_init (&pack_options, 0)<0) - TEST_ERROR; + GOERROR; if (h5repack(FNAME12,FNAME12OUT,&pack_options) < 0) - TEST_ERROR; - if (h5diff(FNAME12,FNAME12OUT,NULL,NULL,&diff_options) == 1) - TEST_ERROR; + GOERROR; + if (h5diff(FNAME12,FNAME12OUT,NULL,NULL,&diff_options) >0) + GOERROR; if (h5repack_verify(FNAME12OUT,&pack_options)<=0) - TEST_ERROR; + GOERROR; if (h5repack_end (&pack_options)<0) - TEST_ERROR; + GOERROR; PASSED(); #else @@ -1065,17 +1070,17 @@ if (szip_can_encode) { #ifdef H5_HAVE_FILTER_NBIT if (h5repack_init (&pack_options, 0)<0) - TEST_ERROR; + GOERROR; if (h5repack_addfilter("dset_nbit:NONE",&pack_options)<0) - TEST_ERROR; + GOERROR; if (h5repack(FNAME12,FNAME12OUT,&pack_options) < 0) - TEST_ERROR; - if (h5diff(FNAME12,FNAME12OUT,NULL,NULL,&diff_options) == 1) - TEST_ERROR; + GOERROR; + if (h5diff(FNAME12,FNAME12OUT,NULL,NULL,&diff_options) >0) + GOERROR; if (h5repack_verify(FNAME12OUT,&pack_options)<=0) - TEST_ERROR; + GOERROR; if (h5repack_end (&pack_options)<0) - TEST_ERROR; + GOERROR; PASSED(); #else @@ -1086,17 +1091,17 @@ if (szip_can_encode) { #ifdef H5_HAVE_FILTER_NBIT if (h5repack_init (&pack_options, 0)<0) - TEST_ERROR; + GOERROR; if (h5repack_addfilter("dset_int31:NBIT",&pack_options)<0) - TEST_ERROR; + GOERROR; if (h5repack(FNAME12,FNAME12OUT,&pack_options) < 0) - TEST_ERROR; - if (h5diff(FNAME12,FNAME12OUT,NULL,NULL,&diff_options) == 1) - TEST_ERROR; + GOERROR; + if (h5diff(FNAME12,FNAME12OUT,NULL,NULL,&diff_options) >0) + GOERROR; if (h5repack_verify(FNAME12OUT,&pack_options)<=0) - TEST_ERROR; + GOERROR; if (h5repack_end (&pack_options)<0) - TEST_ERROR; + GOERROR; PASSED(); #else @@ -1106,15 +1111,15 @@ if (szip_can_encode) { #ifdef H5_HAVE_FILTER_SCALEOFFSET if (h5repack_init (&pack_options, 0)<0) - TEST_ERROR; + GOERROR; if (h5repack(FNAME13,FNAME13OUT,&pack_options) < 0) - TEST_ERROR; - if (h5diff(FNAME13,FNAME13OUT,NULL,NULL,&diff_options) == 1) - TEST_ERROR; + GOERROR; + if (h5diff(FNAME13,FNAME13OUT,NULL,NULL,&diff_options) >0) + GOERROR; if (h5repack_verify(FNAME13OUT,&pack_options)<=0) - TEST_ERROR; + GOERROR; if (h5repack_end (&pack_options)<0) - TEST_ERROR; + GOERROR; PASSED(); #else @@ -1125,17 +1130,17 @@ if (szip_can_encode) { #ifdef H5_HAVE_FILTER_SCALEOFFSET if (h5repack_init (&pack_options, 0)<0) - TEST_ERROR; + GOERROR; if (h5repack_addfilter("dset_scaleoffset:NONE",&pack_options)<0) - TEST_ERROR; + GOERROR; if (h5repack(FNAME13,FNAME13OUT,&pack_options) < 0) - TEST_ERROR; - if (h5diff(FNAME13,FNAME13OUT,NULL,NULL,&diff_options) == 1) - TEST_ERROR; + GOERROR; + if (h5diff(FNAME13,FNAME13OUT,NULL,NULL,&diff_options) >0) + GOERROR; if (h5repack_verify(FNAME13OUT,&pack_options)<=0) - TEST_ERROR; + GOERROR; if (h5repack_end (&pack_options)<0) - TEST_ERROR; + GOERROR; PASSED(); #else @@ -1147,17 +1152,17 @@ if (szip_can_encode) { #ifdef H5_HAVE_FILTER_SCALEOFFSET if (h5repack_init (&pack_options, 0)<0) - TEST_ERROR; + GOERROR; if (h5repack_addfilter("dset_none:SOFF=31,IN",&pack_options)<0) - TEST_ERROR; + GOERROR; if (h5repack(FNAME13,FNAME13OUT,&pack_options) < 0) - TEST_ERROR; - if (h5diff(FNAME13,FNAME13OUT,NULL,NULL,&diff_options) == 1) - TEST_ERROR; + GOERROR; + if (h5diff(FNAME13,FNAME13OUT,NULL,NULL,&diff_options) >0) + GOERROR; if (h5repack_verify(FNAME13OUT,&pack_options)<=0) - TEST_ERROR; + GOERROR; if (h5repack_end (&pack_options)<0) - TEST_ERROR; + GOERROR; PASSED(); #else @@ -1183,17 +1188,17 @@ if (szip_can_encode) { if (szip_can_encode) { if (h5repack_init (&pack_options, 0)<0) - TEST_ERROR; + GOERROR; if (h5repack_addfilter("dset_deflate:SZIP=8,NN",&pack_options)<0) - TEST_ERROR; + GOERROR; if (h5repack(FNAME11,FNAME11OUT,&pack_options) < 0) - TEST_ERROR; - if (h5diff(FNAME11,FNAME11OUT,NULL,NULL,&diff_options) == 1) - TEST_ERROR; + GOERROR; + if (h5diff(FNAME11,FNAME11OUT,NULL,NULL,&diff_options) >0) + GOERROR; if (h5repack_verify(FNAME11OUT,&pack_options)<=0) - TEST_ERROR; + GOERROR; if (h5repack_end (&pack_options)<0) - TEST_ERROR; + GOERROR; PASSED(); } else { @@ -1211,17 +1216,17 @@ if (szip_can_encode) { if (szip_can_encode) { if (h5repack_init (&pack_options, 0)<0) - TEST_ERROR; + GOERROR; if (h5repack_addfilter("dset_szip:GZIP=1",&pack_options)<0) - TEST_ERROR; + GOERROR; if (h5repack(FNAME11,FNAME11OUT,&pack_options) < 0) - TEST_ERROR; - if (h5diff(FNAME11,FNAME11OUT,NULL,NULL,&diff_options) == 1) - TEST_ERROR; + GOERROR; + if (h5diff(FNAME11,FNAME11OUT,NULL,NULL,&diff_options) >0) + GOERROR; if (h5repack_verify(FNAME11OUT,&pack_options)<=0) - TEST_ERROR; + GOERROR; if (h5repack_end (&pack_options)<0) - TEST_ERROR; + GOERROR; PASSED(); } else { @@ -1243,17 +1248,17 @@ if (szip_can_encode) { && defined (H5_HAVE_FILTER_FLETCHER32) && defined (H5_HAVE_FILTER_SHUFFLE) if (h5repack_init (&pack_options, 0)<0) - TEST_ERROR; + GOERROR; if (h5repack_addfilter("NONE",&pack_options)<0) - TEST_ERROR; + GOERROR; if (h5repack(FNAME11,FNAME11OUT,&pack_options) < 0) - TEST_ERROR; - if (h5diff(FNAME11,FNAME11OUT,NULL,NULL,&diff_options) == 1) - TEST_ERROR; + GOERROR; + if (h5diff(FNAME11,FNAME11OUT,NULL,NULL,&diff_options) >0) + GOERROR; if (h5repack_verify(FNAME11OUT,&pack_options)<=0) - TEST_ERROR; + GOERROR; if (h5repack_end (&pack_options)<0) - TEST_ERROR; + GOERROR; PASSED(); #else @@ -1266,15 +1271,15 @@ if (szip_can_encode) { */ TESTING(" big file"); if (h5repack_init (&pack_options, 0)<0) - TEST_ERROR; + GOERROR; if (h5repack(FNAME14,FNAME14OUT,&pack_options) < 0) - TEST_ERROR; - if (h5diff(FNAME14,FNAME14OUT,NULL,NULL,&diff_options) == 1) - TEST_ERROR; + GOERROR; + if (h5diff(FNAME14,FNAME14OUT,NULL,NULL,&diff_options) >0) + GOERROR; if (h5repack_verify(FNAME14OUT,&pack_options)<=0) - TEST_ERROR; + GOERROR; if (h5repack_end (&pack_options)<0) - TEST_ERROR; + GOERROR; PASSED(); diff --git a/tools/lib/h5diff_array.c b/tools/lib/h5diff_array.c index a01aefe..45f46ad 100644 --- a/tools/lib/h5diff_array.c +++ b/tools/lib/h5diff_array.c @@ -712,13 +712,13 @@ hsize_t diff_datum(void *_mem1, iszero1=all_zero(_mem1, H5Tget_size(m_type)); iszero2=all_zero(_mem2, H5Tget_size(m_type)); - if (iszero1==1 || iszero2==1) + if (iszero1 != iszero2) { - return 0; + return 1; } - else + else if (!iszero1 && !iszero2) { - + /*------------------------------------------------------------------------- * H5T_STD_REF_DSETREG * Dataset region reference diff --git a/tools/lib/h5diff_attr.c b/tools/lib/h5diff_attr.c index 346d64f..c99a1ae 100644 --- a/tools/lib/h5diff_attr.c +++ b/tools/lib/h5diff_attr.c @@ -38,7 +38,7 @@ */ int diff_attr(hid_t loc1_id, - hid_t loc2_id, + hid_t loc2_id, const char *path1, const char *path2, diff_opt_t *options) @@ -51,13 +51,13 @@ int diff_attr(hid_t loc1_id, hid_t ftype2_id=-1; /* file data type ID */ hid_t mtype1_id=-1; /* memory data type ID */ hid_t mtype2_id=-1; /* memory data type ID */ - size_t msize1; /* memory size of memory type */ - size_t msize2; /* memory size of memory type */ - void *buf1=NULL; /* data buffer */ - void *buf2=NULL; /* data buffer */ - hsize_t nelmts1; /* number of elements in dataset */ - int rank1; /* rank of dataset */ - int rank2; /* rank of dataset */ + size_t msize1; /* memory size of memory type */ + size_t msize2; /* memory size of memory type */ + void *buf1=NULL; /* data buffer */ + void *buf2=NULL; /* data buffer */ + hsize_t nelmts1; /* number of elements in dataset */ + int rank1; /* rank of dataset */ + int rank2; /* rank of dataset */ hsize_t dims1[H5S_MAX_RANK];/* dimensions of dataset */ hsize_t dims2[H5S_MAX_RANK];/* dimensions of dataset */ char name1[512]; @@ -65,9 +65,9 @@ int diff_attr(hid_t loc1_id, char np1[512]; char np2[512]; int n1, n2, i, j; - int ret=0; hsize_t nfound; int cmp=1; + int ret=0; if ((n1 = H5Aget_num_attrs(loc1_id))<0) goto error; @@ -83,33 +83,26 @@ int diff_attr(hid_t loc1_id, buf1=NULL; buf2=NULL; - /*------------------------------------------------------------------------- - * open - *------------------------------------------------------------------------- - */ /* open attribute */ if ((attr1_id = H5Aopen_idx(loc1_id, (unsigned)i))<0) goto error; - if ((attr2_id = H5Aopen_idx(loc2_id, (unsigned)i))<0) - goto error; - - /* get name */ + /* get name */ if (H5Aget_name( attr1_id, 255, name1 )<0) goto error; - if (H5Aget_name( attr2_id, 255, name2 )<0) - goto error; - if (HDstrcmp(name1,name2)!=0) + /* use the name on the first file to open the second file */ + H5E_BEGIN_TRY { - if (options->m_verbose) + if ((attr2_id = H5Aopen_name(loc2_id, name1))<0) { - parallel_print("Different name for attributes: <%s> and <%s>\n", name1, name2); + ret = 1; + goto error; } - H5Aclose(attr1_id); - H5Aclose(attr2_id); - ret=1; - continue; - } + } H5E_END_TRY; + + /* get name */ + if (H5Aget_name( attr2_id, 255, name2 )<0) + goto error; /* get the file datatype */ if ((ftype1_id = H5Aget_type( attr1_id )) < 0 ) @@ -180,7 +173,7 @@ int diff_attr(hid_t loc1_id, buf1=(void *) HDmalloc((unsigned)(nelmts1*msize1)); buf2=(void *) HDmalloc((unsigned)(nelmts1*msize2)); if ( buf1==NULL || buf2==NULL){ - parallel_print( "cannot read into memory\n" ); + printf( "cannot read into memory\n" ); goto error; } if (H5Aread(attr1_id,mtype1_id,buf1)<0) @@ -313,7 +306,7 @@ error: } H5E_END_TRY; options->err_stat=1; - return 0; + return ret; } |