Contents of /trunk/mkinitrd-magellan/busybox/miscutils/adjtimex.c
Parent Directory | Revision Log
Revision 532 -
(show annotations)
(download)
Sat Sep 1 22:45:15 2007 UTC (17 years ago) by niro
File MIME type: text/plain
File size: 2956 byte(s)
Sat Sep 1 22:45:15 2007 UTC (17 years ago) by niro
File MIME type: text/plain
File size: 2956 byte(s)
-import if magellan mkinitrd; it is a fork of redhats mkinitrd-5.0.8 with all magellan patches and features; deprecates magellan-src/mkinitrd
1 | /* vi: set sw=4 ts=4: */ |
2 | /* |
3 | * adjtimex.c - read, and possibly modify, the Linux kernel `timex' variables. |
4 | * |
5 | * Originally written: October 1997 |
6 | * Last hack: March 2001 |
7 | * Copyright 1997, 2000, 2001 Larry Doolittle <LRDoolittle@lbl.gov> |
8 | * |
9 | * busyboxed 20 March 2001, Larry Doolittle <ldoolitt@recycle.lbl.gov> |
10 | * |
11 | * Licensed under GPLv2 or later, see file License in this tarball for details. |
12 | */ |
13 | |
14 | #include "busybox.h" |
15 | #include <sys/timex.h> |
16 | |
17 | static const struct {int bit; const char *name;} statlist[] = { |
18 | { STA_PLL, "PLL" }, |
19 | { STA_PPSFREQ, "PPSFREQ" }, |
20 | { STA_PPSTIME, "PPSTIME" }, |
21 | { STA_FLL, "FFL" }, |
22 | { STA_INS, "INS" }, |
23 | { STA_DEL, "DEL" }, |
24 | { STA_UNSYNC, "UNSYNC" }, |
25 | { STA_FREQHOLD, "FREQHOLD" }, |
26 | { STA_PPSSIGNAL, "PPSSIGNAL" }, |
27 | { STA_PPSJITTER, "PPSJITTER" }, |
28 | { STA_PPSWANDER, "PPSWANDER" }, |
29 | { STA_PPSERROR, "PPSERROR" }, |
30 | { STA_CLOCKERR, "CLOCKERR" }, |
31 | { 0, NULL } }; |
32 | |
33 | static const char * const ret_code_descript[] = { |
34 | "clock synchronized", |
35 | "insert leap second", |
36 | "delete leap second", |
37 | "leap second in progress", |
38 | "leap second has occurred", |
39 | "clock not synchronized" }; |
40 | |
41 | int adjtimex_main(int argc, char **argv) |
42 | { |
43 | enum { |
44 | OPT_quiet = 0x1 |
45 | }; |
46 | unsigned opt; |
47 | char *opt_o, *opt_f, *opt_p, *opt_t; |
48 | struct timex txc; |
49 | int i, ret, sep; |
50 | const char *descript; |
51 | txc.modes=0; |
52 | |
53 | opt = getopt32(argc, argv, "qo:f:p:t:", |
54 | &opt_o, &opt_f, &opt_p, &opt_t); |
55 | //if (opt & 0x1) // -q |
56 | if (opt & 0x2) { // -o |
57 | txc.offset = xatoi(opt_o); |
58 | txc.modes |= ADJ_OFFSET_SINGLESHOT; |
59 | } |
60 | if (opt & 0x4) { // -f |
61 | txc.freq = xatou(opt_f); |
62 | txc.modes |= ADJ_FREQUENCY; |
63 | } |
64 | if (opt & 0x8) { // -p |
65 | txc.constant = xatoi(opt_p); |
66 | txc.modes |= ADJ_TIMECONST; |
67 | } |
68 | if (opt & 0x10) { // -t |
69 | txc.tick = xatoi(opt_t); |
70 | txc.modes |= ADJ_TICK; |
71 | } |
72 | if (argc != optind) { /* no valid non-option parameters */ |
73 | bb_show_usage(); |
74 | } |
75 | |
76 | ret = adjtimex(&txc); |
77 | |
78 | if (ret < 0) perror("adjtimex"); |
79 | |
80 | if (!(opt & OPT_quiet) && ret>=0) { |
81 | printf( |
82 | " mode: %d\n" |
83 | "-o offset: %ld\n" |
84 | "-f frequency: %ld\n" |
85 | " maxerror: %ld\n" |
86 | " esterror: %ld\n" |
87 | " status: %d ( ", |
88 | txc.modes, txc.offset, txc.freq, txc.maxerror, |
89 | txc.esterror, txc.status); |
90 | |
91 | /* representative output of next code fragment: |
92 | "PLL | PPSTIME" */ |
93 | sep=0; |
94 | for (i=0; statlist[i].name; i++) { |
95 | if (txc.status & statlist[i].bit) { |
96 | if (sep) fputs(" | ",stdout); |
97 | fputs(statlist[i].name,stdout); |
98 | sep=1; |
99 | } |
100 | } |
101 | |
102 | descript = "error"; |
103 | if (ret >= 0 && ret <= 5) descript = ret_code_descript[ret]; |
104 | printf(" )\n" |
105 | "-p timeconstant: %ld\n" |
106 | " precision: %ld\n" |
107 | " tolerance: %ld\n" |
108 | "-t tick: %ld\n" |
109 | " time.tv_sec: %ld\n" |
110 | " time.tv_usec: %ld\n" |
111 | " return value: %d (%s)\n", |
112 | txc.constant, |
113 | txc.precision, txc.tolerance, txc.tick, |
114 | (long)txc.time.tv_sec, (long)txc.time.tv_usec, ret, descript); |
115 | } |
116 | return (ret<0); |
117 | } |