From: Mark Wooding Date: Thu, 26 May 2016 08:26:09 +0000 (+0100) Subject: configure.ac, rand/noise.c: Get high-res time from `clock_gettime'. X-Git-Tag: 2.2.3~1^2~1 X-Git-Url: https://git.distorted.org.uk/~mdw/catacomb/commitdiff_plain/8039afaf2c8b0a9bb3359206719859b0da53ea7c configure.ac, rand/noise.c: Get high-res time from `clock_gettime'. If it's available. --- diff --git a/configure.ac b/configure.ac index c9107c5b..3c8cb375 100644 --- a/configure.ac +++ b/configure.ac @@ -224,6 +224,13 @@ AC_SUBST([limits]) dnl Functions used for noise-gathering. AC_CHECK_FUNCS([setgroups]) AC_CHECK_HEADERS([linux/random.h]) +mdw_ORIG_LIBS=$LIBS LIBS=$CATACOMB_LIBS +AC_SEARCH_LIBS([clock_gettime], [rt]) +CATACOMB_LIBS=$LIBS LIBS=$mdw_ORIG_LIBS +if test $ac_cv_search_clock_gettime != no; then + AC_DEFINE([HAVE_CLOCK_GETTIME], [1], + [Define if you have the \`clock_gettime' function.]) +fi AC_CHECK_FUNCS([getentropy]) AC_CACHE_CHECK([whether the freewheel noise generator will work], [catacomb_cv_freewheel], diff --git a/rand/noise.c b/rand/noise.c index f01af651..de120d8b 100644 --- a/rand/noise.c +++ b/rand/noise.c @@ -35,6 +35,7 @@ #include #include #include +#include #include #include @@ -65,12 +66,27 @@ #define NOISE_KIDLIFE 100000 /* @noise_filter@ child lifetime */ +#if HAVE_CLOCK_GETTIME && _POSIX_TIMERS > 0 +# define TIMESTRUCT timespec +# define tv_SEC tv_sec +# define tv_FRAC tv_nsec +# define TIMERES 1000000000 +# if _POSIX_MONOTONIC_CLOCK > 0 +# define GETTIME(tv) (clock_gettime(CLOCK_MONOTONIC, (tv))) +# else +# define GETTIME(tv) (clock_gettime(CLOCK_REALTIME, (tv))) +# endif +# define TOTIMEVAL(tv, xx) \ + ((tv)->tv_sec = (xx)->tv_sec, \ + (tv)->tv_usec = ((xx)->tv_nsec + 500)/1000) +#else # define TIMESTRUCT timeval # define tv_SEC tv_sec # define tv_FRAC tv_usec # define TIMERES 1000000 # define GETTIME(tv) (gettimeofday((tv), 0)) # define TOTIMEVAL(tv, xx) (*(tv) = *(xx)) +#endif /*----- Noise source definition -------------------------------------------*/