From d1a52062625eb785628f94db871e7f14f3fbd3a1 Mon Sep 17 00:00:00 2001 From: alexander <> Date: Sat, 10 Jul 2004 22:24:20 +0000 Subject: [PATCH] short fixed point <-> double conversion routines; ok henning@ --- src/usr.sbin/ntpd/ntpd.h | 4 +++- src/usr.sbin/ntpd/util.c | 26 +++++++++++++++++++++++++- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/src/usr.sbin/ntpd/ntpd.h b/src/usr.sbin/ntpd/ntpd.h index 43b5327f..edbb2fb4 100644 --- a/src/usr.sbin/ntpd/ntpd.h +++ b/src/usr.sbin/ntpd/ntpd.h @@ -1,4 +1,4 @@ -/* $OpenBSD: ntpd.h,v 1.21 2004/07/10 18:42:51 henning Exp $ */ +/* $OpenBSD: ntpd.h,v 1.22 2004/07/10 22:24:20 alexander Exp $ */ /* * Copyright (c) 2003, 2004 Henning Brauer @@ -212,3 +212,5 @@ double gettime(void); void d_to_tv(double, struct timeval *); double lfp_to_d(struct l_fixedpt); struct l_fixedpt d_to_lfp(double); +double sfp_to_d(struct s_fixedpt); +struct s_fixedpt d_to_sfp(double); diff --git a/src/usr.sbin/ntpd/util.c b/src/usr.sbin/ntpd/util.c index f1180f14..5749c830 100644 --- a/src/usr.sbin/ntpd/util.c +++ b/src/usr.sbin/ntpd/util.c @@ -1,4 +1,4 @@ -/* $OpenBSD: util.c,v 1.7 2004/07/07 07:38:21 henning Exp $ */ +/* $OpenBSD: util.c,v 1.8 2004/07/10 22:24:20 alexander Exp $ */ /* * Copyright (c) 2004 Alexander Guy @@ -62,3 +62,27 @@ d_to_lfp(double d) return (lfp); } + +double +sfp_to_d(struct s_fixedpt sfp) +{ + double ret; + + sfp.int_part = ntohs(sfp.int_part); + sfp.fraction = ntohs(sfp.fraction); + + ret = (double)(sfp.int_part) + ((double)sfp.fraction / USHRT_MAX); + + return (ret); +} + +struct s_fixedpt +d_to_sfp(double d) +{ + struct s_fixedpt sfp; + + sfp.int_part = htons((u_int16_t)d); + sfp.fraction = htons((u_int16_t)((d - (u_int16_t)d) * USHRT_MAX)); + + return (sfp); +}