]> git.ipfire.org Git - thirdparty/chrony.git/commitdiff
util: add UTI_Log2ToDouble()
authorMiroslav Lichvar <mlichvar@redhat.com>
Thu, 28 May 2015 10:34:08 +0000 (12:34 +0200)
committerMiroslav Lichvar <mlichvar@redhat.com>
Thu, 28 May 2015 10:51:54 +0000 (12:51 +0200)
refclock.c
util.c
util.h

index 81a3e99bc0d719a9d05beb527bebbf5a749ac7f4..26193f6e6e4fd6207388dd115acad76777526cb2 100644 (file)
@@ -499,15 +499,6 @@ RCL_AddPulse(RCL_Instance instance, struct timeval *pulse_time, double second)
   return 1;
 }
 
-static double
-poll_interval(int poll)
-{
-  if (poll >= 0)
-    return 1 << poll;
-  else
-    return 1.0 / (1 << -poll);
-}
-
 static int
 valid_sample_time(RCL_Instance instance, struct timeval *tv)
 {
@@ -516,7 +507,7 @@ valid_sample_time(RCL_Instance instance, struct timeval *tv)
 
   LCL_ReadRawTime(&raw_time);
   UTI_DiffTimevalsToDouble(&diff, &raw_time, tv);
-  if (diff < 0.0 || diff > poll_interval(instance->poll + 1)) {
+  if (diff < 0.0 || diff > UTI_Log2ToDouble(instance->poll + 1)) {
     DEBUG_LOG(LOGF_Refclock, "%s refclock sample not valid age=%.6f tv=%s",
         UTI_RefidToString(instance->ref_id), diff, UTI_TimevalToString(tv));
     return 0;
@@ -595,7 +586,7 @@ poll_timeout(void *arg)
     }
   }
 
-  inst->timeout_id = SCH_AddTimeoutByDelay(poll_interval(poll), poll_timeout, arg);
+  inst->timeout_id = SCH_AddTimeoutByDelay(UTI_Log2ToDouble(poll), poll_timeout, arg);
 }
 
 static void
diff --git a/util.c b/util.c
index db59c60dd7e43fe483e0fe1be427a582cc659250..6966f6c12c2bf4a141891f44f4214afc16bc67ea 100644 (file)
--- a/util.c
+++ b/util.c
@@ -643,6 +643,22 @@ UTI_IsTimeOffsetSane(struct timeval *tv, double offset)
 
 /* ================================================== */
 
+double
+UTI_Log2ToDouble(int l)
+{
+  if (l >= 0) {
+    if (l > 31)
+      l = 31;
+    return 1 << l;
+  } else {
+    if (l < -31)
+      l = -31;
+    return 1.0 / (1 << -l);
+  }
+}
+
+/* ================================================== */
+
 void
 UTI_TimevalNetworkToHost(Timeval *src, struct timeval *dest)
 {
diff --git a/util.h b/util.h
index 5ab9413e1445a851f8036da0ca6cdd46bd714f11..6e9fdd1f2073ade50b3d362ed01e4d6458e65824 100644 (file)
--- a/util.h
+++ b/util.h
@@ -107,6 +107,9 @@ extern void UTI_Int64ToTimeval(NTP_int64 *src, struct timeval *dest);
 /* Check if time + offset is sane */
 extern int UTI_IsTimeOffsetSane(struct timeval *tv, double offset);
 
+/* Get 2 raised to power of a signed integer */
+extern double UTI_Log2ToDouble(int l);
+
 extern void UTI_TimevalNetworkToHost(Timeval *src, struct timeval *dest);
 extern void UTI_TimevalHostToNetwork(struct timeval *src, Timeval *dest);