long invalid_freq[NUM_FREQ_INVALID] = {
LONG_MAX,
LONG_MIN,
};
int validate_freq(void)
{ struct timex tx; int ret, pass = 0; int i;
clear_time_state();
memset(&tx, 0, sizeof(struct timex)); /* Set the leap second insert flag */
printf("Testing ADJ_FREQ... ");
fflush(stdout); for (i = 0; i < NUM_FREQ_VALID; i++) {
tx.modes = ADJ_FREQUENCY;
tx.freq = valid_freq[i];
ret = adjtimex(&tx); if (ret < 0) {
printf("[FAIL]\n");
printf("Error: adjtimex(ADJ_FREQ, %ld - %ld ppm\n",
valid_freq[i], valid_freq[i]>>16);
pass = -1; goto out;
}
tx.modes = 0;
ret = adjtimex(&tx); if (tx.freq != valid_freq[i]) {
printf("Warning: freq value %ld not what we set it (%ld)!\n",
tx.freq, valid_freq[i]);
}
} for (i = 0; i < NUM_FREQ_OUTOFRANGE; i++) {
tx.modes = ADJ_FREQUENCY;
tx.freq = outofrange_freq[i];
ret = adjtimex(&tx); if (ret < 0) {
printf("[FAIL]\n");
printf("Error: adjtimex(ADJ_FREQ, %ld - %ld ppm\n",
outofrange_freq[i], outofrange_freq[i]>>16);
pass = -1; goto out;
}
tx.modes = 0;
ret = adjtimex(&tx); if (tx.freq == outofrange_freq[i]) {
printf("[FAIL]\n");
printf("ERROR: out of range value %ld actually set!\n",
tx.freq);
pass = -1; goto out;
}
}
if (sizeof(long) == 8) { /* this case only applies to 64bit systems */ for (i = 0; i < NUM_FREQ_INVALID; i++) {
tx.modes = ADJ_FREQUENCY;
tx.freq = invalid_freq[i];
ret = adjtimex(&tx); if (ret >= 0) {
printf("[FAIL]\n");
printf("Error: No failure on invalid ADJ_FREQUENCY %ld\n",
invalid_freq[i]);
pass = -1; goto out;
}
}
}
printf("[OK]\n");
out: /* reset freq to zero */
tx.modes = ADJ_FREQUENCY;
tx.freq = 0;
ret = adjtimex(&tx);
return pass;
}
int set_offset(longlong offset, int use_nano)
{ struct timex tmx = {}; int ret;
tmx.modes = ADJ_SETOFFSET; if (use_nano) {
tmx.modes |= ADJ_NANO;
/* Test invalid values */ if (set_bad_offset(0, -1, 1)) return -1; if (set_bad_offset(0, -1, 0)) return -1; if (set_bad_offset(0, 2 * NSEC_PER_SEC, 1)) return -1; if (set_bad_offset(0, 2 * USEC_PER_SEC, 0)) return -1; if (set_bad_offset(0, NSEC_PER_SEC, 1)) return -1; if (set_bad_offset(0, USEC_PER_SEC, 0)) return -1; if (set_bad_offset(0, -NSEC_PER_SEC, 1)) return -1; if (set_bad_offset(0, -USEC_PER_SEC, 0)) return -1;
printf("[OK]\n"); return0;
}
int main(int argc, char **argv)
{ if (validate_freq())
ksft_exit_fail();
if (validate_set_offset())
ksft_exit_fail();
ksft_exit_pass();
}
Messung V0.5 in Prozent
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.16Bemerkung:
(vorverarbeitet am 2026-10-11)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.