PageRenderTime 6ms CodeModel.GetById 1ms app.highlight 3ms RepoModel.GetById 0ms app.codeStats 1ms

/contrib/ntp/util/testrs6000.c

https://bitbucket.org/freebsd/freebsd-head/
C | 55 lines | 42 code | 4 blank | 9 comment | 6 complexity | 4fbb1ee489cf1442ad1f79a2664607c7 MD5 | raw file
 1/* Checks for the RS/6000 AIX adjtime() bug, in which if a negative
 2 * offset is given, the system gets messed up and never completes the
 3 * adjustment.  If the problem is fixed, this program will print the
 4 * time, sit there for 10 seconds, and exit.  If the problem isn't fixed,
 5 * the program will print an occasional "result=nnnnnn" (the residual
 6 * slew from adjtime()).
 7 *
 8 * Compile this with bsdcc and run it as root!
 9 */
10#include <signal.h>
11#include <sys/time.h>
12#include <time.h>
13#include <stdio.h>
14
15int timeout();
16struct timeval adjustment, result;
17
18int
19main (
20	int argc,
21	char *argv[]
22	)
23{
24	struct itimerval value, oldvalue;
25	int i;
26	time_t curtime;
27
28	curtime = time(0);
29	printf("Starting: %s", ctime(&curtime));
30	value.it_interval.tv_sec = value.it_value.tv_sec = 1;
31	value.it_interval.tv_usec = value.it_value.tv_usec = 0;
32	adjustment.tv_sec = 0;
33	adjustment.tv_usec = -2000;
34	signal(SIGALRM, timeout);
35	setitimer(ITIMER_REAL, &value, &oldvalue);
36	for (i=0; i<10; i++) {
37		pause();
38	}
39}
40
41int
42timeout(
43	int sig,
44	int code,
45	struct sigcontext *scp
46	)
47{
48	signal (SIGALRM, timeout);
49	if (adjtime(&adjustment, &result)) 
50	    printf("adjtime call failed\n");
51	if (result.tv_sec != 0 || result.tv_usec != 0) {
52		printf("result.u = %d.%06.6d  ", (int) result.tv_sec,
53		       (int) result.tv_usec);
54	}
55}