Example #1
0
int sysclock_from_utc (uint64 *u)
{
  tai_t t ;
  if (!tai_from_utc(&t, *u)) return 0 ;
  if (t.x < 10) return (errno = EINVAL, 0) ;
  *u = t.x - 10 ;
  return 1 ;
}
int taia_from_ntp (struct taia *a, uint64 u)
{
  struct tai secs = { u >> 32 } ;
  uint64 frac ;
  if (secs.x <= 0x7FFFFFFFUL) secs.x |= ((uint64)1 << 32) ;
  secs.x += TAI_MAGIC ;
  secs.x -= NTP_OFFSET ;
  if (!tai_from_utc(&secs, secs.x)) return 0 ;
  frac = (u & 0xFFFFFFFFUL) * NTP_MAGIC_FRAC ;
  a->sec = secs ;
  a->nano = frac / 1000000000U ;
  if (a->nano >= 999999999U) a->nano = 999999999U ;
  a->atto = frac % 1000000000U ;
  return 1 ;
}
int tai_from_sysclock (struct tai *t, uint64 u)
{
  return tai_from_utc(t, u) ;
}
int tai_from_ltm64 (struct tai *t, uint64 u)
{
  return tai_from_utc(t, u) ;
}