bool hclock_valid = FALSE;
/*
* Tick synchronized time read from the Hardware Clock and
- * then drift correct for all operations except --show.
+ * then drift corrected for all operations except --show.
*/
- struct timeval hclocktime = { 0, 0 };
+ struct timeval hclocktime = { 0 };
+ /*
+ * hclocktime correlated to startup_time. That is, what drift
+ * corrected Hardware Clock time would have been at start up.
+ */
+ struct timeval startup_hclocktime = { 0 };
/* Total Hardware Clock drift correction needed. */
struct timeval tdrift;
hclocktime.tv_sec, &tdrift);
if (!ctl->show)
hclocktime = time_inc(tdrift, hclocktime.tv_sec);
+
+ startup_hclocktime =
+ time_inc(hclocktime, time_diff(startup_time, read_time));
}
if (ctl->show || ctl->get) {
- display_time(hclock_valid,
- time_inc(hclocktime, -time_diff
- (read_time, startup_time)));
+ display_time(hclock_valid, startup_hclocktime);
} else if (ctl->set) {
set_hardware_clock_exact(ctl, set_time, startup_time);
if (!ctl->noadjfile)
- adjust_drift_factor(ctl, adjtime,
- time_inc(t2tv(set_time), time_diff
- (read_time, startup_time)),
- hclock_valid, hclocktime);
+ adjust_drift_factor(ctl, adjtime, t2tv(set_time),
+ hclock_valid, startup_hclocktime);
} else if (ctl->adjust) {
if (tdrift.tv_sec > 0 || tdrift.tv_sec < -1)
do_adjustment(ctl, adjtime, hclock_valid,