sys: fix clock stepping by integer number of seconds on Linux

The kernel requires in the ADJ_SETOFFSET | ADJ_NANO mode that the
timex.time.tv_usec value is smaller than 10^9 nanosecond, which wasn't
the case with a negative integer offset (e.g. inserted leap second).
This commit is contained in:
Miroslav Lichvar 2015-06-23 14:48:31 +02:00
parent 1f0e6296c6
commit c2f83bd8a4

View file

@ -193,12 +193,12 @@ TMX_ApplyStepOffset(double offset)
struct timex txc;
txc.modes = ADJ_SETOFFSET | ADJ_NANO;
if (offset >= 0) {
txc.time.tv_sec = offset;
} else {
txc.time.tv_sec = offset - 1;
}
txc.time.tv_usec = 1.0e9 * (offset - txc.time.tv_sec);
if (txc.time.tv_usec < 0) {
txc.time.tv_sec--;
txc.time.tv_usec += 1000000000;
}
return adjtimex(&txc);
}