summaryrefslogtreecommitdiffstats
path: root/src/H5private.h
diff options
context:
space:
mode:
authorLeon Arber <larber@ncsa.uiuc.edu>2006-03-07 04:23:24 (GMT)
committerLeon Arber <larber@ncsa.uiuc.edu>2006-03-07 04:23:24 (GMT)
commit840bcbe9ef762ae755df3f97fdac15d84df8909f (patch)
tree109540f2e45343bb529661b15962ece095ca7561 /src/H5private.h
parent4efe32d5426f92083925d18183bc8669b58967b0 (diff)
downloadhdf5-840bcbe9ef762ae755df3f97fdac15d84df8909f.zip
hdf5-840bcbe9ef762ae755df3f97fdac15d84df8909f.tar.gz
hdf5-840bcbe9ef762ae755df3f97fdac15d84df8909f.tar.bz2
[svn-r12019] Purpose:
Bug fix/Feature Description: Modify the library to use rand_r, when available, instead of srand. If rand_r is not available, it will try to use srandom/random, and then finally fall back to srand/rand. Solution: A couple places in the library use the srand() function to seed the random number generator. This can cause problems on certain platforms and could theoretically cause problems for users who expect a certain sequence of random numbers following their own call to srand(). Most platforms have an implementation of rand_r, which is identical to rand, except that it allows for explicit storage of the seed value. The configure script will now check for the existence of rand_r to facilitate its use in the library. Two new functions are added, to replace the macros HDsrand/HDrand. These functions are HDrand and HDsrand. HDrand will call rand_r, if available, or random(), if available, and fall back to rand() if neither of those is available. HDsrand will store the seed value locally, if rand_r is available. Otherwise, it will call srandom if available, and fall back to srand otherwise. Platforms tested: heping, mir. Really need to test on Red Storm, since that platform motivated this fix, but the machine is currently not available. Misc. update:
Diffstat (limited to 'src/H5private.h')
-rw-r--r--src/H5private.h14
1 files changed, 2 insertions, 12 deletions
diff --git a/src/H5private.h b/src/H5private.h
index e7f339b..6c1a40b 100644
--- a/src/H5private.h
+++ b/src/H5private.h
@@ -772,12 +772,8 @@ typedef off_t h5_stat_size_t;
#define HDputs(S) puts(S)
#define HDqsort(M,N,Z,F) qsort(M,N,Z,F)
#define HDraise(N) raise(N)
-#define HDrand() rand()
-#ifdef H5_HAVE_RANDOM
-#define HDrandom() random()
-#else
-#define HDrandom() rand()
-#endif
+#define HDrandom() HDrand()
+#define HDsrandom(S) HDsrand(S)
#define HDread(F,M,Z) read(F,M,Z)
#define HDreaddir(D) readdir(D)
#define HDrealloc(M,Z) realloc(M,Z)
@@ -817,12 +813,6 @@ typedef off_t h5_stat_size_t;
#endif
/* sprintf() variable arguments */
#define HDsqrt(X) sqrt(X)
-#define HDsrand(N) srand(N)
-#ifdef H5_HAVE_SRANDOM
-#define HDsrandom(N) srandom(N)
-#else
-#define HDsrandom(N) srand(N)
-#endif
/* sscanf() variable arguments */