diff options
author | Bill Wendling <wendling@ncsa.uiuc.edu> | 2003-05-07 20:52:36 (GMT) |
---|---|---|
committer | Bill Wendling <wendling@ncsa.uiuc.edu> | 2003-05-07 20:52:36 (GMT) |
commit | db543f1a23194e81d0a984c346398e72bf4be87f (patch) | |
tree | 87ca6828a7687d0a5a88534f80d77e2ecc91c04b | |
parent | 36a0b8e3dd1c325c201c4cd5a094df8a3588fa9a (diff) | |
download | hdf5-db543f1a23194e81d0a984c346398e72bf4be87f.zip hdf5-db543f1a23194e81d0a984c346398e72bf4be87f.tar.gz hdf5-db543f1a23194e81d0a984c346398e72bf4be87f.tar.bz2 |
[svn-r6823] Purpose:
Code Improvements/Bug Fixes
Description:
Comparison of equality of a double/float variable to 0.0 is not
guaranteed to work and is bad practice.
In H5Fcontig.c, a warning was given by a statement like:
x = (++x) % y;
This could be confusing to a compiler I suppose.
In H5RS.c, a typedef of a structure was being tagged by the compiler
as "useless" because it had the form:
typedef struct foo {
int var1;
/* ... */
}; /* <--- note no name for this typedef */
The statement "typedef struct foo foo" is already in the header file.
Solution:
Test that the absolute value of the variable is < a very small
positive number.
Changed "x = (++x) % y" to "++x; x %= y;" instead.
Removed the "typedef" from the structure in the H5RS.c file.
Platforms tested:
Modi4 (Parallel & Fortran)
Verbena (C++ & Fortran)
Arabica (Fortran)
Misc. update:
-rw-r--r-- | src/H5.c | 6 | ||||
-rw-r--r-- | src/H5Dcontig.c | 3 | ||||
-rw-r--r-- | src/H5Fcontig.c | 3 | ||||
-rw-r--r-- | src/H5RS.c | 2 |
4 files changed, 9 insertions, 5 deletions
@@ -1335,7 +1335,8 @@ H5_bandwidth(char *buf/*out*/, double nbytes, double nseconds) HDstrcpy(buf, " NaN"); } else { bw = nbytes/nseconds; - if (bw==0.0) { + if (fabs(bw) < 0.0000000001) { + /* That is == 0.0, but direct comparison between floats is bad */ HDstrcpy(buf, "0.000 B/s"); } else if (bw<1.0) { sprintf(buf, "%10.4e", bw); @@ -1450,7 +1451,8 @@ H5_trace (double *returning, const char *func, const char *type, ...) } /* Get tim for event */ - if (!first_time.etime) + if (fabs(first_time.etime) < 0.0000000001) + /* That is == 0.0, but direct comparison between floats is bad */ H5_timer_begin(&first_time); if (H5_debug_g.ttimes) { H5_timer_begin(&event_time); diff --git a/src/H5Dcontig.c b/src/H5Dcontig.c index a9fe574..2593d83 100644 --- a/src/H5Dcontig.c +++ b/src/H5Dcontig.c @@ -222,7 +222,8 @@ H5F_contig_fill(H5F_t *f, hid_t dxpl_id, struct H5O_layout_t *layout, elmt_size, size, addr, buf)<0) HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to write fill value to dataset"); } /* end if */ - mpi_round=(++mpi_round)%mpi_size; + ++mpi_round; + mpi_round %= mpi_size; /* Indicate that blocks are being written */ blocks_written=1; diff --git a/src/H5Fcontig.c b/src/H5Fcontig.c index a9fe574..2593d83 100644 --- a/src/H5Fcontig.c +++ b/src/H5Fcontig.c @@ -222,7 +222,8 @@ H5F_contig_fill(H5F_t *f, hid_t dxpl_id, struct H5O_layout_t *layout, elmt_size, size, addr, buf)<0) HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to write fill value to dataset"); } /* end if */ - mpi_round=(++mpi_round)%mpi_size; + ++mpi_round; + mpi_round %= mpi_size; /* Indicate that blocks are being written */ blocks_written=1; @@ -31,7 +31,7 @@ static int interface_initialize_g = 0; #define INTERFACE_INIT NULL /* Private typedefs & structs */ -typedef struct H5RS_str_t { +struct H5RS_str_t { char *s; /* String to be reference counted */ unsigned wrapped; /* Indicates that the string to be ref-counted is not copied */ unsigned n; /* Reference count of number of pointers sharing string */ |