X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=miscutils%2Fadjtimex.c;h=c1718e9094fec5054a5c2a47acae45cf39d3bfb3;hb=9b70f197b4dd5be47c5d0d4479525efe012964ee;hp=a6f323ba2e148277e6809272cfe1c90db5fd2b6b;hpb=9768a82eb0ef8b742034d2b22c32e0cc97633604;p=oweals%2Fbusybox.git diff --git a/miscutils/adjtimex.c b/miscutils/adjtimex.c index a6f323ba2..c1718e909 100644 --- a/miscutils/adjtimex.c +++ b/miscutils/adjtimex.c @@ -1,6 +1,6 @@ /* vi: set sw=4 ts=4: */ /* - * adjtimex.c - read, and possibly modify, the Linux kernel `timex' variables. + * adjtimex.c - read, and possibly modify, the Linux kernel 'timex' variables. * * Originally written: October 1997 * Last hack: March 2001 @@ -8,13 +8,39 @@ * * busyboxed 20 March 2001, Larry Doolittle * - * Licensed under GPLv2 or later, see file LICENSE in this tarball for details. + * Licensed under GPLv2 or later, see file LICENSE in this source tree. */ +//config:config ADJTIMEX +//config: bool "adjtimex (4.5 kb)" +//config: default y +//config: select PLATFORM_LINUX +//config: help +//config: Adjtimex reads and optionally sets adjustment parameters for +//config: the Linux clock adjustment algorithm. + +//applet:IF_ADJTIMEX(APPLET_NOFORK(adjtimex, adjtimex, BB_DIR_SBIN, BB_SUID_DROP, adjtimex)) + +//kbuild:lib-$(CONFIG_ADJTIMEX) += adjtimex.o + +//usage:#define adjtimex_trivial_usage +//usage: "[-q] [-o OFF] [-f FREQ] [-p TCONST] [-t TICK]" +//usage:#define adjtimex_full_usage "\n\n" +//usage: "Read or set kernel time variables. See adjtimex(2)\n" +//usage: "\n -q Quiet" +//usage: "\n -o OFF Time offset, microseconds" +//usage: "\n -f FREQ Frequency adjust, integer kernel units (65536 is 1ppm)" +//usage: "\n -t TICK Microseconds per tick, usually 10000" +//usage: "\n (positive -t or -f values make clock run faster)" +//usage: "\n -p TCONST" #include "libbb.h" -#include +#ifdef __BIONIC__ +# include +#else +# include +#endif -static const uint16_t statlist_bit[] = { +static const uint16_t statlist_bit[] ALIGN2 = { STA_PLL, STA_PPSFREQ, STA_PPSTIME, @@ -30,7 +56,7 @@ static const uint16_t statlist_bit[] = { STA_CLOCKERR, 0 }; -static const char statlist_name[] = +static const char statlist_name[] ALIGN1 = "PLL" "\0" "PPSFREQ" "\0" "PPSTIME" "\0" @@ -46,7 +72,7 @@ static const char statlist_name[] = "CLOCKERR" ; -static const char ret_code_descript[] = +static const char ret_code_descript[] ALIGN1 = "clock synchronized" "\0" "insert leap second" "\0" "delete leap second" "\0" @@ -64,13 +90,15 @@ int adjtimex_main(int argc UNUSED_PARAM, char **argv) unsigned opt; char *opt_o, *opt_f, *opt_p, *opt_t; struct timex txc; - int i, ret; + int ret; const char *descript; - opt_complementary = "=0"; /* no valid non-option parameters */ - opt = getopt32(argv, "qo:f:p:t:", - &opt_o, &opt_f, &opt_p, &opt_t); - txc.modes = 0; + memset(&txc, 0, sizeof(txc)); + + opt = getopt32(argv, "^" "qo:f:p:t:" + "\0" "=0"/*no valid non-option args*/, + &opt_o, &opt_f, &opt_p, &opt_t + ); //if (opt & 0x1) // -q if (opt & 0x2) { // -o txc.offset = xatol(opt_o); @@ -89,36 +117,40 @@ int adjtimex_main(int argc UNUSED_PARAM, char **argv) txc.modes |= ADJ_TICK; } - ret = adjtimex(&txc); + /* It's NOFORK applet because the code is very simple: + * just some printf. No opens, no allocs. + * If you need to make it more complex, feel free to downgrade to NOEXEC + */ - if (ret < 0) { + ret = adjtimex(&txc); + if (ret < 0) bb_perror_nomsg_and_die(); - } if (!(opt & OPT_quiet)) { - int sep; + const char *sep; const char *name; + int i; printf( " mode: %d\n" - "-o offset: %ld\n" - "-f frequency: %ld\n" + "-o offset: %ld us\n" + "-f freq.adjust: %ld (65536 = 1ppm)\n" " maxerror: %ld\n" " esterror: %ld\n" " status: %d (", - txc.modes, txc.offset, txc.freq, txc.maxerror, - txc.esterror, txc.status); + txc.modes, txc.offset, txc.freq, txc.maxerror, + txc.esterror, txc.status + ); /* representative output of next code fragment: - "PLL | PPSTIME" */ + * "PLL | PPSTIME" + */ name = statlist_name; - sep = 0; + sep = ""; for (i = 0; statlist_bit[i]; i++) { if (txc.status & statlist_bit[i]) { - if (sep) - fputs(" | ", stdout); - fputs(name, stdout); - sep = 1; + printf("%s%s", sep, name); + sep = " | "; } name += strlen(name) + 1; } @@ -128,15 +160,17 @@ int adjtimex_main(int argc UNUSED_PARAM, char **argv) descript = nth_string(ret_code_descript, ret); printf(")\n" "-p timeconstant: %ld\n" - " precision: %ld\n" + " precision: %ld us\n" " tolerance: %ld\n" - "-t tick: %ld\n" + "-t tick: %ld us\n" " time.tv_sec: %ld\n" " time.tv_usec: %ld\n" " return value: %d (%s)\n", - txc.constant, - txc.precision, txc.tolerance, txc.tick, - (long)txc.time.tv_sec, (long)txc.time.tv_usec, ret, descript); + txc.constant, + txc.precision, txc.tolerance, txc.tick, + (long)txc.time.tv_sec, (long)txc.time.tv_usec, + ret, descript + ); } return 0;