"Fossies" - the Fresh Open Source Software Archive

Member "ntp-4.2.8p15/libntp/timexsup.c" (23 Jun 2020, 1194 Bytes) of package /linux/misc/ntp-4.2.8p15.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. For more information about "timexsup.c" see the Fossies "Dox" file reference documentation and the latest Fossies "Diffs" side-by-side code changes report: 4.2.8p14_vs_4.2.8p15.

    1 /*
    2  * timexsup.c - 'struct timex' support functions
    3  *
    4  * Written by Juergen Perlinger (perlinger@ntp.org) for the NTP project.
    5  * The contents of 'html/copyright.html' apply.
    6  */
    7 
    8 #include "config.h"
    9 #include "timexsup.h"
   10 #include <limits.h>
   11 #include <math.h>
   12 
   13 #ifdef HAVE_SYS_TIMEX_H
   14 # include <sys/timex.h>
   15 #endif
   16 
   17 #if defined(MOD_NANO) != defined(STA_NANO)
   18 # warning inconsistent definitions of MOD_NANO vs STA_NANO
   19 #endif
   20 
   21 static long
   22 clamp_rounded(
   23     double dval
   24     )
   25 {
   26     /* round */
   27     dval = floor(dval + 0.5);
   28 
   29     /* clamp / saturate */
   30     if (dval >= (double)LONG_MAX)
   31         return LONG_MAX;
   32     if (dval <= (double)LONG_MIN)
   33         return LONG_MIN;
   34     return (long)dval;
   35 }
   36 
   37 double
   38 dbl_from_var_long(
   39     long    lval,
   40     int status
   41     )
   42 {
   43 #ifdef STA_NANO
   44     if (status & STA_NANO)
   45         return (double)lval * 1e-9;
   46 #else
   47     (void)status;
   48 #endif
   49     return (double)lval * 1e-6;
   50 }
   51 
   52 double
   53 dbl_from_usec_long(
   54     long    lval
   55     )
   56 {
   57     return (double)lval * 1e-6;
   58 }
   59 
   60 long
   61 var_long_from_dbl(
   62     double      dval,
   63     unsigned int *  modes
   64     )
   65 {
   66 #ifdef MOD_NANO
   67     *modes |= MOD_NANO;
   68     dval *= 1e+9;
   69 #else
   70     (void)modes;
   71     dval *= 1e+6;
   72 #endif
   73     return clamp_rounded(dval);
   74 }
   75 
   76 long
   77 usec_long_from_dbl(
   78     double  dval
   79     )
   80 {
   81     return clamp_rounded(dval * 1e+6);
   82 }