1/*
2 * Copyright (c) Wipro Technologies Ltd, 2002.  All Rights Reserved.
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of version 2 of the GNU General Public License as
6 * published by the Free Software Foundation.
7 *
8 * This program is distributed in the hope that it would be useful, but
9 * WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
11 *
12 * You should have received a copy of the GNU General Public License along
13 * with this program; if not, write the Free Software Foundation, Inc.,
14 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
15 */
16
17/*
18  AUTHOR: Saji Kumar.V.R <saji.kumar@wipro.com>
19  EXECUTED BY: root / superuser
20
21  TEST ITEMS:
22   1. Check to see if adjtimex succeed with mode combination :
23      ADJ_OFFSET | ADJ_FREQUENCY | ADJ_MAXERROR | ADJ_ESTERROR |
24      ADJ_STATUS | ADJ_TIMECONST | ADJ_TICK
25   2. Check to see if adjtimex succeed with mode ADJ_OFFSET_SINGLESHOT
26*/
27
28#if defined UCLINUX && !__THROW
29/* workaround for libc bug causing failure in sys/timex.h */
30#define __THROW
31#endif
32
33#include <errno.h>
34#include <sys/timex.h>
35#include "test.h"
36
37#define SET_MODE (ADJ_OFFSET | ADJ_FREQUENCY | ADJ_MAXERROR | ADJ_ESTERROR | \
38	ADJ_STATUS | ADJ_TIMECONST | ADJ_TICK)
39
40static void setup(void);
41static void cleanup(void);
42
43char *TCID = "adjtimex01";
44int TST_TOTAL = 2;
45
46static struct timex tim_save;
47
48int main(int ac, char **av)
49{
50	int lc;
51
52	tst_parse_opts(ac, av, NULL, NULL);
53
54	setup();
55
56	for (lc = 0; TEST_LOOPING(lc); lc++) {
57
58		tst_count = 0;
59
60		/* Call adjtimex(2) */
61		tim_save.modes = SET_MODE;
62
63		TEST(adjtimex(&tim_save));
64
65		if ((TEST_RETURN >= 0) && (TEST_RETURN <= 5)) {
66			tst_resm(TPASS, "adjtimex() with mode %u returned %ld",
67				 SET_MODE, TEST_RETURN);
68		} else {
69			tst_resm(TFAIL | TTERRNO,
70				"Test Failed, adjtimex() with mode %u "
71				"returned %ld", SET_MODE, TEST_RETURN);
72		}
73
74		/* Call adjtimex(2) */
75		tim_save.modes = ADJ_OFFSET_SINGLESHOT;
76
77		TEST(adjtimex(&tim_save));
78
79		if ((TEST_RETURN >= 0) && (TEST_RETURN <= 5)) {
80			tst_resm(TPASS, "adjtimex() with mode %u returned %ld",
81				 ADJ_OFFSET_SINGLESHOT, TEST_RETURN);
82		} else {
83			tst_resm(TFAIL | TTERRNO,
84				"Test Failed, adjtimex() with mode %u returned "
85				"%ld", ADJ_OFFSET_SINGLESHOT, TEST_RETURN);
86		}
87	}
88
89	cleanup();
90
91	tst_exit();
92}
93
94static void setup(void)
95{
96	tst_require_root();
97
98	tim_save.modes = 0;
99
100	tst_sig(NOFORK, DEF_HANDLER, cleanup);
101
102	TEST_PAUSE;
103
104	/* Save current parameters in tim_save */
105	if ((adjtimex(&tim_save)) == -1)
106		tst_brkm(TBROK | TERRNO, cleanup,
107			 "failed to save current parameters");
108}
109
110static void cleanup(void)
111{
112}
113