ntpd: add -q option. By Adam Tkac.
function old new delta settime 347 375 +28 packed_usage 26681 26693 +12 ntpd_main 3282 3251 -31 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 2/1 up/down: 40/-31) Total: 9 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
74f8e7810b
commit
8d580c72f4
@ -3211,13 +3211,14 @@
|
||||
"Address: 127.0.0.1\n"
|
||||
|
||||
#define ntpd_trivial_usage \
|
||||
"[-dngl] [-p PEER]..."
|
||||
"[-dngql] [-p PEER]..."
|
||||
#define ntpd_full_usage "\n\n" \
|
||||
"NTP client/server\n" \
|
||||
"\nOptions:" \
|
||||
"\n -d Verbose" \
|
||||
"\n -n Do not daemonize" \
|
||||
"\n -g Set system time even if offset is > 1000 sec" \
|
||||
"\n -q Quit after clock is set" \
|
||||
"\n -l Run as server on port 123" \
|
||||
"\n -p PEER Obtain time from PEER (may be repeated)" \
|
||||
|
||||
|
@ -152,6 +152,16 @@ typedef struct {
|
||||
uint8_t trustlevel;
|
||||
} ntp_peer_t;
|
||||
|
||||
enum {
|
||||
OPT_n = (1 << 0),
|
||||
OPT_g = (1 << 1),
|
||||
OPT_q = (1 << 2),
|
||||
/* Insert new options above this line. */
|
||||
/* Non-compat options: */
|
||||
OPT_p = (1 << 3),
|
||||
OPT_l = (1 << 4),
|
||||
};
|
||||
|
||||
|
||||
struct globals {
|
||||
unsigned verbose;
|
||||
@ -164,7 +174,6 @@ struct globals {
|
||||
uint8_t settime;
|
||||
uint8_t firstadj;
|
||||
smallint peer_cnt;
|
||||
|
||||
};
|
||||
#define G (*ptr_to_globals)
|
||||
|
||||
@ -468,14 +477,14 @@ settime(double offset)
|
||||
char buf[80];
|
||||
time_t tval;
|
||||
|
||||
#if 0
|
||||
if (!G.settime)
|
||||
return;
|
||||
#endif
|
||||
goto bail;
|
||||
|
||||
G.settime = 0;
|
||||
|
||||
/* if the offset is small, don't call settimeofday */
|
||||
if (offset < SETTIME_MIN_OFFSET && offset > -SETTIME_MIN_OFFSET)
|
||||
return;
|
||||
goto bail;
|
||||
|
||||
gettimeofday(&curtime, NULL); /* never fails */
|
||||
|
||||
@ -486,11 +495,9 @@ settime(double offset)
|
||||
|
||||
if (settimeofday(&curtime, NULL) == -1) {
|
||||
bb_error_msg("settimeofday");
|
||||
return;
|
||||
goto bail;
|
||||
}
|
||||
|
||||
G.settime = 0;
|
||||
|
||||
tval = curtime.tv_sec;
|
||||
strftime(buf, sizeof(buf), "%a %b %e %H:%M:%S %Z %Y", localtime(&tval));
|
||||
|
||||
@ -504,6 +511,10 @@ settime(double offset)
|
||||
if (p->deadline)
|
||||
p->deadline -= offset;
|
||||
}
|
||||
|
||||
bail:
|
||||
if (option_mask32 & OPT_q)
|
||||
exit(0);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -669,8 +680,7 @@ client_dispatch(ntp_peer_t *p)
|
||||
offset->offset, offset->delay, (int) interval);
|
||||
|
||||
client_update(p);
|
||||
if (!G.settime)
|
||||
settime(offset->offset);
|
||||
settime(offset->offset);
|
||||
|
||||
if (++p->shift >= OFFSET_ARRAY_SIZE)
|
||||
p->shift = 0;
|
||||
@ -817,13 +827,6 @@ server_dispatch(int fd)
|
||||
* Note: The kernel time discipline is disabled with this option.
|
||||
*/
|
||||
|
||||
enum {
|
||||
OPT_n = (1 << 0),
|
||||
OPT_g = (1 << 1),
|
||||
OPT_p = (1 << 2),
|
||||
OPT_l = (1 << 3),
|
||||
};
|
||||
|
||||
/* By doing init in a separate function we decrease stack usage
|
||||
* in main loop.
|
||||
*/
|
||||
@ -840,7 +843,7 @@ static NOINLINE void ntp_init(char **argv)
|
||||
peers = NULL;
|
||||
opt_complementary = "dd:p::"; /* d: counter, p: list */
|
||||
opts = getopt32(argv,
|
||||
"ng" /* compat */
|
||||
"ngq" /* compat */
|
||||
"p:"IF_FEATURE_NTPD_SERVER("l") /* NOT compat */
|
||||
"d" /* compat */
|
||||
"46aAbLNx", /* compat, ignored */
|
||||
@ -891,7 +894,6 @@ int ntpd_main(int argc UNUSED_PARAM, char **argv) MAIN_EXTERNALLY_VISIBLE;
|
||||
int ntpd_main(int argc UNUSED_PARAM, char **argv)
|
||||
{
|
||||
struct globals g;
|
||||
unsigned new_cnt;
|
||||
struct pollfd *pfd;
|
||||
ntp_peer_t **idx2peer;
|
||||
|
||||
@ -900,13 +902,12 @@ int ntpd_main(int argc UNUSED_PARAM, char **argv)
|
||||
|
||||
ntp_init(argv);
|
||||
|
||||
new_cnt = g.peer_cnt;
|
||||
idx2peer = xzalloc(sizeof(void *) * new_cnt);
|
||||
#if ENABLE_FEATURE_NTPD_SERVER
|
||||
if (g.listen_fd != -1)
|
||||
new_cnt++;
|
||||
#endif
|
||||
pfd = xzalloc(sizeof(pfd[0]) * new_cnt);
|
||||
{
|
||||
unsigned new_cnt = g.peer_cnt;
|
||||
idx2peer = xzalloc(sizeof(void *) * new_cnt);
|
||||
/* if ENABLE_FEATURE_NTPD_SERVER, + 1 for listen_fd: */
|
||||
pfd = xzalloc(sizeof(pfd[0]) * (new_cnt + ENABLE_FEATURE_NTPD_SERVER));
|
||||
}
|
||||
|
||||
while (!bb_got_signal) {
|
||||
llist_t *item;
|
||||
@ -964,11 +965,8 @@ int ntpd_main(int argc UNUSED_PARAM, char **argv)
|
||||
}
|
||||
}
|
||||
|
||||
if (g.settime
|
||||
&& ((trial_cnt > 0 && sent_cnt == 0) || g.peer_cnt == 0)
|
||||
) {
|
||||
if ((trial_cnt > 0 && sent_cnt == 0) || g.peer_cnt == 0)
|
||||
settime(0); /* no good peers, don't wait */
|
||||
}
|
||||
|
||||
timeout = nextaction - time(NULL);
|
||||
if (timeout < 0)
|
||||
|
Loading…
x
Reference in New Issue
Block a user