summaryrefslogtreecommitdiffstats
path: root/tools/lib
diff options
context:
space:
mode:
Diffstat (limited to 'tools/lib')
-rw-r--r--tools/lib/h5diff.c187
-rw-r--r--tools/lib/h5diff.h171
-rw-r--r--tools/lib/h5diff_array.c303
-rw-r--r--tools/lib/h5diff_attr.c222
-rw-r--r--tools/lib/h5diff_dset.c219
-rw-r--r--tools/lib/h5diff_util.c12
6 files changed, 588 insertions, 526 deletions
diff --git a/tools/lib/h5diff.c b/tools/lib/h5diff.c
index ab90ebb..818bc40 100644
--- a/tools/lib/h5diff.c
+++ b/tools/lib/h5diff.c
@@ -16,13 +16,28 @@
#include "h5diff.h"
#include "H5private.h"
+
+
+/*-------------------------------------------------------------------------
+ * Function: print_objname
+ *
+ * Purpose: print object name only when:
+ * 1) verbose mode
+ * 2) when diff was found (normal mode)
+ *-------------------------------------------------------------------------
+ */
+int print_objname(diff_opt_t *options, hsize_t nfound)
+{
+ return ( (options->m_verbose || nfound) && !options->m_quiet) ?1:0;
+}
+
/*-------------------------------------------------------------------------
* Function: h5diff
*
- * Purpose: public function, can be called in an applicattion program.
+ * Purpose: public function, can be called in an application program.
* return differences between 2 HDF5 files
*
- * Return: Number of differences found; -1 for error.
+ * Return: Number of differences found.
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
*
@@ -31,17 +46,25 @@
*-------------------------------------------------------------------------
*/
-int h5diff(const char *fname1,
- const char *fname2,
- const char *objname1,
- const char *objname2,
- diff_opt_t *options)
+hsize_t h5diff(const char *fname1,
+ const char *fname2,
+ const char *objname1,
+ const char *objname2,
+ diff_opt_t *options)
{
int nobjects1, nobjects2;
trav_info_t *info1=NULL;
trav_info_t *info2=NULL;
hid_t file1_id, file2_id;
- int nfound=0;
+ hsize_t nfound=0;
+
+ if (options->m_quiet &&
+ (options->m_verbose || options->m_report))
+ {
+ printf("Error: -q (quiet mode) cannot be added to verbose or report modes\n");
+ options->err_stat=1;
+ return 0;
+ }
/*-------------------------------------------------------------------------
* open the files first; if they are not valid, no point in continuing
@@ -50,31 +73,40 @@ int h5diff(const char *fname1,
/* disable error reporting */
H5E_BEGIN_TRY {
-
/* Open the files */
if ((file1_id=H5Fopen(fname1,H5F_ACC_RDONLY,H5P_DEFAULT))<0 )
{
printf("h5diff: <%s>: unable to open file\n", fname1 );
- nfound = -1;
+ options->err_stat=1;
+ goto out;
}
if ((file2_id=H5Fopen(fname2,H5F_ACC_RDONLY,H5P_DEFAULT))<0 )
{
printf("h5diff: <%s>: unable to open file\n", fname2 );
- nfound = -1;
+ options->err_stat=1;
+ goto out;
}
/* enable error reporting */
} H5E_END_TRY;
- if (nfound<0)
- return -1;
+
/*-------------------------------------------------------------------------
* get the number of objects in the files
*-------------------------------------------------------------------------
*/
-
nobjects1 = h5trav_getinfo( file1_id, NULL, 0 );
nobjects2 = h5trav_getinfo( file2_id, NULL, 0 );
+ if (nobjects1<0 || nobjects2<0)
+ {
+ printf("Error: Could not get get file contents\n");
+ options->err_stat=1;
+ goto out;
+ }
+
+ assert(nobjects1>0);
+ assert(nobjects2>0);
+
/*-------------------------------------------------------------------------
* get the list of objects in the files
*-------------------------------------------------------------------------
@@ -84,7 +116,10 @@ int h5diff(const char *fname1,
info2 = (trav_info_t*) malloc( nobjects2 * sizeof(trav_info_t));
if (info1==NULL || info2==NULL)
{
- nfound=-1;
+ printf("Error: Not enough memory for object list\n");
+ options->err_stat=1;
+ if (info1) h5trav_freeinfo(info1,nobjects1);
+ if (info2) h5trav_freeinfo(info2,nobjects1);
goto out;
}
@@ -99,6 +134,7 @@ int h5diff(const char *fname1,
if ( objname1 )
{
assert(objname2);
+ options->cmn_objs=1; /* eliminate warning */
nfound=diff_compare(file1_id,fname1,objname1,nobjects1,info1,
file2_id,fname2,objname2,nobjects2,info2,options);
}
@@ -120,12 +156,13 @@ int h5diff(const char *fname1,
out:
/* close */
- H5Fclose(file1_id);
- H5Fclose(file2_id);
-
- return nfound;
+ H5E_BEGIN_TRY {
+ H5Fclose(file1_id);
+ H5Fclose(file2_id);
+ } H5E_END_TRY;
+ return nfound;
}
@@ -145,13 +182,13 @@ out:
*
*-------------------------------------------------------------------------
*/
-int diff_match( hid_t file1_id,
- int nobjects1,
- trav_info_t *info1,
- hid_t file2_id,
- int nobjects2,
- trav_info_t *info2,
- diff_opt_t *options )
+hsize_t diff_match( hid_t file1_id,
+ int nobjects1,
+ trav_info_t *info1,
+ hid_t file2_id,
+ int nobjects2,
+ trav_info_t *info2,
+ diff_opt_t *options )
{
int more_names_exist = (nobjects1>0 && nobjects2>0) ? 1 : 0;
trav_table_t *table=NULL;
@@ -160,7 +197,8 @@ int diff_match( hid_t file1_id,
int curr2=0;
unsigned infile[2];
char c1, c2;
- int nfound=0, i;
+ hsize_t nfound=0;
+ int i;
/*-------------------------------------------------------------------------
* build the list
@@ -168,7 +206,6 @@ int diff_match( hid_t file1_id,
*/
trav_table_init( &table );
-
while ( more_names_exist )
{
/* criteria is string compare */
@@ -226,7 +263,7 @@ int diff_match( hid_t file1_id,
*-------------------------------------------------------------------------
*/
- if (options->verbose)
+ if (options->m_verbose)
{
printf("\n");
printf("file1 file2\n");
@@ -249,12 +286,15 @@ int diff_match( hid_t file1_id,
for (i = 0; i < table->nobjs; i++)
{
if ( table->objs[i].flags[0] && table->objs[i].flags[1] )
+ {
+ options->cmn_objs=1;
nfound+=diff( file1_id,
table->objs[i].name,
file2_id,
table->objs[i].name,
options,
table->objs[i].type );
+ }
}
/* free table */
@@ -294,21 +334,21 @@ int diff_match( hid_t file1_id,
*-------------------------------------------------------------------------
*/
-int diff_compare( hid_t file1_id,
- const char *file1_name,
- const char *obj1_name,
- int nobjects1,
- trav_info_t *info1,
- hid_t file2_id,
- const char *file2_name,
- const char *obj2_name,
- int nobjects2,
- trav_info_t *info2,
- diff_opt_t *options )
+hsize_t diff_compare( hid_t file1_id,
+ const char *file1_name,
+ const char *obj1_name,
+ int nobjects1,
+ trav_info_t *info1,
+ hid_t file2_id,
+ const char *file2_name,
+ const char *obj2_name,
+ int nobjects2,
+ trav_info_t *info2,
+ diff_opt_t *options )
{
- int f1=0, f2=0;
- int nfound=0;
+ int f1=0, f2=0;
+ hsize_t nfound=0;
int i = h5trav_getindex( obj1_name, nobjects1, info1 );
int j = h5trav_getindex( obj2_name, nobjects2, info2 );
@@ -323,20 +363,23 @@ int diff_compare( hid_t file1_id,
printf( "Object <%s> could not be found in <%s>\n", obj2_name, file2_name );
f2=1;
}
- if ( f1 || f2 )
- return -1;
+ if ( f1 || f2 ) {
+ options->err_stat=1;
+ return 0;
+ }
/* use the name with "/" first, as obtained by iterator function */
obj1_name=info1[i].name;
obj2_name=info2[j].name;
/* objects are not the same type */
- if ( info1[i].type != info2[j].type && options->verbose)
+ if ( info1[i].type != info2[j].type)
{
+ if (options->m_verbose)
printf("Comparison not possible: <%s> is of type %s and <%s> is of type %s\n",
obj1_name, get_type(info1[i].type),
obj2_name, get_type(info2[j].type) );
- return 1;
+ return 0;
}
nfound=diff( file1_id, obj1_name, file2_id, obj2_name, options, info1[i].type );
@@ -364,23 +407,23 @@ int diff_compare( hid_t file1_id,
*-------------------------------------------------------------------------
*/
-int diff( hid_t file1_id,
- const char *path1,
- hid_t file2_id,
- const char *path2,
- diff_opt_t *options,
- H5G_obj_t type )
+hsize_t diff( hid_t file1_id,
+ const char *path1,
+ hid_t file2_id,
+ const char *path2,
+ diff_opt_t *options,
+ H5G_obj_t1 type )
{
- hid_t type1_id=-1;
- hid_t type2_id=-1;
- hid_t grp1_id=-1;
- hid_t grp2_id=-1;
+ hid_t type1_id;
+ hid_t type2_id;
+ hid_t grp1_id;
+ hid_t grp2_id;
int ret;
H5G_stat_t sb1;
H5G_stat_t sb2;
char *buf1=NULL;
char *buf2=NULL;
- int nfound=-1;
+ hsize_t nfound=0;
switch ( type )
{
@@ -389,9 +432,9 @@ int diff( hid_t file1_id,
*-------------------------------------------------------------------------
*/
case H5G_DATASET:
- if (options->verbose)
- printf( "Dataset: <%s> and <%s>\n",path1,path2);
- nfound=diff_dataset(file1_id,file2_id,path1,path2,options);
+ nfound=diff_dataset(file1_id,file2_id,path1,path2,options);
+ if (print_objname(options,nfound))
+ printf( "Dataset: <%s> and <%s>\n",path1,path2);
break;
/*-------------------------------------------------------------------------
@@ -399,9 +442,6 @@ int diff( hid_t file1_id,
*-------------------------------------------------------------------------
*/
case H5G_TYPE:
- if (options->verbose)
- printf( "Datatype: <%s> and <%s>\n",path1,path2);
-
if ((type1_id = H5Topen(file1_id, path1))<0)
goto out;
if ((type2_id = H5Topen(file2_id, path2))<0)
@@ -412,6 +452,9 @@ int diff( hid_t file1_id,
/* if H5Tequal is > 0 then the datatypes refer to the same datatype */
nfound = (ret>0) ? 0 : 1;
+
+ if (print_objname(options,nfound))
+ printf( "Datatype: <%s> and <%s>\n",path1,path2);
/*-------------------------------------------------------------------------
* compare attributes
@@ -419,7 +462,7 @@ int diff( hid_t file1_id,
*-------------------------------------------------------------------------
*/
if (path1)
- nfound=diff_attr(type1_id,type2_id,path1,path2,options);
+ diff_attr(type1_id,type2_id,path1,path2,options);
if ( H5Tclose(type1_id)<0)
goto out;
@@ -433,9 +476,6 @@ int diff( hid_t file1_id,
*-------------------------------------------------------------------------
*/
case H5G_GROUP:
- if (options->verbose)
- printf( "Group: <%s> and <%s>\n",path1,path2);
-
if ((grp1_id = H5Gopen(file1_id, path1))<0)
goto out;
if ((grp2_id = H5Gopen(file2_id, path2))<0)
@@ -445,6 +485,9 @@ int diff( hid_t file1_id,
/* if "path1" != "path2" then the groups are "different" */
nfound = (ret!=0) ? 1 : 0;
+
+ if (print_objname(options,nfound))
+ printf( "Group: <%s> and <%s>\n",path1,path2);
/*-------------------------------------------------------------------------
* compare attributes
@@ -452,7 +495,7 @@ int diff( hid_t file1_id,
*-------------------------------------------------------------------------
*/
if (path1)
- nfound=diff_attr(grp1_id,grp2_id,path1,path2,options);
+ diff_attr(grp1_id,grp2_id,path1,path2,options);
if ( H5Gclose(grp1_id)<0)
goto out;
@@ -467,9 +510,6 @@ int diff( hid_t file1_id,
*-------------------------------------------------------------------------
*/
case H5G_LINK:
- if (options->verbose)
- printf( "Link: <%s> and <%s>\n",path1,path2);
-
if (H5Gget_objinfo(file1_id,path1,FALSE,&sb1)<0)
goto out;
if (H5Gget_objinfo(file1_id,path1,FALSE,&sb2)<0)
@@ -488,6 +528,9 @@ int diff( hid_t file1_id,
/* if "buf1" != "buf2" then the links are "different" */
nfound = (ret!=0) ? 1 : 0;
+ if (print_objname(options,nfound))
+ printf( "Link: <%s> and <%s>\n",path1,path2);
+
if (buf1) {
free(buf1);
buf1=NULL;
@@ -503,7 +546,7 @@ int diff( hid_t file1_id,
default:
nfound=0;
- if (options->verbose) {
+ if (options->m_verbose) {
printf("Comparison not supported: <%s> and <%s> are of type %s\n",
path1, path2, get_type(type) );
}
diff --git a/tools/lib/h5diff.h b/tools/lib/h5diff.h
index 0c52f76..4c56f81 100644
--- a/tools/lib/h5diff.h
+++ b/tools/lib/h5diff.h
@@ -18,6 +18,9 @@
#include "hdf5.h"
#include "h5trav.h"
+typedef H5G_obj_t H5G_obj_t1;
+
+
#if 0
#define H5DIFF_DEBUG
@@ -51,14 +54,18 @@
*/
typedef struct {
- int r; /* report only what objects differ */
- int d; /* delta */
- double delta; /* delta value */
- int p; /* relative error */
- double percent; /* relative error value */
- int n; /* count */
- int count; /* count value */
- int verbose; /* print information */
+ int m_quiet; /* quiet mide: no output at all */
+ int m_report; /* report mode: print the data */
+ int m_verbose; /* verbose mode: print the data, list of objcets, warnings */
+ int d; /* delta, absolute value to compare */
+ double delta; /* delta value */
+ int p; /* relative error to compare*/
+ double percent; /* relative error value */
+ int n; /* count, compare up to count */
+ int count; /* count value */
+ int err_stat; /* an error ocurred (1, error, 0, no error) */
+ int cmn_objs; /* do we have comparable objects */
+
} diff_opt_t;
@@ -72,11 +79,11 @@ typedef struct {
extern "C" {
#endif
-int h5diff(const char *fname1,
- const char *fname2,
- const char *objname1,
- const char *objname2,
- diff_opt_t *options);
+hsize_t h5diff(const char *fname1,
+ const char *fname2,
+ const char *objname1,
+ const char *objname2,
+ diff_opt_t *options);
#ifdef __cplusplus
@@ -91,56 +98,56 @@ int h5diff(const char *fname1,
*/
-int diff_dataset( hid_t file1_id,
- hid_t file2_id,
- const char *obj1_name,
- const char *obj2_name,
- diff_opt_t *options );
+hsize_t diff_dataset( hid_t file1_id,
+ hid_t file2_id,
+ const char *obj1_name,
+ const char *obj2_name,
+ diff_opt_t *options );
-int diff_datasetid( hid_t dset1_id,
- hid_t dset2_id,
- const char *obj1_name,
- const char *obj2_name,
+hsize_t diff_datasetid( hid_t dset1_id,
+ hid_t dset2_id,
+ const char *obj1_name,
+ const char *obj2_name,
+ diff_opt_t *options );
+
+hsize_t diff( hid_t file1_id,
+ const char *path1,
+ hid_t file2_id,
+ const char *path2,
+ diff_opt_t *options,
+ H5G_obj_t1 type );
+
+hsize_t diff_compare( hid_t file1_id,
+ const char *file1_name,
+ const char *obj1_name,
+ int nobjects1,
+ trav_info_t *info1,
+ hid_t file2_id,
+ const char *file2_name,
+ const char *obj2_name,
+ int nobjects2,
+ trav_info_t *info2,
+ diff_opt_t *options );
+
+hsize_t diff_match( hid_t file1_id,
+ int nobjects1,
+ trav_info_t *info1,
+ hid_t file2_id,
+ int nobjects2,
+ trav_info_t *info2,
diff_opt_t *options );
-int diff( hid_t file1_id,
- const char *path1,
- hid_t file2_id,
- const char *path2,
- diff_opt_t *options,
- H5G_obj_t type );
-
-int diff_compare( hid_t file1_id,
- const char *file1_name,
- const char *obj1_name,
- int nobjects1,
- trav_info_t *info1,
- hid_t file2_id,
- const char *file2_name,
- const char *obj2_name,
- int nobjects2,
- trav_info_t *info2,
- diff_opt_t *options );
-
-int diff_match( hid_t file1_id,
- int nobjects1,
- trav_info_t *info1,
- hid_t file2_id,
- int nobjects2,
- trav_info_t *info2,
- diff_opt_t *options );
-
-int diff_array( void *_mem1,
- void *_mem2,
- hsize_t nelmts,
- int rank,
- hsize_t *dims,
- diff_opt_t *options,
- const char *name1,
- const char *name2,
- hid_t m_type,
- hid_t container1_id,
- hid_t container2_id); /* dataset where the reference came from*/
+hsize_t diff_array( void *_mem1,
+ void *_mem2,
+ hsize_t nelmts,
+ int rank,
+ hsize_t *dims,
+ diff_opt_t *options,
+ const char *name1,
+ const char *name2,
+ hid_t m_type,
+ hid_t container1_id,
+ hid_t container2_id); /* dataset where the reference came from*/
int diff_can_type( hid_t f_type1, /* file data type */
@@ -169,6 +176,7 @@ int diff_attr(hid_t loc1_id,
*-------------------------------------------------------------------------
*/
+void print_found(hsize_t nfound);
void print_type(hid_t type);
const char* diff_basename(const char *name);
const char* get_type(int type);
@@ -184,15 +192,52 @@ void print_pos( int *ph,
const char *obj1,
const char *obj2 );
+int print_objname(diff_opt_t *options, hsize_t nfound);
+
+
#if defined (H5DIFF_DEBUG)
void print_sizes( const char *obj1, const char *obj2,
hid_t f_type1, hid_t f_type2,
hid_t m_type1, hid_t m_type2 );
#endif
-#ifdef NOT_YET
-void diff_list( const char *filename, int nobjects, trav_info_t *info );
-#endif /* NOT_YET */
+
+hsize_t diff_native_uchar(unsigned char *mem1,
+ unsigned char *mem2,
+ hsize_t i,
+ int rank,
+ hsize_t *acc,
+ hsize_t *pos,
+ diff_opt_t *options,
+ const char *obj1,
+ const char *obj2,
+ int *ph);
+
+
+hsize_t diff_char(unsigned char *mem1,
+ unsigned char *mem2,
+ hsize_t i,
+ int rank,
+ hsize_t *acc,
+ hsize_t *pos,
+ diff_opt_t *options,
+ const char *obj1,
+ const char *obj2,
+ int *ph);
+
+hsize_t diff_datum(void *_mem1,
+ void *_mem2,
+ hid_t m_type,
+ hsize_t i,
+ int rank,
+ hsize_t *acc,
+ hsize_t *pos,
+ diff_opt_t *options,
+ const char *obj1,
+ const char *obj2,
+ hid_t container1_id,
+ hid_t container2_id, /*where the reference came from*/
+ int *ph); /*print header */
diff --git a/tools/lib/h5diff_array.c b/tools/lib/h5diff_array.c
index 838cc3d..51d87d0 100644
--- a/tools/lib/h5diff_array.c
+++ b/tools/lib/h5diff_array.c
@@ -16,54 +16,28 @@
#include "h5diff.h"
#include "H5private.h"
-static int diff_datum(void *_mem1,
- void *_mem2,
- hid_t m_type,
- hsize_t i,
- int rank,
- hsize_t *acc,
- hsize_t *pos,
- diff_opt_t *options,
- const char *obj1,
- const char *obj2,
- hid_t container1_id,
- hid_t container2_id,
- int *ph);
-
-static int diff_native_uchar(unsigned char *mem1,
- unsigned char *mem2,
- hsize_t i,
- int rank,
- hsize_t *acc,
- hsize_t *pos,
- diff_opt_t *options,
- const char *obj1,
- const char *obj2,
- int *ph);
-
-static int diff_char(unsigned char *mem1,
- unsigned char *mem2,
- hsize_t i,
- int rank,
- hsize_t *acc,
- hsize_t *pos,
- diff_opt_t *options,
- const char *obj1,
- const char *obj2,
- int *ph);
-
+/* local functions */
+static void close_obj(H5G_obj_t1 obj_type, hid_t obj_id);
+static int diff_region(hid_t region1_id, hid_t region2_id);
static hbool_t is_zero(const void *_mem, size_t size);
-static void close_obj(H5G_obj_t obj_type, hid_t obj_id);
-static int diff_region(hid_t region1_id, hid_t region2_id);
-
+/*-------------------------------------------------------------------------
+ * Function: print_data
+ *
+ * Purpose: print data only in report or verbose modes
+ *-------------------------------------------------------------------------
+ */
+static int print_data(diff_opt_t *options)
+{
+ return (options->m_report || options->m_verbose==1)?1:0;
+}
/*-------------------------------------------------------------------------
* Function: diff_array
*
* Purpose: compare two memory buffers;
*
- * Return: number of differences found, -1 on error
+ * Return: number of differences found
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
*
@@ -72,19 +46,19 @@ static int diff_region(hid_t region1_id, hid_t region2_id);
*-------------------------------------------------------------------------
*/
-int diff_array( void *_mem1,
- void *_mem2,
- hsize_t nelmts,
- int rank,
- hsize_t *dims,
- diff_opt_t *options,
- const char *name1,
- const char *name2,
- hid_t m_type,
- hid_t container1_id,
- hid_t container2_id) /* dataset where the reference came from*/
+hsize_t diff_array( void *_mem1,
+ void *_mem2,
+ hsize_t nelmts,
+ int rank,
+ hsize_t *dims,
+ diff_opt_t *options,
+ const char *name1,
+ const char *name2,
+ hid_t m_type,
+ hid_t container1_id,
+ hid_t container2_id) /* dataset where the reference came from*/
{
- int nfound=0; /* number of differences found */
+ hsize_t nfound=0; /* number of differences found */
size_t size; /* size of datum */
unsigned char *mem1 = (unsigned char*)_mem1;
unsigned char *mem2 = (unsigned char*)_mem2;
@@ -164,7 +138,7 @@ int diff_array( void *_mem1,
*
* Purpose: Compare the values pointed to in _MEM1 and _MEM2 of type M_TYPE
*
- * Return: number of differences found, -1 on error
+ * Return: number of differences found
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
*
@@ -197,20 +171,19 @@ int diff_array( void *_mem1,
*-------------------------------------------------------------------------
*/
-static
-int diff_datum( void *_mem1,
- void *_mem2,
- hid_t m_type,
- hsize_t i,
- int rank,
- hsize_t *acc,
- hsize_t *pos,
- diff_opt_t *options,
- const char *obj1,
- const char *obj2,
- hid_t container1_id,
- hid_t container2_id, /*where the reference came from*/
- int *ph) /*print header */
+hsize_t diff_datum(void *_mem1,
+ void *_mem2,
+ hid_t m_type,
+ hsize_t i,
+ int rank,
+ hsize_t *acc,
+ hsize_t *pos,
+ diff_opt_t *options,
+ const char *obj1,
+ const char *obj2,
+ hid_t container1_id,
+ hid_t container2_id, /*where the reference came from*/
+ int *ph) /*print header */
{
char fmt_llong[255], fmt_ullong[255];
char fmt_llongp[255], fmt_ullongp[255];
@@ -228,13 +201,14 @@ int diff_datum( void *_mem1,
size_t size;
int iszero1;
int iszero2;
- H5G_obj_t obj1_type;
- H5G_obj_t obj2_type;
+ H5G_obj_t1 obj1_type;
+ H5G_obj_t1 obj2_type;
hid_t obj1_id;
hid_t obj2_id;
H5G_stat_t sb1;
H5G_stat_t sb2;
- int nfound=0; /* differences found */
+ hsize_t nfound=0; /* differences found */
+ int ret;
/* Build default formats for long long types */
sprintf(fmt_llong, "%%%sd %%%sd %%%sd\n",
@@ -381,7 +355,7 @@ int diff_datum( void *_mem1,
if (HDstrcmp(enum_name1,enum_name2)!=0)
{
nfound=1;
- if ( options->r==0 )
+ if ( print_data(options) )
{
print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
printf(SPACES);
@@ -501,17 +475,22 @@ int diff_datum( void *_mem1,
hid_t region2_id;
if ((obj1_id = H5Rdereference(container1_id, H5R_DATASET_REGION, _mem1))<0)
- return -1;
+ ret= -1;
if ((obj2_id = H5Rdereference(container2_id, H5R_DATASET_REGION, _mem2))<0)
- return -1;
+ ret= -1;
if (H5Gget_objinfo(obj1_id, ".", FALSE, &sb1)<0)
- return -1;
+ ret= -1;
if (H5Gget_objinfo(obj2_id, ".", FALSE, &sb2)<0)
- return -1;
+ ret= -1;
if ((region1_id = H5Rget_region(container1_id, H5R_DATASET_REGION, _mem1))<0)
- return -1;
+ ret= -1;
if ((region2_id = H5Rget_region(container2_id, H5R_DATASET_REGION, _mem2))<0)
- return -1;
+ ret= -1;
+
+ if (ret==-1) {
+ options->err_stat=1;
+ return 0;
+ }
if (diff_region(region1_id,region2_id))
{
@@ -535,9 +514,13 @@ int diff_datum( void *_mem1,
{
if ((obj1_type = H5Rget_obj_type(container1_id, H5R_OBJECT, _mem1))<0)
- return -1;
+ ret= -1;
if ((obj2_type = H5Rget_obj_type(container2_id, H5R_OBJECT, _mem2))<0)
- return -1;
+ ret= -1;
+ if (ret==-1) {
+ options->err_stat=1;
+ return 0;
+ }
/* check object type */
if (obj1_type!=obj2_type)
@@ -547,9 +530,13 @@ int diff_datum( void *_mem1,
}
if ((obj1_id = H5Rdereference(container1_id, H5R_OBJECT, _mem1))<0)
- return -1;
+ ret= -1;
if ((obj2_id = H5Rdereference(container2_id, H5R_OBJECT, _mem2))<0)
- return -1;
+ ret= -1;
+ if (ret==-1) {
+ options->err_stat=1;
+ return 0;
+ }
/*deep compare */
@@ -597,7 +584,7 @@ int diff_datum( void *_mem1,
{
if (abs(temp1_char-temp2_char) > options->delta)
{
- if ( options->r==0 )
+ if ( print_data(options) )
{
print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
printf(SPACES);
@@ -611,7 +598,7 @@ int diff_datum( void *_mem1,
{
if ( temp1_char!=0 && abs(1-temp2_char/temp1_char) > options->percent )
{
- if ( options->r==0 )
+ if ( print_data(options) )
{
print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
printf(SPACES);
@@ -627,7 +614,7 @@ int diff_datum( void *_mem1,
if ( temp1_char!=0 && abs(1-temp2_char/temp1_char) > options->percent &&
abs(temp1_char-temp2_char) > options->delta )
{
- if ( options->r==0 )
+ if ( print_data(options) )
{
print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
printf(SPACES);
@@ -639,7 +626,7 @@ int diff_datum( void *_mem1,
}
else if (temp1_char != temp2_char)
{
- if ( options->r==0 )
+ if ( print_data(options) )
{
print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
printf(SPACES);
@@ -667,7 +654,7 @@ int diff_datum( void *_mem1,
{
if (abs(temp1_uchar-temp2_uchar) > options->delta)
{
- if ( options->r==0 )
+ if ( print_data(options) )
{
print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
printf(SPACES);
@@ -681,7 +668,7 @@ int diff_datum( void *_mem1,
{
if ( temp1_uchar!=0 && abs(1-temp2_uchar/temp1_uchar) > options->percent )
{
- if ( options->r==0 )
+ if ( print_data(options) )
{
print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
printf(SPACES);
@@ -697,7 +684,7 @@ int diff_datum( void *_mem1,
if ( temp1_uchar!=0 && abs(1-temp2_uchar/temp1_uchar) > options->percent &&
abs(temp1_uchar-temp2_uchar) > options->delta )
{
- if ( options->r==0 )
+ if ( print_data(options) )
{
print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
printf(SPACES);
@@ -709,7 +696,7 @@ int diff_datum( void *_mem1,
}
else if (temp1_uchar != temp2_uchar)
{
- if ( options->r==0 )
+ if ( print_data(options) )
{
print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
printf(SPACES);
@@ -739,7 +726,7 @@ int diff_datum( void *_mem1,
{
if (abs(temp1_short-temp2_short) > options->delta)
{
- if ( options->r==0 )
+ if ( print_data(options) )
{
print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
printf(SPACES);
@@ -753,7 +740,7 @@ int diff_datum( void *_mem1,
{
if ( temp1_short!=0 && abs(1-temp2_short/temp1_short) > options->percent )
{
- if ( options->r==0 )
+ if ( print_data(options) )
{
print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
printf(SPACES);
@@ -769,7 +756,7 @@ int diff_datum( void *_mem1,
if ( temp1_short!=0 && abs(1-temp2_short/temp1_short) > options->percent &&
abs(temp1_short-temp2_short) > options->delta )
{
- if ( options->r==0 )
+ if ( print_data(options) )
{
print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
printf(SPACES);
@@ -781,7 +768,7 @@ int diff_datum( void *_mem1,
}
else if (temp1_short != temp2_short)
{
- if ( options->r==0 )
+ if ( print_data(options) )
{
print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
printf(SPACES);
@@ -812,7 +799,7 @@ int diff_datum( void *_mem1,
if (abs(temp1_ushort-temp2_ushort) > options->delta)
{
- if ( options->r==0 )
+ if ( print_data(options) )
{
print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
printf(SPACES);
@@ -827,7 +814,7 @@ int diff_datum( void *_mem1,
if ( temp1_ushort!=0 && abs(1-temp2_ushort/temp1_ushort) > options->percent )
{
- if ( options->r==0 )
+ if ( print_data(options) )
{
print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
printf(SPACES);
@@ -844,7 +831,7 @@ int diff_datum( void *_mem1,
abs(temp1_ushort-temp2_ushort) > options->delta )
{
- if ( options->r==0 )
+ if ( print_data(options) )
{
print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
printf(SPACES);
@@ -857,7 +844,7 @@ int diff_datum( void *_mem1,
else if (temp1_ushort != temp2_ushort)
{
- if ( options->r==0 )
+ if ( print_data(options) )
{
print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
printf(SPACES);
@@ -889,7 +876,7 @@ int diff_datum( void *_mem1,
if (abs(temp1_int-temp2_int) > options->delta)
{
- if ( options->r==0 )
+ if ( print_data(options) )
{
print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
printf(SPACES);
@@ -904,7 +891,7 @@ int diff_datum( void *_mem1,
if ( temp1_int!=0 && abs(1-temp2_int/temp1_int) > options->percent )
{
- if ( options->r==0 )
+ if ( print_data(options) )
{
print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
printf(SPACES);
@@ -921,7 +908,7 @@ int diff_datum( void *_mem1,
abs(temp1_int-temp2_int) > options->delta )
{
- if ( options->r==0 )
+ if ( print_data(options) )
{
print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
printf(SPACES);
@@ -934,7 +921,7 @@ int diff_datum( void *_mem1,
else if (temp1_int != temp2_int)
{
- if ( options->r==0 )
+ if ( print_data(options) )
{
print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
printf(SPACES);
@@ -966,7 +953,7 @@ int diff_datum( void *_mem1,
if (abs((int)(temp1_uint-temp2_uint)) > options->delta)
{
- if ( options->r==0 )
+ if ( print_data(options) )
{
print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
printf(SPACES);
@@ -981,7 +968,7 @@ int diff_datum( void *_mem1,
if ( temp1_uint!=0 && abs((int)(1-temp2_uint/temp1_uint)) > options->percent )
{
- if ( options->r==0 )
+ if ( print_data(options) )
{
print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
printf(SPACES);
@@ -998,7 +985,7 @@ int diff_datum( void *_mem1,
abs((int)(temp1_uint-temp2_uint)) > options->delta )
{
- if ( options->r==0 )
+ if ( print_data(options) )
{
print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
printf(SPACES);
@@ -1011,7 +998,7 @@ int diff_datum( void *_mem1,
else if (temp1_uint != temp2_uint)
{
- if ( options->r==0 )
+ if ( print_data(options) )
{
print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
printf(SPACES);
@@ -1044,7 +1031,7 @@ int diff_datum( void *_mem1,
if (labs(temp1_long-temp2_long) > (long)options->delta)
{
- if ( options->r==0 )
+ if ( print_data(options) )
{
print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
printf(SPACES);
@@ -1059,7 +1046,7 @@ int diff_datum( void *_mem1,
if ( temp1_long!=0 && labs(1-temp2_long/temp1_long) > (long)options->percent )
{
- if ( options->r==0 )
+ if ( print_data(options) )
{
print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
printf(SPACES);
@@ -1076,7 +1063,7 @@ int diff_datum( void *_mem1,
labs(temp1_long-temp2_long) > (long)options->delta )
{
- if ( options->r==0 )
+ if ( print_data(options) )
{
print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
printf(SPACES);
@@ -1089,7 +1076,7 @@ int diff_datum( void *_mem1,
else if (temp1_long != temp2_long)
{
- if ( options->r==0 )
+ if ( print_data(options) )
{
print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
printf(SPACES);
@@ -1121,7 +1108,7 @@ int diff_datum( void *_mem1,
if (labs((long)(temp1_ulong-temp2_ulong)) > (long)options->delta)
{
- if ( options->r==0 )
+ if ( print_data(options) )
{
print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
printf(SPACES);
@@ -1136,7 +1123,7 @@ int diff_datum( void *_mem1,
if ( temp1_ulong!=0 && labs((long)(1-temp2_ulong/temp1_ulong)) > (long)options->percent )
{
- if ( options->r==0 )
+ if ( print_data(options) )
{
print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
printf(SPACES);
@@ -1153,7 +1140,7 @@ int diff_datum( void *_mem1,
labs((long)(temp1_ulong-temp2_ulong)) > (long)options->delta )
{
- if ( options->r==0 )
+ if ( print_data(options) )
{
print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
printf(SPACES);
@@ -1166,7 +1153,7 @@ int diff_datum( void *_mem1,
else if (temp1_ulong != temp2_ulong)
{
- if ( options->r==0 )
+ if ( print_data(options) )
{
print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
printf(SPACES);
@@ -1197,7 +1184,7 @@ int diff_datum( void *_mem1,
if (labs((long)(temp1_llong-temp2_llong)) > (long)options->delta)
{
- if ( options->r==0 )
+ if ( print_data(options) )
{
print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
printf(SPACES);
@@ -1212,7 +1199,7 @@ int diff_datum( void *_mem1,
if ( temp1_llong!=0 && labs((long)(1-temp2_llong/temp1_llong)) > (long)options->percent )
{
- if ( options->r==0 )
+ if ( print_data(options) )
{
print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
printf(SPACES);
@@ -1229,7 +1216,7 @@ int diff_datum( void *_mem1,
labs((long)(temp1_llong-temp2_llong)) > (long)options->delta )
{
- if ( options->r==0 )
+ if ( print_data(options) )
{
print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
printf(SPACES);
@@ -1242,7 +1229,7 @@ int diff_datum( void *_mem1,
else if (temp1_llong != temp2_llong)
{
- if ( options->r==0 )
+ if ( print_data(options) )
{
print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
printf(SPACES);
@@ -1273,7 +1260,7 @@ int diff_datum( void *_mem1,
if (labs((long)(temp1_ullong-temp2_ullong)) > (long)options->delta)
{
- if ( options->r==0 )
+ if ( print_data(options) )
{
print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
printf(SPACES);
@@ -1289,7 +1276,7 @@ int diff_datum( void *_mem1,
if ( temp1_ullong!=0 && labs((long)(1-temp2_ullong/temp1_ullong)) > (long)options->percent )
{
- if ( options->r==0 )
+ if ( print_data(options) )
{
print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
printf(SPACES);
@@ -1307,7 +1294,7 @@ int diff_datum( void *_mem1,
labs((long)(temp1_ullong-temp2_ullong)) > (long)options->delta )
{
- if ( options->r==0 )
+ if ( print_data(options) )
{
print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
printf(SPACES);
@@ -1321,7 +1308,7 @@ int diff_datum( void *_mem1,
else if (temp1_ullong != temp2_ullong)
{
- if ( options->r==0 )
+ if ( print_data(options) )
{
print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
printf(SPACES);
@@ -1358,7 +1345,7 @@ int diff_datum( void *_mem1,
if (fabs(temp1_float-temp2_float) > options->delta)
{
- if ( options->r==0 )
+ if ( print_data(options) )
{
print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
printf(SPACES);
@@ -1373,7 +1360,7 @@ int diff_datum( void *_mem1,
if ( temp1_float!=0 && fabs(1-temp2_float/temp1_float) > options->percent )
{
- if ( options->r==0 )
+ if ( print_data(options) )
{
print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
printf(SPACES);
@@ -1390,7 +1377,7 @@ int diff_datum( void *_mem1,
fabs(temp1_float-temp2_float) > options->delta )
{
- if ( options->r==0 )
+ if ( print_data(options) )
{
print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
printf(SPACES);
@@ -1403,7 +1390,7 @@ int diff_datum( void *_mem1,
else if (temp1_float != temp2_float)
{
- if ( options->r==0 )
+ if ( print_data(options) )
{
print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
printf(SPACES);
@@ -1433,7 +1420,7 @@ int diff_datum( void *_mem1,
if (fabs(temp1_double-temp2_double) > options->delta)
{
- if ( options->r==0 )
+ if ( print_data(options) )
{
print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
printf(SPACES);
@@ -1448,7 +1435,7 @@ int diff_datum( void *_mem1,
if ( temp1_double!=0 && fabs(1-temp2_double/temp1_double) > options->percent )
{
- if ( options->r==0 )
+ if ( print_data(options) )
{
print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
printf(SPACES);
@@ -1465,7 +1452,7 @@ int diff_datum( void *_mem1,
fabs(temp1_double-temp2_double) > options->delta )
{
- if ( options->r==0 )
+ if ( print_data(options) )
{
print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
printf(SPACES);
@@ -1478,7 +1465,7 @@ int diff_datum( void *_mem1,
else if (temp1_double != temp2_double)
{
- if ( options->r==0 )
+ if ( print_data(options) )
{
print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
printf(SPACES);
@@ -1514,19 +1501,18 @@ int diff_datum( void *_mem1,
*-------------------------------------------------------------------------
*/
-static
-int diff_native_uchar(unsigned char *mem1,
- unsigned char *mem2,
- hsize_t i,
- int rank,
- hsize_t *acc,
- hsize_t *pos,
- diff_opt_t *options,
- const char *obj1,
- const char *obj2,
- int *ph)
+hsize_t diff_native_uchar(unsigned char *mem1,
+ unsigned char *mem2,
+ hsize_t i,
+ int rank,
+ hsize_t *acc,
+ hsize_t *pos,
+ diff_opt_t *options,
+ const char *obj1,
+ const char *obj2,
+ int *ph)
{
- int nfound=0; /* differences found */
+ hsize_t nfound=0; /* differences found */
unsigned char temp1_uchar;
unsigned char temp2_uchar;
@@ -1538,7 +1524,7 @@ int diff_native_uchar(unsigned char *mem1,
{
if (abs(temp1_uchar-temp2_uchar) > options->delta)
{
- if ( options->r==0 )
+ if ( print_data(options) )
{
print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
printf(SPACES);
@@ -1552,7 +1538,7 @@ int diff_native_uchar(unsigned char *mem1,
{
if ( temp1_uchar!=0 && abs(1-temp2_uchar/temp1_uchar) > options->percent )
{
- if ( options->r==0 )
+ if ( print_data(options) )
{
print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
printf(SPACES);
@@ -1568,7 +1554,7 @@ int diff_native_uchar(unsigned char *mem1,
if ( temp1_uchar!=0 && abs(1-temp2_uchar/temp1_uchar) > options->percent &&
abs(temp1_uchar-temp2_uchar) > options->delta )
{
- if ( options->r==0 )
+ if ( print_data(options) )
{
print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
printf(SPACES);
@@ -1580,7 +1566,7 @@ int diff_native_uchar(unsigned char *mem1,
}
else if (temp1_uchar != temp2_uchar)
{
- if ( options->r==0 )
+ if ( print_data(options) )
{
print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
printf(SPACES);
@@ -1607,19 +1593,18 @@ int diff_native_uchar(unsigned char *mem1,
*-------------------------------------------------------------------------
*/
-static
-int diff_char(unsigned char *mem1,
- unsigned char *mem2,
- hsize_t i,
- int rank,
- hsize_t *acc,
- hsize_t *pos,
- diff_opt_t *options,
- const char *obj1,
- const char *obj2,
- int *ph)
+hsize_t diff_char(unsigned char *mem1,
+ unsigned char *mem2,
+ hsize_t i,
+ int rank,
+ hsize_t *acc,
+ hsize_t *pos,
+ diff_opt_t *options,
+ const char *obj1,
+ const char *obj2,
+ int *ph)
{
- int nfound=0; /* differences found */
+ hsize_t nfound=0; /* differences found */
unsigned char temp1_uchar;
unsigned char temp2_uchar;
@@ -1628,7 +1613,7 @@ int diff_char(unsigned char *mem1,
if (temp1_uchar != temp2_uchar)
{
- if ( options->r==0 )
+ if ( print_data(options) )
{
print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
printf(SPACES);
@@ -1673,7 +1658,7 @@ is_zero(const void *_mem, size_t size)
*/
static
-void close_obj(H5G_obj_t obj_type, hid_t obj_id)
+void close_obj(H5G_obj_t1 obj_type, hid_t obj_id)
{
switch (obj_type) {
diff --git a/tools/lib/h5diff_attr.c b/tools/lib/h5diff_attr.c
index a7e6ce4..bf3a874 100644
--- a/tools/lib/h5diff_attr.c
+++ b/tools/lib/h5diff_attr.c
@@ -28,7 +28,6 @@
* Return:
* 0 : no differences found
* 1 : differences found
- * -1 : error ocurred
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
*
@@ -52,7 +51,7 @@ 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 msize1; /* memory size of memory type */
size_t msize2; /* memory size of memory type */
void *buf1=NULL; /* data buffer */
void *buf2=NULL; /* data buffer */
@@ -61,11 +60,12 @@ int diff_attr(hid_t loc1_id,
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[255];
+ char name1[255];
char name2[255];
- int n1, n2, i, j, nfound;
- H5S_class_t space_type1, space_type2;
+ int n1, n2, i, j;
int ret=0;
+ hsize_t nfound;
+ int cmp=1;
if ((n1 = H5Aget_num_attrs(loc1_id))<0)
goto error;
@@ -100,7 +100,7 @@ int diff_attr(hid_t loc1_id,
if (HDstrcmp(name1,name2)!=0)
{
- if (options->verbose)
+ if (options->m_verbose)
{
printf("Different name for attributes: <%s> and <%s>\n", name1, name2);
}
@@ -110,119 +110,109 @@ int diff_attr(hid_t loc1_id,
continue;
}
- /* get the file datatype */
- if ((ftype1_id = H5Aget_type( attr1_id )) < 0 )
- goto error;
+ /* get the file datatype */
+ if ((ftype1_id = H5Aget_type( attr1_id )) < 0 )
+ goto error;
if ((ftype2_id = H5Aget_type( attr2_id )) < 0 )
- goto error;
+ goto error;
- /* get the dataspace handle */
- if ((space1_id = H5Aget_space( attr1_id )) < 0 )
- goto error;
+ /* get the dataspace handle */
+ if ((space1_id = H5Aget_space( attr1_id )) < 0 )
+ goto error;
if ((space2_id = H5Aget_space( attr2_id )) < 0 )
- goto error;
+ goto error;
- space_type1 = H5Sget_simple_extent_type(space1_id);
- space_type2 = H5Sget_simple_extent_type(space2_id);
+ /* get dimensions */
+ if ( (rank1 = H5Sget_simple_extent_dims(space1_id, dims1, NULL)) < 0 )
+ goto error;
+ if ( (rank2 = H5Sget_simple_extent_dims(space2_id, dims2, NULL)) < 0 )
+ goto error;
- /* get dimensions */
- if(space_type1 == H5S_NULL && space_type2 == H5S_NULL) {
- if(options->verbose) {
- printf( "Attribute: <%s> and <%s>\n",name1,name2);
- sprintf(name1,"%s of <%s>",name1,path1);
- sprintf(name2,"%s of <%s>",name2,path2);
- printf( "type %s %s difference\n",name1,name2);
- if ( !(H5Tequal(ftype1_id, ftype2_id)) && options->verbose) {
- printf("\t\t");
- print_type(ftype1_id);
- printf("\t\t");
- print_type(ftype2_id);
- printf("\n");
- }
-
- printf("1 differences found\n");
- }
- } else {
- if ( (rank1 = H5Sget_simple_extent_dims(space1_id, dims1, NULL)) < 0 )
- goto error;
+/*-------------------------------------------------------------------------
+ * check for comparable TYPE and SPACE
+ *-------------------------------------------------------------------------
+ */
+
+ if (diff_can_type(ftype1_id,
+ ftype2_id,
+ rank1,
+ rank2,
+ dims1,
+ dims2,
+ NULL,
+ NULL,
+ name1,
+ name2,
+ options)!=1)
+ cmp=0;
+/*-------------------------------------------------------------------------
+ * only attempt to compare if possible
+ *-------------------------------------------------------------------------
+ */
+ if (cmp)
+ {
+
+/*-------------------------------------------------------------------------
+ * read to memory
+ *-------------------------------------------------------------------------
+ */
+ nelmts1=1;
+ for (j=0; j<rank1; j++)
+ nelmts1*=dims1[j];
+ if ((mtype1_id=H5Tget_native_type(ftype1_id,H5T_DIR_DEFAULT))<0)
+ goto error;
+ if ((mtype2_id=H5Tget_native_type(ftype2_id,H5T_DIR_DEFAULT))<0)
+ goto error;
+ if ((msize1=H5Tget_size(mtype1_id))==0)
+ goto error;
+ if ((msize2=H5Tget_size(mtype2_id))==0)
+ goto error;
+
+ assert(msize1==msize2);
+
+ buf1=(void *) HDmalloc((unsigned)(nelmts1*msize1));
+ buf2=(void *) HDmalloc((unsigned)(nelmts1*msize2));
+ if ( buf1==NULL || buf2==NULL){
+ printf( "cannot read into memory\n" );
+ goto error;
+ }
+ if (H5Aread(attr1_id,mtype1_id,buf1)<0)
+ goto error;
+ if (H5Aread(attr2_id,mtype2_id,buf2)<0)
+ goto error;
- if ( (rank2 = H5Sget_simple_extent_dims(space2_id, dims2, NULL)) < 0 )
- goto error;
+
+/*-------------------------------------------------------------------------
+ * array compare
+ *-------------------------------------------------------------------------
+ */
+ sprintf(name1,"%s of <%s>",name1,path1);
+ sprintf(name2,"%s of <%s>",name2,path2);
+ nfound = diff_array(buf1,
+ buf2,
+ nelmts1,
+ rank1,
+ dims1,
+ options,
+ name1,
+ name2,
+ mtype1_id,
+ attr1_id,
+ attr2_id);
+
+ }/*cmp*/
- /*-------------------------------------------------------------------------
- * check for comparable TYPE and SPACE
- *-------------------------------------------------------------------------
- */
- if (diff_can_type(ftype1_id,
- ftype2_id,
- rank1,
- rank2,
- dims1,
- dims2,
- NULL,
- NULL,
- name1,
- name2,
- options)!=1)
- goto error;
-
- /*-------------------------------------------------------------------------
- * read to memory
- *-------------------------------------------------------------------------
- */
- nelmts1=1;
- for (j=0; j<rank1; j++)
- nelmts1*=dims1[j];
- if ((mtype1_id=H5Tget_native_type(ftype1_id,H5T_DIR_DEFAULT))<0)
- goto error;
- if ((mtype2_id=H5Tget_native_type(ftype2_id,H5T_DIR_DEFAULT))<0)
- goto error;
- if ((msize1=H5Tget_size(mtype1_id))==0)
- goto error;
- if ((msize2=H5Tget_size(mtype2_id))==0)
- goto error;
-
- assert(msize1==msize2);
-
- buf1=(void *) HDmalloc((unsigned)(nelmts1*msize1));
- buf2=(void *) HDmalloc((unsigned)(nelmts1*msize2));
- if ( buf1==NULL || buf2==NULL){
- printf( "cannot read into memory\n" );
- goto error;
- }
- if (H5Aread(attr1_id,mtype1_id,buf1)<0)
- goto error;
- if (H5Aread(attr2_id,mtype2_id,buf2)<0)
- goto error;
-
- /*-------------------------------------------------------------------------
- * array compare
- *-------------------------------------------------------------------------
- */
+/*-------------------------------------------------------------------------
+ * print how many differences were found
+ *-------------------------------------------------------------------------
+ */
+ if (print_objname(options,nfound))
+ {
+ printf( "Attribute: <%s> and <%s>\n",name1,name2);
+ print_found(nfound);
+ }
- if (options->verbose)
- printf( "Attribute: <%s> and <%s>\n",name1,name2);
- sprintf(name1,"%s of <%s>",name1,path1);
- sprintf(name2,"%s of <%s>",name2,path2);
- nfound = diff_array(buf1,
- buf2,
- nelmts1,
- rank1,
- dims1,
- options,
- name1,
- name2,
- mtype1_id,
- attr1_id,
- attr2_id);
-
- if (options->verbose && nfound)
- printf("%d differences found\n", nfound );
-
- if (mtype1_id && H5Tclose(mtype1_id)<0) goto error;
- if (mtype2_id && H5Tclose(mtype2_id)<0) goto error;
- }
/*-------------------------------------------------------------------------
* close
@@ -231,6 +221,8 @@ int diff_attr(hid_t loc1_id,
if (H5Tclose(ftype1_id)<0) goto error;
if (H5Tclose(ftype2_id)<0) goto error;
+ if (H5Tclose(mtype1_id)<0) goto error;
+ if (H5Tclose(mtype2_id)<0) goto error;
if (H5Sclose(space1_id)<0) goto error;
if (H5Sclose(space2_id)<0) goto error;
if (H5Aclose(attr1_id)<0) goto error;
@@ -247,18 +239,20 @@ error:
H5E_BEGIN_TRY {
H5Tclose(ftype1_id);
H5Tclose(ftype2_id);
- H5Tclose(mtype1_id);
+ H5Tclose(mtype1_id);
H5Tclose(mtype2_id);
- H5Sclose(space1_id);
+ H5Sclose(space1_id);
H5Sclose(space2_id);
- H5Aclose(attr1_id);
+ H5Aclose(attr1_id);
H5Aclose(attr2_id);
if (buf1)
HDfree(buf1);
if (buf2)
HDfree(buf2);
} H5E_END_TRY;
- return -1;
+
+ options->err_stat=1;
+ return 0;
}
diff --git a/tools/lib/h5diff_dset.c b/tools/lib/h5diff_dset.c
index 4f90d67..69acfbd 100644
--- a/tools/lib/h5diff_dset.c
+++ b/tools/lib/h5diff_dset.c
@@ -30,47 +30,43 @@
*
*-------------------------------------------------------------------------
*/
-int diff_dataset( hid_t file1_id,
- hid_t file2_id,
- const char *obj1_name,
- const char *obj2_name,
- diff_opt_t *options )
+hsize_t diff_dataset( hid_t file1_id,
+ hid_t file2_id,
+ const char *obj1_name,
+ const char *obj2_name,
+ diff_opt_t *options )
{
- hid_t dset1_id =-1;
- hid_t dset2_id =-1;
- hid_t dcpl1_id=-1;
- hid_t dcpl2_id=-1;
- int gout=0, nfound=0;
-
-
- /* disable error reporting */
- H5E_BEGIN_TRY {
+ hid_t dset1_id=-1;
+ hid_t dset2_id=-1;
+ hid_t dcpl1_id=-1;
+ hid_t dcpl2_id=-1;
+ hsize_t nfound=0;
/*-------------------------------------------------------------------------
* open the handles
*-------------------------------------------------------------------------
*/
-
+ /* disable error reporting */
+ H5E_BEGIN_TRY {
/* Open the datasets */
if ( (dset1_id = H5Dopen(file1_id,obj1_name)) < 0 )
{
printf("Cannot open dataset <%s>\n", obj1_name );
- gout=1;
+ goto error;
}
if ( (dset2_id = H5Dopen(file2_id,obj2_name)) < 0 )
{
printf("Cannot open dataset <%s>\n", obj2_name );
- gout=1;
+ goto error;
}
/* enable error reporting */
} H5E_END_TRY;
- if (gout)
- goto out;
+
if ((dcpl1_id=H5Dget_create_plist(dset1_id))<0)
- goto out;
+ goto error;
if ((dcpl2_id=H5Dget_create_plist(dset2_id))<0)
- goto out;
+ goto error;
/*-------------------------------------------------------------------------
* check if the dataset creation property list has filters that
@@ -79,8 +75,8 @@ int diff_dataset( hid_t file1_id,
* 2) the internal filters might be turned off
*-------------------------------------------------------------------------
*/
- if ((h5tools_canreadf((options->verbose?obj1_name:NULL),dcpl1_id)==1) &&
- (h5tools_canreadf((options->verbose?obj2_name:NULL),dcpl2_id)==1))
+ if ((h5tools_canreadf((options->m_verbose?obj1_name:NULL),dcpl1_id)==1) &&
+ (h5tools_canreadf((options->m_verbose?obj2_name:NULL),dcpl2_id)==1))
{
nfound=diff_datasetid(dset1_id,
dset2_id,
@@ -92,7 +88,19 @@ int diff_dataset( hid_t file1_id,
* close
*-------------------------------------------------------------------------
*/
-out:
+ /* disable error reporting */
+ H5E_BEGIN_TRY {
+ H5Pclose(dcpl1_id);
+ H5Pclose(dcpl2_id);
+ H5Dclose(dset1_id);
+ H5Dclose(dset2_id);
+ /* enable error reporting */
+ } H5E_END_TRY;
+
+ return nfound;
+
+error:
+ options->err_stat=1;
/* disable error reporting */
H5E_BEGIN_TRY {
H5Pclose(dcpl1_id);
@@ -123,11 +131,11 @@ out:
*
*-------------------------------------------------------------------------
*/
-int diff_datasetid( hid_t dset1_id,
- hid_t dset2_id,
- const char *obj1_name,
- const char *obj2_name,
- diff_opt_t *options )
+hsize_t diff_datasetid( hid_t dset1_id,
+ hid_t dset2_id,
+ const char *obj1_name,
+ const char *obj2_name,
+ diff_opt_t *options )
{
hid_t space1_id =-1;
hid_t space2_id =-1;
@@ -142,83 +150,37 @@ int diff_datasetid( hid_t dset1_id,
hsize_t dims2[H5S_MAX_RANK];
hsize_t maxdim1[H5S_MAX_RANK];
hsize_t maxdim2[H5S_MAX_RANK];
- int nfound=0; /* number of differences found */
const char *name1=NULL; /* relative names */
const char *name2=NULL;
hsize_t storage_size1;
hsize_t storage_size2;
- H5S_class_t space_type1, space_type2;
+ hsize_t nfound=0; /* number of differences found */
+ int cmp=1; /* do diff or not */
int i;
- if (obj1_name)
- name1=diff_basename(obj1_name);
- if (obj2_name)
- name2=diff_basename(obj2_name);
-
-/*-------------------------------------------------------------------------
- * Get the file data type
- *-------------------------------------------------------------------------
- */
-
- /* Get the data type */
- if ( (f_type1 = H5Dget_type(dset1_id)) < 0 )
- goto out;
-
- /* Get the data type */
- if ( (f_type2 = H5Dget_type(dset2_id)) < 0 )
- goto out;
-
-/*-------------------------------------------------------------------------
- * Get the file data space
- *-------------------------------------------------------------------------
- */
-
- /* Get the dataspace handle */
+ /* Get the dataspace handle */
if ( (space1_id = H5Dget_space(dset1_id)) < 0 )
- goto out;
+ goto error;
- if ( (space2_id = H5Dget_space(dset2_id)) < 0 )
- goto out;
-
- /* Get space type */
- space_type1 = H5Sget_simple_extent_type(space1_id);
- space_type2 = H5Sget_simple_extent_type(space2_id);
-
- /* get dimensions */
- if(space_type1 == H5S_NULL && space_type2 == H5S_NULL) {
- if(options->verbose) {
- /*printf( "Dataset: <%s> and <%s>\n",name1,name2);*/
- /*sprintf(name1,"%s of <%s>",name1,path1);
- sprintf(name2,"%s of <%s>",name2,path2);*/
- printf( "type %s %s difference\n",name1,name2);
-
- if ( !(H5Tequal(f_type1, f_type2)) && options->verbose) {
- printf("\t");
- print_type(f_type1);
- printf("\t\t");
- print_type(f_type2);
- printf("\n");
- }
-
- printf("1 differences found\n");
- nfound = 1;
- }
- goto out;
- }
-
/* Get rank */
if ( (rank1 = H5Sget_simple_extent_ndims(space1_id)) < 0 )
- goto out;
+ goto error;
+ /* Get the dataspace handle */
+ if ( (space2_id = H5Dget_space(dset2_id)) < 0 )
+ goto error;
+
+ /* Get rank */
if ( (rank2 = H5Sget_simple_extent_ndims(space2_id)) < 0 )
- goto out;
+ goto error;
/* Get dimensions */
if ( H5Sget_simple_extent_dims(space1_id,dims1,maxdim1) < 0 )
- goto out;
+ goto error;
+ /* Get dimensions */
if ( H5Sget_simple_extent_dims(space2_id,dims2,maxdim2) < 0 )
- goto out;
+ goto error;
/*-------------------------------------------------------------------------
* Get the file data type
@@ -227,11 +189,11 @@ int diff_datasetid( hid_t dset1_id,
/* Get the data type */
if ( (f_type1 = H5Dget_type(dset1_id)) < 0 )
- goto out;
+ goto error;
/* Get the data type */
if ( (f_type2 = H5Dget_type(dset2_id)) < 0 )
- goto out;
+ goto error;
/*-------------------------------------------------------------------------
@@ -243,9 +205,9 @@ int diff_datasetid( hid_t dset1_id,
storage_size2=H5Dget_storage_size(dset2_id);
if (storage_size1<=0 && storage_size2<=0)
{
- if (options->verbose && obj1_name && obj2_name)
+ if (options->m_verbose && obj1_name && obj2_name)
printf("<%s> and <%s> are empty datasets\n", obj1_name, obj2_name);
- goto out;
+ cmp=0;
}
@@ -265,15 +227,11 @@ int diff_datasetid( hid_t dset1_id,
obj1_name,
obj2_name,
options)!=1)
- goto out;
-
-
-
+ cmp=0;
/*-------------------------------------------------------------------------
* get number of elements
*-------------------------------------------------------------------------
*/
-
nelmts1 = 1;
for (i = 0; i < rank1; i++)
{
@@ -293,7 +251,7 @@ int diff_datasetid( hid_t dset1_id,
*-------------------------------------------------------------------------
*/
- if ( (H5Tequal(f_type1, f_type2)==0) && options->verbose && obj1_name)
+ if ( (H5Tequal(f_type1, f_type2)==0) && options->m_verbose && obj1_name)
{
printf("Warning: Different storage datatype\n");
printf("<%s> has file datatype ", obj1_name);
@@ -329,11 +287,11 @@ int diff_datasetid( hid_t dset1_id,
sign2=H5Tget_sign(m_type2);
if ( sign1 != sign2 )
{
- if (options->verbose && obj1_name) {
+ if (options->m_verbose && obj1_name) {
printf("Comparison not supported: <%s> has sign %s ", obj1_name, get_sign(sign1));
printf("and <%s> has sign %s\n", obj2_name, get_sign(sign2));
}
- goto out;
+ cmp=0;
}
/*-------------------------------------------------------------------------
@@ -363,13 +321,20 @@ int diff_datasetid( hid_t dset1_id,
}
assert(m_size1==m_size2);
+/*-------------------------------------------------------------------------
+ * only attempt to compare if possible
+ *-------------------------------------------------------------------------
+ */
+ if (cmp)
+ {
+
buf1 = (void *) HDmalloc((unsigned) (nelmts1*m_size1));
buf2 = (void *) HDmalloc((unsigned) (nelmts2*m_size2));
if ( buf1 == NULL || buf2 == NULL )
{
printf( "cannot read into memory\n" );
- goto out;
+ goto error;
}
/*-------------------------------------------------------------------------
@@ -378,15 +343,19 @@ int diff_datasetid( hid_t dset1_id,
*/
if ( H5Dread(dset1_id,m_type1,H5S_ALL,H5S_ALL,H5P_DEFAULT,buf1) < 0 )
- goto out;
+ goto error;
if ( H5Dread(dset2_id,m_type2,H5S_ALL,H5S_ALL,H5P_DEFAULT,buf2) < 0 )
- goto out;
+ goto error;
/*-------------------------------------------------------------------------
* array compare
*-------------------------------------------------------------------------
*/
+ if (obj1_name)
+ name1=diff_basename(obj1_name);
+ if (obj2_name)
+ name2=diff_basename(obj2_name);
nfound = diff_array(buf1,
buf2,
nelmts1,
@@ -398,10 +367,6 @@ int diff_datasetid( hid_t dset1_id,
m_type1,
dset1_id,
dset2_id);
-
- if (options->verbose && nfound)
- printf("%d differences found\n", nfound );
-
/*-------------------------------------------------------------------------
* compare attributes
* the if condition refers to cases when the dataset is a referenced object
@@ -409,18 +374,36 @@ int diff_datasetid( hid_t dset1_id,
*/
if (obj1_name)
- nfound=diff_attr(dset1_id,dset2_id,obj1_name,obj2_name,options);
+ diff_attr(dset1_id,dset2_id,obj1_name,obj2_name,options);
+
+ }/*cmp*/
/*-------------------------------------------------------------------------
* close
*-------------------------------------------------------------------------
*/
-
-out:
-
+
+
if ( buf1) HDfree(buf1);
if ( buf2) HDfree(buf2);
+ /* close */
+ /* disable error reporting */
+ H5E_BEGIN_TRY {
+ H5Sclose(space1_id);
+ H5Sclose(space2_id);
+ H5Tclose(f_type1);
+ H5Tclose(f_type2);
+ H5Tclose(m_type1);
+ H5Tclose(m_type2);
+ /* enable error reporting */
+ } H5E_END_TRY;
+ return nfound;
+
+error:
+ options->err_stat=1;
+ if ( buf1) HDfree(buf1);
+ if ( buf2) HDfree(buf2);
/* close */
/* disable error reporting */
H5E_BEGIN_TRY {
@@ -486,7 +469,7 @@ int diff_can_type( hid_t f_type1, /* file data type */
if ( tclass1 != tclass2 )
{
- if (options->verbose && obj1_name) {
+ if (options->m_verbose && obj1_name) {
printf("Comparison not possible: <%s> is of class %s and <%s> is of class %s\n",
obj1_name, get_class(tclass1),
obj2_name, get_class(tclass2) );
@@ -516,7 +499,7 @@ int diff_can_type( hid_t f_type1, /* file data type */
break;
default: /*H5T_TIME */
- if (options->verbose && obj1_name )
+ if (options->m_verbose && obj1_name )
printf("Comparison not supported: <%s> and <%s> are of class %s\n",
obj1_name,obj2_name,get_class(tclass2) );
return 0;
@@ -527,7 +510,7 @@ int diff_can_type( hid_t f_type1, /* file data type */
*-------------------------------------------------------------------------
*/
- if ( (H5Tequal(f_type1, f_type2)==0) && options->verbose && obj1_name)
+ if ( (H5Tequal(f_type1, f_type2)==0) && options->m_verbose && obj1_name)
{
printf("Warning: Different storage datatype\n");
printf("<%s> has file datatype ", obj1_name);
@@ -545,7 +528,7 @@ int diff_can_type( hid_t f_type1, /* file data type */
if ( rank1 != rank2 )
{
- if (options->verbose && obj1_name) {
+ if (options->m_verbose && obj1_name) {
printf("Comparison not supported: <%s> has rank %d, dimensions ", obj1_name, rank1);
print_dims(rank1,dims1);
printf(", max dimensions ");
@@ -583,7 +566,7 @@ int diff_can_type( hid_t f_type1, /* file data type */
if (dim_diff==1)
{
- if (options->verbose && obj1_name) {
+ if (options->m_verbose && obj1_name) {
printf("Comparison not supported: <%s> has rank %d, dimensions ", obj1_name, rank1);
print_dims(rank1,dims1);
if (maxdim1 && maxdim2) {
@@ -605,7 +588,7 @@ int diff_can_type( hid_t f_type1, /* file data type */
*/
if (maxdim1 && maxdim2 && maxdim_diff==1 && obj1_name )
{
- if (options->verbose) {
+ if (options->m_verbose) {
printf( "Warning: Different maximum dimensions\n");
printf("<%s> has max dimensions ", obj1_name);
print_dims(rank1,maxdim1);
diff --git a/tools/lib/h5diff_util.c b/tools/lib/h5diff_util.c
index 7af48c4..bbd1747 100644
--- a/tools/lib/h5diff_util.c
+++ b/tools/lib/h5diff_util.c
@@ -333,6 +333,18 @@ get_class(H5T_class_t tclass)
}
}
+/*-------------------------------------------------------------------------
+ * Function: print_found
+ *
+ * Purpose: print number of differences found
+ *
+ *-------------------------------------------------------------------------
+ */
+void print_found(hsize_t nfound)
+{
+ HDfprintf(stdout,"%Hu differences found\n",nfound);
+}
+
/*-------------------------------------------------------------------------
* Function: print_sizes