diff options
| author | Denys Vlasenko <vda.linux@googlemail.com> | 2009-11-23 16:27:16 +0100 |
|---|---|---|
| committer | Denys Vlasenko <vda.linux@googlemail.com> | 2009-11-23 16:27:16 +0100 |
| commit | 8d580c72f4eaf5bb6cfec21ef473723c74c3382d (patch) | |
| tree | 12ce4f7273ff993981549d1a0b7450b20878a1e2 | |
| parent | 74f8e7810bbe61bdeffd1dea6adb08426f479705 (diff) | |
| download | busybox-w32-8d580c72f4eaf5bb6cfec21ef473723c74c3382d.tar.gz busybox-w32-8d580c72f4eaf5bb6cfec21ef473723c74c3382d.tar.bz2 busybox-w32-8d580c72f4eaf5bb6cfec21ef473723c74c3382d.zip | |
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>
| -rw-r--r-- | include/usage.h | 3 | ||||
| -rw-r--r-- | networking/ntpd.c | 58 |
2 files changed, 30 insertions, 31 deletions
diff --git a/include/usage.h b/include/usage.h index 48cb8df7d..461f5fca1 100644 --- a/include/usage.h +++ b/include/usage.h | |||
| @@ -3211,13 +3211,14 @@ | |||
| 3211 | "Address: 127.0.0.1\n" | 3211 | "Address: 127.0.0.1\n" |
| 3212 | 3212 | ||
| 3213 | #define ntpd_trivial_usage \ | 3213 | #define ntpd_trivial_usage \ |
| 3214 | "[-dngl] [-p PEER]..." | 3214 | "[-dngql] [-p PEER]..." |
| 3215 | #define ntpd_full_usage "\n\n" \ | 3215 | #define ntpd_full_usage "\n\n" \ |
| 3216 | "NTP client/server\n" \ | 3216 | "NTP client/server\n" \ |
| 3217 | "\nOptions:" \ | 3217 | "\nOptions:" \ |
| 3218 | "\n -d Verbose" \ | 3218 | "\n -d Verbose" \ |
| 3219 | "\n -n Do not daemonize" \ | 3219 | "\n -n Do not daemonize" \ |
| 3220 | "\n -g Set system time even if offset is > 1000 sec" \ | 3220 | "\n -g Set system time even if offset is > 1000 sec" \ |
| 3221 | "\n -q Quit after clock is set" \ | ||
| 3221 | "\n -l Run as server on port 123" \ | 3222 | "\n -l Run as server on port 123" \ |
| 3222 | "\n -p PEER Obtain time from PEER (may be repeated)" \ | 3223 | "\n -p PEER Obtain time from PEER (may be repeated)" \ |
| 3223 | 3224 | ||
diff --git a/networking/ntpd.c b/networking/ntpd.c index 62a00a5bf..8ee42e627 100644 --- a/networking/ntpd.c +++ b/networking/ntpd.c | |||
| @@ -152,6 +152,16 @@ typedef struct { | |||
| 152 | uint8_t trustlevel; | 152 | uint8_t trustlevel; |
| 153 | } ntp_peer_t; | 153 | } ntp_peer_t; |
| 154 | 154 | ||
| 155 | enum { | ||
| 156 | OPT_n = (1 << 0), | ||
| 157 | OPT_g = (1 << 1), | ||
| 158 | OPT_q = (1 << 2), | ||
| 159 | /* Insert new options above this line. */ | ||
| 160 | /* Non-compat options: */ | ||
| 161 | OPT_p = (1 << 3), | ||
| 162 | OPT_l = (1 << 4), | ||
| 163 | }; | ||
| 164 | |||
| 155 | 165 | ||
| 156 | struct globals { | 166 | struct globals { |
| 157 | unsigned verbose; | 167 | unsigned verbose; |
| @@ -164,7 +174,6 @@ struct globals { | |||
| 164 | uint8_t settime; | 174 | uint8_t settime; |
| 165 | uint8_t firstadj; | 175 | uint8_t firstadj; |
| 166 | smallint peer_cnt; | 176 | smallint peer_cnt; |
| 167 | |||
| 168 | }; | 177 | }; |
| 169 | #define G (*ptr_to_globals) | 178 | #define G (*ptr_to_globals) |
| 170 | 179 | ||
| @@ -468,14 +477,14 @@ settime(double offset) | |||
| 468 | char buf[80]; | 477 | char buf[80]; |
| 469 | time_t tval; | 478 | time_t tval; |
| 470 | 479 | ||
| 471 | #if 0 | ||
| 472 | if (!G.settime) | 480 | if (!G.settime) |
| 473 | return; | 481 | goto bail; |
| 474 | #endif | 482 | |
| 483 | G.settime = 0; | ||
| 475 | 484 | ||
| 476 | /* if the offset is small, don't call settimeofday */ | 485 | /* if the offset is small, don't call settimeofday */ |
| 477 | if (offset < SETTIME_MIN_OFFSET && offset > -SETTIME_MIN_OFFSET) | 486 | if (offset < SETTIME_MIN_OFFSET && offset > -SETTIME_MIN_OFFSET) |
| 478 | return; | 487 | goto bail; |
| 479 | 488 | ||
| 480 | gettimeofday(&curtime, NULL); /* never fails */ | 489 | gettimeofday(&curtime, NULL); /* never fails */ |
| 481 | 490 | ||
| @@ -486,11 +495,9 @@ settime(double offset) | |||
| 486 | 495 | ||
| 487 | if (settimeofday(&curtime, NULL) == -1) { | 496 | if (settimeofday(&curtime, NULL) == -1) { |
| 488 | bb_error_msg("settimeofday"); | 497 | bb_error_msg("settimeofday"); |
| 489 | return; | 498 | goto bail; |
| 490 | } | 499 | } |
| 491 | 500 | ||
| 492 | G.settime = 0; | ||
| 493 | |||
| 494 | tval = curtime.tv_sec; | 501 | tval = curtime.tv_sec; |
| 495 | strftime(buf, sizeof(buf), "%a %b %e %H:%M:%S %Z %Y", localtime(&tval)); | 502 | strftime(buf, sizeof(buf), "%a %b %e %H:%M:%S %Z %Y", localtime(&tval)); |
| 496 | 503 | ||
| @@ -504,6 +511,10 @@ settime(double offset) | |||
| 504 | if (p->deadline) | 511 | if (p->deadline) |
| 505 | p->deadline -= offset; | 512 | p->deadline -= offset; |
| 506 | } | 513 | } |
| 514 | |||
| 515 | bail: | ||
| 516 | if (option_mask32 & OPT_q) | ||
| 517 | exit(0); | ||
| 507 | } | 518 | } |
| 508 | 519 | ||
| 509 | static void | 520 | static void |
| @@ -669,8 +680,7 @@ client_dispatch(ntp_peer_t *p) | |||
| 669 | offset->offset, offset->delay, (int) interval); | 680 | offset->offset, offset->delay, (int) interval); |
| 670 | 681 | ||
| 671 | client_update(p); | 682 | client_update(p); |
| 672 | if (!G.settime) | 683 | settime(offset->offset); |
| 673 | settime(offset->offset); | ||
| 674 | 684 | ||
| 675 | if (++p->shift >= OFFSET_ARRAY_SIZE) | 685 | if (++p->shift >= OFFSET_ARRAY_SIZE) |
| 676 | p->shift = 0; | 686 | p->shift = 0; |
| @@ -817,13 +827,6 @@ server_dispatch(int fd) | |||
| 817 | * Note: The kernel time discipline is disabled with this option. | 827 | * Note: The kernel time discipline is disabled with this option. |
| 818 | */ | 828 | */ |
| 819 | 829 | ||
| 820 | enum { | ||
| 821 | OPT_n = (1 << 0), | ||
| 822 | OPT_g = (1 << 1), | ||
| 823 | OPT_p = (1 << 2), | ||
| 824 | OPT_l = (1 << 3), | ||
| 825 | }; | ||
| 826 | |||
| 827 | /* By doing init in a separate function we decrease stack usage | 830 | /* By doing init in a separate function we decrease stack usage |
| 828 | * in main loop. | 831 | * in main loop. |
| 829 | */ | 832 | */ |
| @@ -840,7 +843,7 @@ static NOINLINE void ntp_init(char **argv) | |||
| 840 | peers = NULL; | 843 | peers = NULL; |
| 841 | opt_complementary = "dd:p::"; /* d: counter, p: list */ | 844 | opt_complementary = "dd:p::"; /* d: counter, p: list */ |
| 842 | opts = getopt32(argv, | 845 | opts = getopt32(argv, |
| 843 | "ng" /* compat */ | 846 | "ngq" /* compat */ |
| 844 | "p:"IF_FEATURE_NTPD_SERVER("l") /* NOT compat */ | 847 | "p:"IF_FEATURE_NTPD_SERVER("l") /* NOT compat */ |
| 845 | "d" /* compat */ | 848 | "d" /* compat */ |
| 846 | "46aAbLNx", /* compat, ignored */ | 849 | "46aAbLNx", /* compat, ignored */ |
| @@ -891,7 +894,6 @@ int ntpd_main(int argc UNUSED_PARAM, char **argv) MAIN_EXTERNALLY_VISIBLE; | |||
| 891 | int ntpd_main(int argc UNUSED_PARAM, char **argv) | 894 | int ntpd_main(int argc UNUSED_PARAM, char **argv) |
| 892 | { | 895 | { |
| 893 | struct globals g; | 896 | struct globals g; |
| 894 | unsigned new_cnt; | ||
| 895 | struct pollfd *pfd; | 897 | struct pollfd *pfd; |
| 896 | ntp_peer_t **idx2peer; | 898 | ntp_peer_t **idx2peer; |
| 897 | 899 | ||
| @@ -900,13 +902,12 @@ int ntpd_main(int argc UNUSED_PARAM, char **argv) | |||
| 900 | 902 | ||
| 901 | ntp_init(argv); | 903 | ntp_init(argv); |
| 902 | 904 | ||
| 903 | new_cnt = g.peer_cnt; | 905 | { |
| 904 | idx2peer = xzalloc(sizeof(void *) * new_cnt); | 906 | unsigned new_cnt = g.peer_cnt; |
| 905 | #if ENABLE_FEATURE_NTPD_SERVER | 907 | idx2peer = xzalloc(sizeof(void *) * new_cnt); |
| 906 | if (g.listen_fd != -1) | 908 | /* if ENABLE_FEATURE_NTPD_SERVER, + 1 for listen_fd: */ |
| 907 | new_cnt++; | 909 | pfd = xzalloc(sizeof(pfd[0]) * (new_cnt + ENABLE_FEATURE_NTPD_SERVER)); |
| 908 | #endif | 910 | } |
| 909 | pfd = xzalloc(sizeof(pfd[0]) * new_cnt); | ||
| 910 | 911 | ||
| 911 | while (!bb_got_signal) { | 912 | while (!bb_got_signal) { |
| 912 | llist_t *item; | 913 | llist_t *item; |
| @@ -964,11 +965,8 @@ int ntpd_main(int argc UNUSED_PARAM, char **argv) | |||
| 964 | } | 965 | } |
| 965 | } | 966 | } |
| 966 | 967 | ||
| 967 | if (g.settime | 968 | if ((trial_cnt > 0 && sent_cnt == 0) || g.peer_cnt == 0) |
| 968 | && ((trial_cnt > 0 && sent_cnt == 0) || g.peer_cnt == 0) | ||
| 969 | ) { | ||
| 970 | settime(0); /* no good peers, don't wait */ | 969 | settime(0); /* no good peers, don't wait */ |
| 971 | } | ||
| 972 | 970 | ||
| 973 | timeout = nextaction - time(NULL); | 971 | timeout = nextaction - time(NULL); |
| 974 | if (timeout < 0) | 972 | if (timeout < 0) |
