diff options
author | Quincey Koziol <koziol@hdfgroup.org> | 2001-11-27 16:29:13 (GMT) |
---|---|---|
committer | Quincey Koziol <koziol@hdfgroup.org> | 2001-11-27 16:29:13 (GMT) |
commit | d456c2bb82be98bc2b7c1039927eb52258d1a0eb (patch) | |
tree | a7d8a65aef5d962c89b0965c86eb535917c023ad /src/H5FDfamily.c | |
parent | 05264c88788f9bd9b04a58673ded246904210235 (diff) | |
download | hdf5-d456c2bb82be98bc2b7c1039927eb52258d1a0eb.zip hdf5-d456c2bb82be98bc2b7c1039927eb52258d1a0eb.tar.gz hdf5-d456c2bb82be98bc2b7c1039927eb52258d1a0eb.tar.bz2 |
[svn-r4643] Purpose:
Code cleanup
Description:
Windows is generating hundreds of warnings from some of the practices in
the library. Mostly, they are because size_t is 32-bit and hsize_t is
64-bit on Windows and we were carelessly casting the larger values down to
the smaller ones without checking for overflow.
Also, some other small code cleanups,etc.
Solution:
Re-worked some algorithms to eliminate the casts and also added more
overflow checking for assignments and function parameters which needed
casts.
Kent did most of the work, I just went over his changes and fit them into
the the library code a bit better.
Platforms tested:
FreeBSD 4.4 (hawkwind)
Diffstat (limited to 'src/H5FDfamily.c')
-rw-r--r-- | src/H5FDfamily.c | 32 |
1 files changed, 28 insertions, 4 deletions
diff --git a/src/H5FDfamily.c b/src/H5FDfamily.c index 0ecf171..80feac2 100644 --- a/src/H5FDfamily.c +++ b/src/H5FDfamily.c @@ -863,6 +863,9 @@ H5FD_family_read(H5FD_t *_file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr, si int i; haddr_t sub; size_t req; +#ifndef NDEBUG + hsize_t tempreq; +#endif /* NDEBUG */ H5P_genplist_t *plist; /* Property list pointer */ FUNC_ENTER(H5FD_family_read, FAIL); @@ -883,9 +886,18 @@ H5FD_family_read(H5FD_t *_file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr, si /* Read from each member */ while (size>0) { - i = addr / file->memb_size; + H5_ASSIGN_OVERFLOW(i,addr /file->memb_size,hsize_t,int); + sub = addr % file->memb_size; - req = MIN(size, file->memb_size-sub); + +#ifndef NDEBUG + tempreq = file->memb_size-sub; + H5_CHECK_OVERFLOW(tempreq,hsize_t,size_t); + req = MIN(size, (size_t)tempreq); +#else /* NDEBUG */ + req = MIN(size, (size_t)(file->memb_size-sub)); +#endif /* NDEBUG */ + assert(i<file->nmembs); if (H5FDread(file->memb[i], type, memb_dxpl_id, sub, req, buf)<0) @@ -929,6 +941,9 @@ H5FD_family_write(H5FD_t *_file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr, s int i; haddr_t sub; size_t req; +#ifndef NDEBUG + hsize_t tempreq; +#endif /* NDEBUG */ H5P_genplist_t *plist; /* Property list pointer */ FUNC_ENTER(H5FD_family_write, FAIL); @@ -949,9 +964,18 @@ H5FD_family_write(H5FD_t *_file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr, s /* Write to each member */ while (size>0) { - i = addr / file->memb_size; + H5_ASSIGN_OVERFLOW(i,addr /file->memb_size,hsize_t,int); + sub = addr % file->memb_size; - req = MIN(size, file->memb_size-sub); + +#ifndef NDEBUG + tempreq = file->memb_size-sub; + H5_CHECK_OVERFLOW(tempreq,hsize_t,size_t); + req = MIN(size, (size_t)tempreq); +#else /* NDEBUG */ + req = MIN(size, (size_t)(file->memb_size-sub)); +#endif /* NDEBUG */ + assert(i<file->nmembs); if (H5FDwrite(file->memb[i], type, memb_dxpl_id, sub, req, buf)<0) |