From 77b493eea3b68cd7348be16488c68efb44687e2d Mon Sep 17 00:00:00 2001 From: Jonathan Kim Date: Mon, 30 Nov 2009 16:25:41 -0500 Subject: [PATCH] [svn-r17938] Purpose: Fix potential problem similar to Bug1672 (getting garbage values) Description: This will resolve the potential problem like Bug1672 when comparing attributes. It improves the performance by not calling diff_array twice. (diffing time in half). Little clean up on comment lines. Refer to the Bug fix 1672. (also svn revision 17905 on trunk) Tested on: linux32 (jam) , linux64 (almani), solaris (linew) --- tools/lib/h5diff_attr.c | 106 +++++++++++++++++----------------------- 1 file changed, 44 insertions(+), 62 deletions(-) diff --git a/tools/lib/h5diff_attr.c b/tools/lib/h5diff_attr.c index 69bd44ca89..73a7ee7fb2 100644 --- a/tools/lib/h5diff_attr.c +++ b/tools/lib/h5diff_attr.c @@ -130,9 +130,9 @@ hsize_t diff_attr(hid_t loc1_id, goto error; - /*------------------------------------------------------------------------- + /*---------------------------------------------------------------------- * check for comparable TYPE and SPACE - *------------------------------------------------------------------------- + *---------------------------------------------------------------------- */ if ( msize1 != msize2 @@ -175,9 +175,9 @@ hsize_t diff_attr(hid_t loc1_id, } - /*------------------------------------------------------------------------- + /*--------------------------------------------------------------------- * read - *------------------------------------------------------------------------- + *---------------------------------------------------------------------- */ nelmts1=1; for (j=0; j",name1,path1); sprintf(np2,"%s of <%s>",name2,path2); - /*------------------------------------------------------------------------- + /*--------------------------------------------------------------------- * array compare - *------------------------------------------------------------------------- + *---------------------------------------------------------------------- */ /* always print name */ - if (options->m_verbose) + /* verbose (-v) and report (-r) mode */ + if(options->m_verbose || options->m_report) { do_print_objname ("attribute", np1, np2); nfound = diff_array(buf1, @@ -222,67 +223,48 @@ hsize_t diff_attr(hid_t loc1_id, print_found(nfound); } - /* check first if we have differences */ + /* quiet mode (-q), just count differences */ + else if(options->m_quiet) + { + nfound = diff_array(buf1, + buf2, + nelmts1, + (hsize_t)0, + rank1, + dims1, + options, + np1, + np2, + mtype1_id, + attr1_id, + attr2_id); + } + /* the rest (-c, none, ...) */ else { - if (options->m_quiet==0) - { - /* shut up temporarily */ - options->m_quiet=1; - nfound = diff_array(buf1, - buf2, - nelmts1, - (hsize_t)0, - rank1, - dims1, - options, - np1, - np2, - mtype1_id, - attr1_id, - attr2_id); - /* print again */ - options->m_quiet=0; - if (nfound) - { - do_print_objname ("attribute", np1, np2); - nfound = diff_array(buf1, - buf2, - nelmts1, - (hsize_t)0, - rank1, - dims1, - options, - np1, - np2, - mtype1_id, - attr1_id, - attr2_id); + do_print_objname ("attribute", np1, np2); + nfound = diff_array(buf1, + buf2, + nelmts1, + (hsize_t)0, + rank1, + dims1, + options, + np1, + np2, + mtype1_id, + attr1_id, + attr2_id); + + /* not comparable, no display the different number */ + if (!options->not_cmp) print_found(nfound); - } /*if*/ - } /*if*/ - /* in quiet mode, just count differences */ - else - { - nfound = diff_array(buf1, - buf2, - nelmts1, - (hsize_t)0, - rank1, - dims1, - options, - np1, - np2, - mtype1_id, - attr1_id, - attr2_id); - } /*else quiet */ - } /*else verbose */ + } - /*------------------------------------------------------------------------- + /*---------------------------------------------------------------------- * close - *------------------------------------------------------------------------- + *---------------------------------------------------------------------- */ if (H5Tclose(ftype1_id)<0)