Annotation of embedaddon/ntp/libntp/calyearstart.c, revision 1.1
1.1 ! misho 1: /*
! 2: * calyearstart - determine the NTP time at midnight of January 1 in
! 3: * the year of the given date.
! 4: */
! 5: #include <sys/types.h>
! 6:
! 7: #include "ntp_types.h"
! 8: #include "ntp_calendar.h"
! 9: #include "ntp_stdlib.h"
! 10: #include "ntp_assert.h"
! 11:
! 12: /*
! 13: * Juergen Perlinger, 2008-11-12
! 14: * Use the result of 'caljulian' to get the delta from the time stamp to the
! 15: * beginning of the year. Do not make a second trip through 'caltontp' after
! 16: * fixing the date, apart for invariant tests.
! 17: */
! 18: u_long
! 19: calyearstart(u_long ntp_time)
! 20: {
! 21: struct calendar jt;
! 22: ntp_u_int32_t delta;
! 23:
! 24: caljulian(ntp_time,&jt);
! 25:
! 26: /*
! 27: * Now we have days since yearstart (unity-based) and the time in that
! 28: * day. Simply merge these together to seconds and subtract that from
! 29: * input time. That's faster than going through the calendar stuff
! 30: * again...
! 31: */
! 32: delta = (ntp_u_int32_t)jt.yearday * SECSPERDAY
! 33: + (ntp_u_int32_t)jt.hour * MINSPERHR * SECSPERMIN
! 34: + (ntp_u_int32_t)jt.minute * SECSPERMIN
! 35: + (ntp_u_int32_t)jt.second
! 36: - SECSPERDAY; /* yearday is unity-based... */
! 37:
! 38: # if ISC_CHECK_INVARIANT
! 39: /*
! 40: * check that this computes properly: do a roundtrip! That's the only
! 41: * sensible test here, but it's a rather expensive invariant...
! 42: */
! 43: jt.yearday = 0;
! 44: jt.month = 1;
! 45: jt.monthday = 1;
! 46: jt.hour = 0;
! 47: jt.minute = 0;
! 48: jt.second = 0;
! 49: NTP_INVARIANT((ntp_u_int32_t)(caltontp(&jt) + delta) == (ntp_u_int32_t)ntp_time);
! 50: # endif
! 51:
! 52: /* The NTP time stamps (l_fp) count seconds unsigned mod 2**32, so we
! 53: * have to calculate this in the proper way!
! 54: */
! 55: return (ntp_u_int32_t)(ntp_time - delta);
! 56: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>