apply post-1.16.0 fixes, bump version to 1.16.1 1_16_1
authorDenys Vlasenko <vda.linux@googlemail.com>
Sun, 28 Mar 2010 18:01:31 +0000 (20:01 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Sun, 28 Mar 2010 18:01:31 +0000 (20:01 +0200)
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
27 files changed:
Makefile
TODO_config_nommu
applets/applet_tables.c
coreutils/fsync.c
coreutils/md5_sha1_sum.c
coreutils/tail.c
coreutils/touch.c
coreutils/wc.c
editors/diff.c
include/usage.h
miscutils/beep.c
miscutils/fbsplash.c
miscutils/microcom.c
networking/httpd.c
networking/telnet.c
networking/tftp.c
networking/udhcp/dhcpd.c
networking/wget.c
scripts/defconfig
shell/ash.c
shell/ash_test/ash-misc/nulltick1.right [new file with mode: 0644]
shell/ash_test/ash-misc/nulltick1.tests [new file with mode: 0755]
shell/hush.c
sysklogd/syslogd.c
testsuite/cpio.tests
util-linux/script.c
util-linux/volume_id/linux_swap.c

index 206555850ae78b32813408a0bff6c3cd2f34fdc3..8df9584f4c42f2876720f0f0a489355fe14a6aea 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
 VERSION = 1
 PATCHLEVEL = 16
-SUBLEVEL = 0
+SUBLEVEL = 1
 EXTRAVERSION =
 NAME = Unnamed
 
index 804fc61c97d2cf843d4b2174ba92c20111391251..2c8210cfe9f3d1152fd30db380e59c61a1b6df1a 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Busybox version: 1.15.0.svn
-# Fri Aug 21 00:13:18 2009
+# Busybox version: 1.16.0
+# Wed Jan 27 21:01:26 2010
 #
 CONFIG_HAVE_DOT_CONFIG=y
 
@@ -14,6 +14,8 @@ CONFIG_HAVE_DOT_CONFIG=y
 #
 CONFIG_DESKTOP=y
 CONFIG_EXTRA_COMPAT=y
+CONFIG_INCLUDE_SUSv2=y
+# CONFIG_USE_PORTABLE_CODE is not set
 CONFIG_FEATURE_BUFFERS_USE_MALLOC=y
 # CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set
 # CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set
@@ -59,7 +61,6 @@ CONFIG_EXTRA_CFLAGS=""
 CONFIG_NO_DEBUG_LIB=y
 # CONFIG_DMALLOC is not set
 # CONFIG_EFENCE is not set
-CONFIG_INCLUDE_SUSv2=y
 
 #
 # Installation Options
@@ -120,6 +121,7 @@ CONFIG_DPKG_DEB=y
 CONFIG_FEATURE_DPKG_DEB_EXTRACT_ONLY=y
 CONFIG_GUNZIP=y
 CONFIG_GZIP=y
+CONFIG_FEATURE_GZIP_LONG_OPTIONS=y
 CONFIG_LZOP=y
 CONFIG_LZOP_COMPR_HIGH=y
 CONFIG_RPM2CPIO=y
@@ -133,6 +135,7 @@ CONFIG_FEATURE_TAR_OLDSUN_COMPATIBILITY=y
 CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y
 CONFIG_FEATURE_TAR_LONG_OPTIONS=y
 CONFIG_FEATURE_TAR_UNAME_GNAME=y
+CONFIG_FEATURE_TAR_NOPRESERVE_TIME=y
 CONFIG_UNCOMPRESS=y
 CONFIG_UNLZMA=y
 CONFIG_FEATURE_LZMA_FAST=y
@@ -148,15 +151,19 @@ CONFIG_CATV=y
 CONFIG_CHGRP=y
 CONFIG_CHMOD=y
 CONFIG_CHOWN=y
+CONFIG_FEATURE_CHOWN_LONG_OPTIONS=y
 CONFIG_CHROOT=y
 CONFIG_CKSUM=y
 CONFIG_COMM=y
 CONFIG_CP=y
+CONFIG_FEATURE_CP_LONG_OPTIONS=y
 CONFIG_CUT=y
 CONFIG_DATE=y
 CONFIG_FEATURE_DATE_ISOFMT=y
+CONFIG_FEATURE_DATE_COMPAT=y
 CONFIG_DD=y
 CONFIG_FEATURE_DD_SIGNAL_HANDLING=y
+CONFIG_FEATURE_DD_THIRD_STATUS_LINE=y
 CONFIG_FEATURE_DD_IBS_OBS=y
 CONFIG_DF=y
 CONFIG_FEATURE_DF_FANCY=y
@@ -271,7 +278,7 @@ CONFIG_FEATURE_AUTOWIDTH=y
 CONFIG_FEATURE_HUMAN_READABLE=y
 
 #
-# Common options for md5sum, sha1sum
+# Common options for md5sum, sha1sum, sha256sum, sha512sum
 #
 CONFIG_FEATURE_MD5_SHA1_SUM_CHECK=y
 
@@ -318,9 +325,8 @@ CONFIG_AWK=y
 CONFIG_FEATURE_AWK_LIBM=y
 CONFIG_CMP=y
 CONFIG_DIFF=y
-CONFIG_FEATURE_DIFF_BINARY=y
+CONFIG_FEATURE_DIFF_LONG_OPTIONS=y
 CONFIG_FEATURE_DIFF_DIR=y
-CONFIG_FEATURE_DIFF_MINIMAL=y
 CONFIG_ED=y
 CONFIG_PATCH=y
 CONFIG_SED=y
@@ -364,6 +370,7 @@ CONFIG_FEATURE_FIND_DELETE=y
 CONFIG_FEATURE_FIND_PATH=y
 CONFIG_FEATURE_FIND_REGEX=y
 CONFIG_FEATURE_FIND_CONTEXT=y
+CONFIG_FEATURE_FIND_LINKS=y
 CONFIG_GREP=y
 CONFIG_FEATURE_GREP_EGREP_ALIAS=y
 CONFIG_FEATURE_GREP_FGREP_ALIAS=y
@@ -453,6 +460,7 @@ CONFIG_FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED=y
 # Options common to multiple modutils
 #
 # CONFIG_FEATURE_2_4_MODULES is not set
+CONFIG_FEATURE_INSMOD_TRY_MMAP=y
 # CONFIG_FEATURE_INSMOD_VERSION_CHECKING is not set
 # CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS is not set
 # CONFIG_FEATURE_INSMOD_LOADINKMEM is not set
@@ -488,12 +496,14 @@ CONFIG_FEATURE_FDISK_ADVANCED=y
 CONFIG_FINDFS=y
 CONFIG_FREERAMDISK=y
 CONFIG_FSCK_MINIX=y
+CONFIG_MKFS_EXT2=y
 CONFIG_MKFS_MINIX=y
 
 #
 # Minix filesystem support
 #
 CONFIG_FEATURE_MINIX2=y
+CONFIG_MKFS_REISER=y
 CONFIG_MKFS_VFAT=y
 CONFIG_GETOPT=y
 CONFIG_FEATURE_GETOPT_LONG=y
@@ -506,6 +516,8 @@ CONFIG_FEATURE_HWCLOCK_ADJTIME_FHS=y
 CONFIG_IPCRM=y
 CONFIG_IPCS=y
 CONFIG_LOSETUP=y
+CONFIG_LSPCI=y
+CONFIG_LSUSB=y
 CONFIG_MDEV=y
 CONFIG_FEATURE_MDEV_CONF=y
 CONFIG_FEATURE_MDEV_RENAME=y
@@ -518,6 +530,7 @@ CONFIG_MORE=y
 CONFIG_FEATURE_USE_TERMIOS=y
 CONFIG_VOLUMEID=y
 CONFIG_FEATURE_VOLUMEID_EXT=y
+CONFIG_FEATURE_VOLUMEID_BTRFS=y
 CONFIG_FEATURE_VOLUMEID_REISERFS=y
 CONFIG_FEATURE_VOLUMEID_FAT=y
 CONFIG_FEATURE_VOLUMEID_HFS=y
@@ -595,6 +608,7 @@ CONFIG_DEVMEM=y
 CONFIG_EJECT=y
 CONFIG_FEATURE_EJECT_SCSI=y
 CONFIG_FBSPLASH=y
+CONFIG_FLASHCP=y
 # CONFIG_FLASH_LOCK is not set
 # CONFIG_FLASH_UNLOCK is not set
 # CONFIG_FLASH_ERASEALL is not set
@@ -638,6 +652,7 @@ CONFIG_TIME=y
 CONFIG_TIMEOUT=y
 CONFIG_TTYSIZE=y
 CONFIG_VOLNAME=y
+CONFIG_WALL=y
 CONFIG_WATCHDOG=y
 
 #
@@ -657,6 +672,7 @@ CONFIG_ETHER_WAKE=y
 CONFIG_FAKEIDENTD=y
 CONFIG_FTPD=y
 CONFIG_FEATURE_FTP_WRITE=y
+CONFIG_FEATURE_FTPD_ACCEPT_BROKEN_LIST=y
 CONFIG_FTPGET=y
 CONFIG_FTPPUT=y
 CONFIG_FEATURE_FTPGETPUT_LONG_OPTIONS=y
@@ -722,6 +738,8 @@ CONFIG_NETSTAT=y
 CONFIG_FEATURE_NETSTAT_WIDE=y
 CONFIG_FEATURE_NETSTAT_PRG=y
 CONFIG_NSLOOKUP=y
+CONFIG_NTPD=y
+CONFIG_FEATURE_NTPD_SERVER=y
 CONFIG_PING=y
 CONFIG_PING6=y
 CONFIG_FEATURE_FANCY_PING=y
@@ -733,13 +751,16 @@ CONFIG_FEATURE_TELNET_TTYPE=y
 CONFIG_FEATURE_TELNET_AUTOLOGIN=y
 CONFIG_TELNETD=y
 CONFIG_FEATURE_TELNETD_STANDALONE=y
+CONFIG_FEATURE_TELNETD_INETD_WAIT=y
 CONFIG_TFTP=y
 CONFIG_TFTPD=y
 CONFIG_FEATURE_TFTP_GET=y
 CONFIG_FEATURE_TFTP_PUT=y
 CONFIG_FEATURE_TFTP_BLOCKSIZE=y
+CONFIG_FEATURE_TFTP_PROGRESS_BAR=y
 CONFIG_TFTP_DEBUG=y
 CONFIG_TRACEROUTE=y
+CONFIG_TRACEROUTE6=y
 CONFIG_FEATURE_TRACEROUTE_VERBOSE=y
 CONFIG_FEATURE_TRACEROUTE_SOURCE_ROUTE=y
 CONFIG_FEATURE_TRACEROUTE_USE_ICMP=y
@@ -813,6 +834,7 @@ CONFIG_FEATURE_TOP_SMP_CPU=y
 CONFIG_FEATURE_TOP_DECIMALS=y
 CONFIG_FEATURE_TOP_SMP_PROCESS=y
 CONFIG_FEATURE_TOPMEM=y
+CONFIG_FEATURE_SHOW_THREADS=y
 CONFIG_UPTIME=y
 CONFIG_WATCH=y
 
@@ -881,6 +903,7 @@ CONFIG_HUSH_CASE=y
 CONFIG_HUSH_FUNCTIONS=y
 CONFIG_HUSH_LOCAL=y
 CONFIG_HUSH_EXPORT_N=y
+CONFIG_HUSH_RANDOM_SUPPORT=y
 CONFIG_LASH=y
 CONFIG_MSH=y
 CONFIG_SH_MATH_SUPPORT=y
index e67f017e7bd71b79adaee9e49bebf4224fe7f71d..e48be46821e7ffe3a07cd33dcc4ca50a44371652 100644 (file)
@@ -79,6 +79,7 @@ int main(int argc, char **argv)
        }
        printf("\n");
 
+       printf("#ifndef SKIP_definitions\n");
        printf("const char applet_names[] ALIGN1 = \"\"\n");
        for (i = 0; i < NUM_APPLETS; i++) {
                printf("\"%s\" \"\\0\"\n", applets[i].name);
@@ -120,9 +121,10 @@ int main(int argc, char **argv)
                printf("0x%02x,\n", v);
                i++;
        }
-       printf("};\n\n");
+       printf("};\n");
 #endif
-
+       printf("#endif /* SKIP_definitions */\n");
+       printf("\n");
        printf("#define MAX_APPLET_NAME_LEN %u\n", MAX_APPLET_NAME_LEN);
 
        return 0;
index f00803c5bf7f8e583f4d761eafa84852c652090c..53900f8d26d332507da84463a1422eeb5de2c093 100644 (file)
@@ -7,6 +7,9 @@
  * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
  */
 #include "libbb.h"
+#ifndef O_NOATIME
+# define O_NOATIME 0
+#endif
 
 /* This is a NOFORK applet. Be very careful! */
 
index a64026d3dd5a90c8e5019eb750b9ebcf8eeed039..3d50bb0f5caec8f66ca099c7cf59d98f06533fbd 100644 (file)
@@ -101,8 +101,10 @@ int md5_sha1_sum_main(int argc UNUSED_PARAM, char **argv)
        unsigned flags;
        /*hash_algo_t hash_algo = applet_name[3];*/
 
-       if (ENABLE_FEATURE_MD5_SHA1_SUM_CHECK)
-               flags = getopt32(argv, "scw");
+       if (ENABLE_FEATURE_MD5_SHA1_SUM_CHECK) {
+               /* -b "binary", -t "text" are ignored (shaNNNsum compat) */
+               flags = getopt32(argv, "scwbt");
+       }
        else optind = 1;
        argv += optind;
        //argc -= optind;
index 0be16631509aef0ded97004e9ee64bb3ab526a63..c9d86f45957e0cc7bc548354d22aa87a15417be8 100644 (file)
@@ -241,7 +241,8 @@ int tail_main(int argc, char **argv)
                                                } while (nwrite);
                                        }
                                }
-                               xwrite(STDOUT_FILENO, buf + nread - nwrite, nwrite);
+                               if (nwrite > 0)
+                                       xwrite(STDOUT_FILENO, buf + nread - nwrite, nwrite);
                        } else if (count) {
                                if (COUNT_BYTES) {
                                        taillen += nread;
index 3f7b265bde1768a5c2ff809bca9dd472f02a4bb0..dceb7c1cce9bd3acbbc907c1cc22edc033729dea 100644 (file)
@@ -104,7 +104,7 @@ int touch_main(int argc UNUSED_PARAM, char **argv)
        }
 
        do {
-               if (utimes(*argv, reference_file ? timebuf : NULL) != 0) {
+               if (utimes(*argv, (reference_file || date_str) ? timebuf : NULL) != 0) {
                        if (errno == ENOENT) { /* no such file */
                                if (opts) { /* creation is disabled, so ignore */
                                        continue;
@@ -113,7 +113,7 @@ int touch_main(int argc UNUSED_PARAM, char **argv)
                                fd = open(*argv, O_RDWR | O_CREAT, 0666);
                                if (fd >= 0) {
                                        xclose(fd);
-                                       if (reference_file)
+                                       if (reference_file || date_str)
                                                utimes(*argv, timebuf);
                                        continue;
                                }
index 08f3c2dc4d9e1116231ba3559dd3f7efbe50c3b0..711684225aa489f62e84bb80cde16b7e5b60e974 100644 (file)
@@ -88,6 +88,8 @@ int wc_main(int argc UNUSED_PARAM, char **argv)
        if (!argv[0]) {
                *--argv = (char *) bb_msg_standard_input;
                fname_fmt = "\n";
+       }
+       if (!argv[1]) { /* zero or one filename? */
                if (!((print_type-1) & print_type)) /* exactly one option? */
                        start_fmt = "%"COUNT_FMT;
        }
index e4d74abca2a879d556d7b9945ccaa5d88af1c4c1..07594e8d8f8ecfde0c2efd8d5b6486357d41dd54 100644 (file)
@@ -227,10 +227,12 @@ struct cand {
 
 static int search(const int *c, int k, int y, const struct cand *list)
 {
+       int i, j;
+
        if (list[c[k]].y < y)   /* quick look for typical case */
                return k + 1;
 
-       for (int i = 0, j = k + 1;;) {
+       for (i = 0, j = k + 1;;) {
                const int l = (i + j) >> 1;
                if (l > i) {
                        const int t = list[c[l]].y;
@@ -265,11 +267,13 @@ static void stone(const int *a, int n, const int *b, int *J, int pref)
        int clistlen = 100;
        int k = 0;
        struct cand *clist = xzalloc(clistlen * sizeof(clist[0]));
+       struct cand cand;
+       struct cand *q;
        int *klist = xzalloc((n + 2) * sizeof(klist[0]));
        /*clist[0] = (struct cand){0}; - xzalloc did it */
        /*klist[0] = 0; */
 
-       for (struct cand cand = {1}; cand.x <= n; cand.x++) {
+       for (cand.x = 1; cand.x <= n; cand.x++) {
                int j = a[cand.x], oldl = 0;
                unsigned numtries = 0;
                if (j == 0)
@@ -303,7 +307,7 @@ static void stone(const int *a, int n, const int *b, int *J, int pref)
                } while ((cand.y = b[++j]) > 0 && numtries < bound);
        }
        /* Unravel */
-       for (struct cand *q = clist + klist[k]; q->y; q = clist + q->pred)
+       for (q = clist + klist[k]; q->y; q = clist + q->pred)
                J[q->x + pref] = q->y + pref;
        free(klist);
        free(clist);
@@ -348,10 +352,11 @@ static void equiv(struct line *a, int n, struct line *b, int m, int *c)
 
 static void unsort(const struct line *f, int l, int *b)
 {
+       int i;
        int *a = xmalloc((l + 1) * sizeof(a[0]));
-       for (int i = 1; i <= l; i++)
+       for (i = 1; i <= l; i++)
                a[f[i].serial] = f[i].value;
-       for (int i = 1; i <= l; i++)
+       for (i = 1; i <= l; i++)
                b[i] = a[i];
        free(a);
 }
@@ -370,12 +375,13 @@ static int line_compar(const void *a, const void *b)
 
 static void fetch(FILE_and_pos_t *ft, const off_t *ix, int a, int b, int ch)
 {
-       for (int i = a; i <= b; i++) {
+       int i, j, col;
+       for (i = a; i <= b; i++) {
                seek_ft(ft, ix[i - 1]);
                putchar(ch);
                if (option_mask32 & FLAG(T))
                        putchar('\t');
-               for (int j = 0, col = 0; j < ix[i] - ix[i - 1]; j++) {
+               for (j = 0, col = 0; j < ix[i] - ix[i - 1]; j++) {
                        int c = fgetc(ft->ft_fp);
                        if (c == EOF) {
                                printf("\n\\ No newline at end of file\n");
@@ -410,19 +416,20 @@ static NOINLINE int *create_J(FILE_and_pos_t ft[2], int nlen[2], off_t *ix[2])
 {
        int *J, slen[2], *class, *member;
        struct line *nfile[2], *sfile[2];
-       int pref = 0, suff = 0;
+       int pref = 0, suff = 0, i, j, delta;
 
        /* Lines of both files are hashed, and in the process
         * their offsets are stored in the array ix[fileno]
         * where fileno == 0 points to the old file, and
         * fileno == 1 points to the new one.
         */
-       for (int i = 0; i < 2; i++) {
+       for (i = 0; i < 2; i++) {
                unsigned hash;
                token_t tok;
                size_t sz = 100;
                nfile[i] = xmalloc((sz + 3) * sizeof(nfile[i][0]));
                /* ft gets here without the correct position, cant use seek_ft */
+               ft[i].ft_pos = 0;
                fseeko(ft[i].ft_fp, 0, SEEK_SET);
 
                nlen[i] = 0;
@@ -460,11 +467,11 @@ start:
                        nlen[i]--;
                /* Now we copy the line offsets into ix */
                ix[i] = xmalloc((nlen[i] + 2) * sizeof(ix[i][0]));
-               for (int j = 0; j < nlen[i] + 1; j++)
+               for (j = 0; j < nlen[i] + 1; j++)
                        ix[i][j] = nfile[i][j].offset;
        }
 
-       /* lenght of prefix and suffix is calculated */
+       /* length of prefix and suffix is calculated */
        for (; pref < nlen[0] && pref < nlen[1] &&
               nfile[0][pref + 1].value == nfile[1][pref + 1].value;
               pref++);
@@ -475,10 +482,10 @@ start:
         * the result being sorted and stored in sfile[fileno],
         * and their sizes are stored in slen[fileno]
         */
-       for (int j = 0; j < 2; j++) {
+       for (j = 0; j < 2; j++) {
                sfile[j] = nfile[j] + pref;
                slen[j] = nlen[j] - pref - suff;
-               for (int i = 0; i <= slen[j]; i++)
+               for (i = 0; i <= slen[j]; i++)
                        sfile[j][i].serial = i;
                qsort(sfile[j] + 1, slen[j], sizeof(*sfile[j]), line_compar);
        }
@@ -494,7 +501,7 @@ start:
        free(nfile[1]);
 
        class = xmalloc((slen[0] + 1) * sizeof(class[0]));
-       for (int i = 1; i <= slen[0]; i++) /* Unsorting */
+       for (i = 1; i <= slen[0]; i++) /* Unsorting */
                class[sfile[0][i].serial] = sfile[0][i].value;
        free(nfile[0]);
 #else
@@ -512,7 +519,7 @@ start:
         * are initialized with 0 (no matches), so that function stone can
         * then assign them their right values
         */
-       for (int i = 0, delta = nlen[1] - nlen[0]; i <= nlen[0]; i++)
+       for (i = 0, delta = nlen[1] - nlen[0]; i <= nlen[0]; i++)
                J[i] = i <= pref            ?  i :
                       i > (nlen[0] - suff) ? (i + delta) : 0;
        /* Here the magic is performed */
@@ -526,14 +533,14 @@ start:
         * which, due to limitations intrinsic to any hashing algorithm,
         * are different but ended up confounded as the same
         */
-       for (int i = 1; i <= nlen[0]; i++) {
+       for (i = 1; i <= nlen[0]; i++) {
                if (!J[i])
                        continue;
 
                seek_ft(&ft[0], ix[0][i - 1]);
                seek_ft(&ft[1], ix[1][J[i] - 1]);
 
-               for (int j = J[i]; i <= nlen[0] && J[i] == j; i++, j++) {
+               for (j = J[i]; i <= nlen[0] && J[i] == j; i++, j++) {
                        token_t tok0 = 0, tok1 = 0;
                        do {
                                tok0 = read_token(&ft[0], tok0);
@@ -555,13 +562,18 @@ static bool diff(FILE* fp[2], char *file[2])
 {
        int nlen[2];
        off_t *ix[2];
-       FILE_and_pos_t ft[2] = { { fp[0] }, { fp[1] } };
-       int *J = create_J(ft, nlen, ix);
-
-       bool anychange = false;
+       FILE_and_pos_t ft[2];
        typedef struct { int a, b; } vec_t[2];
        vec_t *vec = NULL;
-       int i = 1, idx = -1;
+       int i = 1, j, k, idx = -1;
+       bool anychange = false;
+       int *J;
+
+       ft[0].ft_fp = fp[0];
+       ft[1].ft_fp = fp[1];
+       /* note that ft[i].ft_pos is unintitalized, create_J()
+        * must not assume otherwise */
+       J = create_J(ft, nlen, ix);
 
        do {
                bool nonempty = false;
@@ -596,8 +608,8 @@ static bool diff(FILE* fp[2], char *file[2])
                                        break;
                                }
 
-                               for (int j = 0; j < 2; j++)
-                                       for (int k = v[j].a; k < v[j].b; k++)
+                               for (j = 0; j < 2; j++)
+                                       for (k = v[j].a; k < v[j].b; k++)
                                                nonempty |= (ix[j][k+1] - ix[j][k] != 1);
 
                                vec = xrealloc_vector(vec, 6, ++idx);
@@ -612,6 +624,7 @@ static bool diff(FILE* fp[2], char *file[2])
                if (idx < 0 || ((option_mask32 & FLAG(B)) && !nonempty))
                        goto cont;
                if (!(option_mask32 & FLAG(q))) {
+                       int lowa;
                        vec_t span, *cvp = vec;
 
                        if (!anychange) {
@@ -621,7 +634,7 @@ static bool diff(FILE* fp[2], char *file[2])
                        }
 
                        printf("@@");
-                       for (int j = 0; j < 2; j++) {
+                       for (j = 0; j < 2; j++) {
                                int a = span[j].a = MAX(1, (*cvp)[j].a - opt_U_context);
                                int b = span[j].b = MIN(nlen[j], vec[idx][j].b + opt_U_context);
 
@@ -635,12 +648,12 @@ static bool diff(FILE* fp[2], char *file[2])
                         * Output changes in "unified" diff format--the old and new lines
                         * are printed together.
                         */
-                       for (int lowa = span[0].a; ; lowa = (*cvp++)[0].b + 1) {
+                       for (lowa = span[0].a; ; lowa = (*cvp++)[0].b + 1) {
                                bool end = cvp > &vec[idx];
                                fetch(&ft[0], ix[0], lowa, end ? span[0].b : (*cvp)[0].a - 1, ' ');
                                if (end)
                                        break;
-                               for (int j = 0; j < 2; j++)
+                               for (j = 0; j < 2; j++)
                                        fetch(&ft[j], ix[j], (*cvp)[j].a, (*cvp)[j].b, j ? '+' : '-');
                        }
                }
@@ -660,9 +673,9 @@ static int diffreg(char *file[2])
 {
        FILE *fp[2] = { stdin, stdin };
        bool binary = false, differ = false;
-       int status = STATUS_SAME;
+       int status = STATUS_SAME, i;
 
-       for (int i = 0; i < 2; i++) {
+       for (i = 0; i < 2; i++) {
                int fd = open_or_warn_stdin(file[i]);
                if (fd == -1)
                        goto out;
@@ -688,7 +701,7 @@ static int diffreg(char *file[2])
                const size_t sz = COMMON_BUFSIZE / 2;
                char *const buf0 = bb_common_bufsiz1;
                char *const buf1 = buf0 + sz;
-               int i, j;
+               int j, k;
                i = fread(buf0, 1, sz, fp[0]);
                j = fread(buf1, 1, sz, fp[1]);
                if (i != j) {
@@ -697,7 +710,7 @@ static int diffreg(char *file[2])
                }
                if (i == 0)
                        break;
-               for (int k = 0; k < i; k++) {
+               for (k = 0; k < i; k++) {
                        if (!buf0[k] || !buf1[k])
                                binary = true;
                        if (buf0[k] != buf1[k])
@@ -771,9 +784,10 @@ static int FAST_FUNC skip_dir(const char *filename,
 static void diffdir(char *p[2], const char *s_start)
 {
        struct dlist list[2];
+       int i;
 
        memset(&list, 0, sizeof(list));
-       for (int i = 0; i < 2; i++) {
+       for (i = 0; i < 2; i++) {
                /*list[i].s = list[i].e = 0; - memset did it */
                /*list[i].dl = NULL; */
 
@@ -815,7 +829,7 @@ static void diffdir(char *p[2], const char *s_start)
                else {
                        char *fullpath[2], *path[2]; /* if -N */
 
-                       for (int i = 0; i < 2; i++) {
+                       for (i = 0; i < 2; i++) {
                                if (pos == 0 || i == k) {
                                        path[i] = fullpath[i] = concat_path_file(p[i], dp[i]);
                                        stat(fullpath[i], &stb[i]);
@@ -883,7 +897,7 @@ static const char diff_longopts[] ALIGN1 =
 int diff_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
 int diff_main(int argc UNUSED_PARAM, char **argv)
 {
-       int gotstdin = 0;
+       int gotstdin = 0, i;
        char *file[2], *s_start = NULL;
        llist_t *L_arg = NULL;
 
@@ -900,7 +914,7 @@ int diff_main(int argc UNUSED_PARAM, char **argv)
        while (L_arg)
                label[!!label[0]] = llist_pop(&L_arg);
        xfunc_error_retval = 2;
-       for (int i = 0; i < 2; i++) {
+       for (i = 0; i < 2; i++) {
                file[i] = argv[i];
                /* Compat: "diff file name_which_doesnt_exist" exits with 2 */
                if (LONE_DASH(file[i])) {
index 44cc834223cc8b3a1738d6e8809e66a123de8d6f..fb983c1cde19be1016a3f9e9e535f3e3ab7a1fcf 100644 (file)
@@ -16,7 +16,7 @@
 #define NOUSAGE_STR "\b"
 
 #define acpid_trivial_usage \
-       "[-d] [-c CONFDIR] [-l LOGFILE] [-e PROC_EVENT_FILE] [EVDEV_EVENT_FILE...]"
+       "[-d] [-c CONFDIR] [-l LOGFILE] [-e PROC_EVENT_FILE] [EVDEV_EVENT_FILE]..."
 #define acpid_full_usage "\n\n" \
        "Listen to ACPI events and spawn specific helpers on event arrival\n" \
      "\nOptions:" \
@@ -33,7 +33,7 @@
        "# acpid -d /dev/input/event*\n"
 
 #define addgroup_trivial_usage \
-       "[-g GID] " IF_FEATURE_ADDUSER_TO_GROUP("[user_name] ") "group_name"
+       "[-g GID] " IF_FEATURE_ADDUSER_TO_GROUP("[USER] ") "GROUP"
 #define addgroup_full_usage "\n\n" \
        "Add a group " IF_FEATURE_ADDUSER_TO_GROUP("or add a user to a group") "\n" \
      "\nOptions:" \
@@ -41,7 +41,7 @@
      "\n       -S      Create a system group" \
 
 #define adduser_trivial_usage \
-       "[OPTIONS] user_name"
+       "[OPTIONS] USER"
 #define adduser_full_usage "\n\n" \
        "Add a user\n" \
      "\nOptions:" \
      "\n       -u UID          User id" \
 
 #define adjtimex_trivial_usage \
-       "[-q] [-o offset] [-f frequency] [-p timeconstant] [-t tick]"
+       "[-q] [-o OFF] [-f FREQ] [-p TCONST] [-t TICK]"
 #define adjtimex_full_usage "\n\n" \
-       "Read and optionally set system timebase parameters. See adjtimex(2).\n" \
+       "Read and optionally set system timebase parameters. See adjtimex(2)\n" \
      "\nOptions:" \
-     "\n       -q              Quiet" \
-     "\n       -o offset       Time offset, microseconds" \
-     "\n       -f frequency    Frequency adjust, integer kernel units (65536 is 1ppm)" \
-     "\n                       (positive values make clock run faster)" \
-     "\n       -t tick         Microseconds per tick, usually 10000" \
-     "\n       -p timeconstant" \
+     "\n       -q      Quiet" \
+     "\n       -o OFF  Time offset, microseconds" \
+     "\n       -f FREQ Frequency adjust, integer kernel units (65536 is 1ppm)" \
+     "\n               (positive values make clock run faster)" \
+     "\n       -t TICK Microseconds per tick, usually 10000" \
+     "\n       -p TCONST" \
 
 #define ar_trivial_usage \
        "[-o] [-v] [-p] [-t] [-x] ARCHIVE FILES"
      "\n       -v      Verbose" \
 
 #define arp_trivial_usage \
-     "\n[-vn]  [-H type] [-i if] -a [hostname]" \
-     "\n[-v]             [-i if] -d hostname [pub]" \
-     "\n[-v]   [-H type] [-i if] -s hostname hw_addr [temp]" \
-     "\n[-v]   [-H type] [-i if] -s hostname hw_addr [netmask nm] pub" \
-     "\n[-v]   [-H type] [-i if] -Ds hostname ifa [netmask nm] pub"
+     "\n[-vn]  [-H HWTYPE] [-i IF] -a [HOSTNAME]" \
+     "\n[-v]               [-i IF] -d HOSTNAME [pub]" \
+     "\n[-v]   [-H HWTYPE] [-i IF] -s HOSTNAME HWADDR [temp]" \
+     "\n[-v]   [-H HWTYPE] [-i IF] -s HOSTNAME HWADDR [netmask MASK] pub" \
+     "\n[-v]   [-H HWTYPE] [-i IF] -Ds HOSTNAME IFACE [netmask MASK] pub"
 #define arp_full_usage "\n\n" \
        "Manipulate ARP cache\n" \
      "\nOptions:" \
@@ -97,7 +97,7 @@
        "\n     -H HWTYPE       Hardware address type" \
 
 #define arping_trivial_usage \
-       "[-fqbDUA] [-c count] [-w timeout] [-I dev] [-s sender] target"
+       "[-fqbDUA] [-c CNT] [-w TIMEOUT] [-I IFACE] [-s SRC_IP] DST_IP"
 #define arping_full_usage "\n\n" \
        "Send ARP requests/replies\n" \
      "\nOptions:" \
      "\n       -U              Unsolicited ARP mode, update your neighbors" \
      "\n       -A              ARP answer mode, update your neighbors" \
      "\n       -c N            Stop after sending N ARP requests" \
-     "\n       -w timeout      Time to wait for ARP reply, in seconds" \
-     "\n       -I dev          Interface to use (default eth0)" \
-     "\n       -s sender       Sender IP address" \
-     "\n       target          Target IP address" \
+     "\n       -w TIMEOUT      Time to wait for ARP reply, seconds" \
+     "\n       -I IFACE        Interface to use (default eth0)" \
+     "\n       -s SRC_IP       Sender IP address" \
+     "\n       DST_IP          Target IP address" \
 
 #define sh_trivial_usage NOUSAGE_STR
 #define sh_full_usage ""
        ) \
 
 #define bunzip2_trivial_usage \
-       "[OPTIONS] [FILE]"
+       "[OPTIONS] [FILE]..."
 #define bunzip2_full_usage "\n\n" \
-       "Uncompress FILE (or standard input)\n" \
+       "Uncompress FILEs (or stdin)\n" \
      "\nOptions:" \
-     "\n       -c      Write to standard output" \
+     "\n       -c      Write to stdout" \
      "\n       -f      Force" \
 
 #define bzip2_trivial_usage \
        "[OPTIONS] [FILE]..."
 #define bzip2_full_usage "\n\n" \
-       "Compress FILEs (or standard input) with bzip2 algorithm.\n" \
+       "Compress FILEs (or stdin) with bzip2 algorithm\n" \
      "\nOptions:" \
-     "\n       -c      Write to standard output" \
+     "\n       -c      Write to stdout" \
      "\n       -d      Decompress" \
      "\n       -f      Force" \
      "\n       -1..-9  Compression level" \
 #define lzop_trivial_usage \
        "[-cfvd123456789CF] [FILE]..."
 #define lzop_full_usage "\n\n" \
-       "       -c      Write to standard output" \
+       "       -c      Write to stdout" \
      "\n       -f      Force" \
      "\n       -v      Verbose" \
      "\n       -d      Decompress" \
 #define unlzop_trivial_usage \
        "[-cfvCF] [FILE]..."
 #define unlzop_full_usage "\n\n" \
-       "       -c      Write to standard output" \
+       "       -c      Write to stdout" \
      "\n       -f      Force" \
      "\n       -v      Verbose" \
      "\n       -F      Don't store or verify checksum" \
        "Uncompress to stdout"
 
 #define unlzma_trivial_usage \
-       "[OPTIONS] [FILE]"
+       "[OPTIONS] [FILE]..."
 #define unlzma_full_usage "\n\n" \
-       "Uncompress FILE (or standard input)\n" \
+       "Uncompress FILE (or stdin)\n" \
      "\nOptions:" \
-     "\n       -c      Write to standard output" \
+     "\n       -c      Write to stdout" \
      "\n       -f      Force" \
 
 #define lzmacat_trivial_usage \
        "Uncompress to stdout"
 
 #define cal_trivial_usage \
-       "[-jy] [[month] year]"
+       "[-jy] [[MONTH] YEAR]"
 #define cal_full_usage "\n\n" \
        "Display a calendar\n" \
      "\nOptions:" \
      "\n       -c BYTES        Limit core file size" \
      "\n       -v              Verbose" \
      "\n       -P              Create new process group" \
-     "\n       -0              Close standard input" \
-     "\n       -1              Close standard output" \
-     "\n       -2              Close standard error" \
+     "\n       -0              Close stdin" \
+     "\n       -1              Close stdout" \
+     "\n       -2              Close stderr" \
 
 #define setuidgid_trivial_usage \
-       "account prog args"
+       "USER PROG ARGS"
 #define setuidgid_full_usage "\n\n" \
-       "Set uid and gid to account's uid and gid, removing all supplementary\n" \
+       "Set uid and gid to USER's uid and gid, removing all supplementary\n" \
        "groups and run PROG"
 #define envuidgid_trivial_usage \
-       "account prog args"
+       "USER PROG ARGS"
 #define envuidgid_full_usage "\n\n" \
-       "Set $UID to account's uid and $GID to account's gid and run PROG"
+       "Set $UID to USER's uid and $GID to USER's gid and run PROG"
 #define envdir_trivial_usage \
-       "dir prog args"
+       "DIR PROG ARGS"
 #define envdir_full_usage "\n\n" \
        "Set various environment variables as specified by files\n" \
        "in the directory dir and run PROG"
      "\n                       a SIGXCPU after N seconds" \
 
 #define chroot_trivial_usage \
-       "NEWROOT [PROG [ARGS]]"
+       "NEWROOT [PROG ARGS]"
 #define chroot_full_usage "\n\n" \
        "Run PROG with root directory set to NEWROOT"
 #define chroot_example_usage \
        "Print the config file which built busybox"
 
 #define chrt_trivial_usage \
-       "[OPTIONS] [PRIO] [PID | PROG [ARGS]]"
+       "[OPTIONS] [PRIO] [PID | PROG ARGS]"
 #define chrt_full_usage "\n\n" \
        "Manipulate real-time attributes of a process\n" \
      "\nOptions:" \
        "Extract or list files from a cpio archive" \
        IF_FEATURE_CPIO_O(", or" \
      "\ncreate an archive" IF_FEATURE_CPIO_P(" (-o) or copy files (-p)") \
-               " using file list on standard input" \
+               " using file list on stdin" \
        ) \
      "\n" \
      "\nMain operation mode:" \
 #define cut_trivial_usage \
        "[OPTIONS] [FILE]..."
 #define cut_full_usage "\n\n" \
-       "Print selected fields from each input FILE to standard output\n" \
+       "Print selected fields from each input FILE to stdout\n" \
      "\nOptions:" \
      "\n       -b LIST Output only bytes from LIST" \
      "\n       -c LIST Output only characters from LIST" \
        "p - print top of the stack (without altering the stack),\n" \
        "f - print entire stack, o - pop the value and set output radix\n" \
        "(value must be 10 or 16).\n" \
-       "Examples: 'dc 2 2 add' -> 4, 'dc 8 8 * 2 2 + /' -> 16.\n" \
+       "Examples: 'dc 2 2 add' -> 4, 'dc 8 8 * 2 2 + /' -> 16\n" \
 
 #define dc_example_usage \
        "$ dc 2 2 + p\n" \
        "[-Pk" \
        IF_FEATURE_HUMAN_READABLE("mh") \
        IF_FEATURE_DF_FANCY("ai] [-B SIZE") \
-       "] [FILESYSTEM...]"
+       "] [FILESYSTEM]..."
 #define df_full_usage "\n\n" \
        "Print filesystem usage statistics\n" \
      "\nOptions:" \
        "/dev/sda3             17381728  17107080    274648      98% /\n"
 
 #define dhcprelay_trivial_usage \
-       "CLIENT_IFACE[,CLIENT_IFACE2...] SERVER_IFACE [SERVER_IP]"
+       "CLIENT_IFACE[,CLIENT_IFACE2]... SERVER_IFACE [SERVER_IP]"
 #define dhcprelay_full_usage "\n\n" \
        "Relay DHCP requests between clients and server" \
 
      "\n       -s SIZE         Buffer size" \
 
 #define dnsd_trivial_usage \
-       "[-c config] [-t seconds] [-p port] [-i iface-ip] [-d]"
+       "[-dvs] [-c CONFFILE] [-t TTL_SEC] [-p PORT] [-i ADDR]"
 #define dnsd_full_usage "\n\n" \
        "Small static DNS server daemon\n" \
      "\nOptions:" \
-     "\n       -c      Config filename" \
-     "\n       -t      TTL in seconds" \
-     "\n       -p      Listening port" \
-     "\n       -i      Listening ip (default all)" \
+     "\n       -c FILE Config file" \
+     "\n       -t SEC  TTL" \
+     "\n       -p PORT Listen on PORT" \
+     "\n       -i ADDR Listen on ADDR" \
      "\n       -d      Daemonize" \
+     "\n       -v      Verbose" \
+     "\n       -s      Send successful replies only. Use this if you want" \
+     "\n               to use /etc/resolv.conf with two nameserver lines:" \
+     "\n                       nameserver DNSD_SERVER" \
+     "\n                       nameserver NORNAL_DNS_SERVER" \
 
 #define dos2unix_trivial_usage \
        "[OPTIONS] [FILE]"
      "\n       -d      unix2dos" \
 
 #define dpkg_trivial_usage \
-       "[-ilCPru] [-F option] package_name"
+       "[-ilCPru] [-F OPT] PACKAGE"
 #define dpkg_full_usage "\n\n" \
        "Install, remove and manage Debian packages\n" \
      "\nOptions:" \
 #define dumpkmap_trivial_usage \
        "> keymap"
 #define dumpkmap_full_usage "\n\n" \
-       "Print a binary keyboard translation table to standard output"
+       "Print a binary keyboard translation table to stdout"
 #define dumpkmap_example_usage \
        "$ dumpkmap > keymap\n"
 
 */
 
 #define echo_trivial_usage \
-       IF_FEATURE_FANCY_ECHO("[-neE] ") "[ARG...]"
+       IF_FEATURE_FANCY_ECHO("[-neE] ") "[ARG]..."
 #define echo_full_usage "\n\n" \
        "Print the specified ARGs to stdout" \
        IF_FEATURE_FANCY_ECHO( "\n" \
 #define eject_trivial_usage \
        "[-t] [-T] [DEVICE]"
 #define eject_full_usage "\n\n" \
-       "Eject specified DEVICE (or default /dev/cdrom)\n" \
+       "Eject DEVICE or default /dev/cdrom\n" \
      "\nOptions:" \
        IF_FEATURE_EJECT_SCSI( \
      "\n       -s      SCSI device" \
 #define ed_full_usage ""
 
 #define env_trivial_usage \
-       "[-iu] [-] [name=value]... [PROG [ARGS]]"
+       "[-iu] [-] [name=value]... [PROG ARGS]"
 #define env_full_usage "\n\n" \
        "Print the current environment or run PROG after setting up\n" \
        "the specified environment\n" \
 #define expand_trivial_usage \
        "[-i] [-t N] [FILE|-]"
 #define expand_full_usage "\n\n" \
-       "Convert tabs to spaces, writing to standard output\n" \
+       "Convert tabs to spaces, writing to stdout\n" \
      "\nOptions:" \
        IF_FEATURE_EXPAND_LONG_OPTIONS( \
      "\n       -i,--initial    Don't convert tabs after non blanks" \
 #define expr_trivial_usage \
        "EXPRESSION"
 #define expr_full_usage "\n\n" \
-       "Print the value of EXPRESSION to standard output\n" \
+       "Print the value of EXPRESSION to stdout\n" \
     "\n" \
        "EXPRESSION may be:\n" \
        "       ARG1 | ARG2     ARG1 if it is neither null nor 0, otherwise ARG2\n" \
        "$ findfs LABEL=MyDevice"
 
 #define find_trivial_usage \
-       "[PATH...] [EXPRESSION]"
+       "[PATH]... [EXPRESSION]"
 #define find_full_usage "\n\n" \
        "Search for files. The default PATH is the current directory,\n" \
        "default EXPRESSION is '-print'\n" \
        IF_FEATURE_FIND_DEPTH( \
      "\n       -depth          Process directory name after traversing it") \
        IF_FEATURE_FIND_SIZE( \
-     "\n       -size N[bck]    File size is N (c:bytes,k:kbytes,b:512 bytes(def.))." \
+     "\n       -size N[bck]    File size is N (c:bytes,k:kbytes,b:512 bytes(def.))" \
      "\n                       +/-N: file size is bigger/smaller than N") \
        IF_FEATURE_FIND_LINKS( \
      "\n       -links N        Number of links is greater than (+N), less than (-N)," \
      "\n       -v      Verbose" \
 
 #define fold_trivial_usage \
-       "[-bs] [-w WIDTH] [FILE]"
+       "[-bs] [-w WIDTH] [FILE]..."
 #define fold_full_usage "\n\n" \
-       "Wrap input lines in each FILE (standard input by default), writing to\n" \
-       "standard output\n" \
+       "Wrap input lines in each FILE (or stdin), writing to stdout\n" \
      "\nOptions:" \
      "\n       -b      Count bytes rather than columns" \
      "\n       -s      Break at spaces" \
        "$ freeramdisk /dev/ram2\n"
 
 #define fsck_trivial_usage \
-       "[-ANPRTV] [-C fd] [-t fstype] [fs-options] [filesys...]"
+       "[-ANPRTV] [-C FD] [-t FSTYPE] [FS_OPTS] [BLOCKDEV]..."
 #define fsck_full_usage "\n\n" \
        "Check and repair filesystems\n" \
      "\nOptions:" \
      "\n       -T      Don't show title on startup" \
      "\n       -V      Verbose" \
      "\n       -C n    Write status information to specified filedescriptor" \
-     "\n       -t type List of filesystem types to check" \
+     "\n       -t TYPE List of filesystem types to check" \
 
 #define fsck_minix_trivial_usage \
-       "[-larvsmf] /dev/name"
+       "[-larvsmf] BLOCKDEV"
 #define fsck_minix_full_usage "\n\n" \
        "Check MINIX filesystem\n" \
      "\nOptions:" \
        "#!/bin/sh\n" \
        "GETOPT=`getopt -o ab:c:: --long a-long,b-long:,c-long:: \\\n" \
        "       -n 'example.busybox' -- \"$@\"`\n" \
-       "if [ $? != 0 ]; then  exit 1; fi\n" \
+       "if [ $? != 0 ]; then exit 1; fi\n" \
        "eval set -- \"$GETOPT\"\n" \
        "while true; do\n" \
        " case $1 in\n" \
      "\n       -H HOST         Log HOST into the utmp file as the hostname" \
 
 #define grep_trivial_usage \
-       "[-HhrilLnqvso" \
+       "[-HhnlLoqvsri" \
        IF_DESKTOP("w") \
-       "eF" \
+       "F" \
        IF_FEATURE_GREP_EGREP_ALIAS("E") \
-       IF_FEATURE_GREP_CONTEXT("ABC") \
        IF_EXTRA_COMPAT("z") \
-       "] PATTERN [FILE]..."
+       "] [-m N] " \
+       IF_FEATURE_GREP_CONTEXT("[-A/B/C N] ") \
+       "PATTERN/-e PATTERN.../-f FILE [FILE]..."
 #define grep_full_usage "\n\n" \
-       "Search for PATTERN in each FILE or standard input\n" \
-     "\nOptions:" \
-     "\n       -H      Prefix output lines with filename where match was found" \
-     "\n       -h      Suppress the prefixing filename on output" \
-     "\n       -r      Recurse" \
-     "\n       -i      Ignore case distinctions" \
-     "\n       -l      List names of files that match" \
-     "\n       -L      List names of files that don't match" \
-     "\n       -n      Print line number with output lines" \
+       "Search for PATTERN in FILEs (or stdin)\n" \
+     "\nOptions:" \
+     "\n       -H      Add 'filename:' prefix" \
+     "\n       -h      Do not add 'filename:' prefix" \
+     "\n       -n      Add 'line_no:' prefix" \
+     "\n       -l      Show only names of files that match" \
+     "\n       -L      Show only names of files that don't match" \
+     "\n       -c      Show only count of matching lines" \
+     "\n       -o      Show only the matching part of line" \
      "\n       -q      Quiet. Return 0 if PATTERN is found, 1 otherwise" \
      "\n       -v      Select non-matching lines" \
-     "\n       -s      Suppress file open/read error messages" \
-     "\n       -c      Only print count of matching lines" \
-     "\n       -o      Show only the part of a line that matches PATTERN" \
-     "\n       -m N    Match up to N times per file" \
+     "\n       -s      Suppress open and read errors" \
+     "\n       -r      Recurse" \
+     "\n       -i      Ignore case" \
        IF_DESKTOP( \
-     "\n       -w      Match whole words only") \
-     "\n       -F      PATTERN is a set of newline-separated strings" \
+     "\n       -w      Match whole words only" \
+       ) \
+     "\n       -F      PATTERN is a literal (not regexp)" \
        IF_FEATURE_GREP_EGREP_ALIAS( \
-     "\n       -E      PATTERN is an extended regular expression") \
-     "\n       -e PTRN Pattern to match" \
-     "\n       -f FILE Read pattern from file" \
+     "\n       -E      PATTERN is an extended regexp" \
+       ) \
+       IF_EXTRA_COMPAT( \
+     "\n       -z      Input is NUL terminated" \
+       ) \
+     "\n       -m N    Match up to N times per file" \
        IF_FEATURE_GREP_CONTEXT( \
      "\n       -A N    Print N lines of trailing context" \
      "\n       -B N    Print N lines of leading context" \
-     "\n       -C N    Print N lines of output context") \
-       IF_EXTRA_COMPAT( \
-     "\n       -z      Input is NUL terminated") \
+     "\n       -C N    Same as '-A N -B N'" \
+       ) \
+     "\n       -e PTRN Pattern to match" \
+     "\n       -f FILE Read pattern from file" \
 
 #define grep_example_usage \
        "$ grep root /etc/passwd\n" \
 #define gunzip_trivial_usage \
        "[OPTIONS] [FILE]..."
 #define gunzip_full_usage "\n\n" \
-       "Uncompress FILEs (or standard input)\n" \
+       "Uncompress FILEs (or stdin)\n" \
      "\nOptions:" \
-     "\n       -c      Write to standard output" \
+     "\n       -c      Write to stdout" \
      "\n       -f      Force" \
      "\n       -t      Test file integrity" \
 
 #define gzip_trivial_usage \
        "[OPTIONS] [FILE]..."
 #define gzip_full_usage "\n\n" \
-       "Compress FILEs (or standard input)\n" \
+       "Compress FILEs (or stdin)\n" \
      "\nOptions:" \
-     "\n       -c      Write to standard output" \
+     "\n       -c      Write to stdout" \
      "\n       -d      Decompress" \
      "\n       -f      Force" \
 
 #define head_trivial_usage \
        "[OPTIONS] [FILE]..."
 #define head_full_usage "\n\n" \
-       "Print first 10 lines of each FILE (or standard input) to standard output.\n" \
+       "Print first 10 lines of each FILE (or stdin) to stdout.\n" \
        "With more than one FILE, precede each with a header giving the file name.\n" \
      "\nOptions:" \
      "\n       -n N    Print first N lines instead of first 10" \
        "daemon:x:1:1:daemon:/usr/sbin:/bin/sh\n"
 
 #define hexdump_trivial_usage \
-       "[-bcCdefnosvx" IF_FEATURE_HEXDUMP_REVERSE("R") "] FILE..."
+       "[-bcCdefnosvx" IF_FEATURE_HEXDUMP_REVERSE("R") "] [FILE]..."
 #define hexdump_full_usage "\n\n" \
-       "Display FILEs or standard input in a user specified format\n" \
+       "Display FILEs (or stdin) in a user specified format\n" \
      "\nOptions:" \
      "\n       -b              One-byte octal display" \
      "\n       -c              One-byte character display" \
        "       [up|down] ..."
 
 #define ifenslave_trivial_usage \
-       "[-cdf] master-iface <slave-iface...>"
+       "[-cdf] MASTER_IFACE SLAVE_IFACE..."
 #define ifenslave_full_usage "\n\n" \
        "Configure network interfaces for parallel routing\n" \
      "\nOptions:" \
      "\n       -k              Kill running daemon" \
 
 #define ifup_trivial_usage \
-       "[-ain"IF_FEATURE_IFUPDOWN_MAPPING("m")"vf] ifaces..."
+       "[-ain"IF_FEATURE_IFUPDOWN_MAPPING("m")"vf] IFACE..."
 #define ifup_full_usage "\n\n" \
        "Options:" \
      "\n       -a      De/configure all interfaces automatically" \
 "      ::shutdown:/sbin/swapoff -a\n"
 
 #define inotifyd_trivial_usage \
-       "PROG FILE1[:MASK] ..."
+       "PROG FILE1[:MASK]..."
 #define inotifyd_full_usage "\n\n" \
        "Run PROG on filesystem changes." \
      "\nWhen a filesystem event matching MASK occurs on FILEn," \
-     "\nPROG <actual_event(s)> <FILEn> [<subfile_name>] is run." \
+     "\nPROG ACTUAL_EVENTS FILEn [SUBFILE] is run." \
      "\nEvents:" \
      "\n       a       File is accessed" \
      "\n       c       File is modified" \
      "\n       d       Subfile is deleted" \
      "\n" \
      "\ninotifyd waits for PROG to exit." \
-     "\nWhen x event happens for all FILEs, inotifyd exits" \
+     "\nWhen x event happens for all FILEs, inotifyd exits." \
 
 /* 2.6 style insmod has no options and required filename
  * (not module name - .ko can't be omitted) */
 
 /* -v, -b, -c are ignored */
 #define install_trivial_usage \
-       "[-cdDsp] [-o USER] [-g GRP] [-m MODE] [source] dest|directory"
+       "[-cdDsp] [-o USER] [-g GRP] [-m MODE] [SOURCE]... DEST"
 #define install_full_usage "\n\n" \
        "Copy files and set attributes\n" \
      "\nOptions:" \
        "$ kill 252\n"
 
 #define killall_trivial_usage \
-       "[-l] [-q] [-SIG] process-name..."
+       "[-l] [-q] [-SIG] PROCESS_NAME..."
 #define killall_full_usage "\n\n" \
        "Send a signal (default: TERM) to given processes\n" \
      "\nOptions:" \
 #define less_trivial_usage \
        "[-EMNmh~I?] [FILE]..."
 #define less_full_usage "\n\n" \
-       "View a file or list of files. The position within files can be\n" \
-       "changed, and files can be manipulated in various ways.\n" \
+       "View FILE (or stdin) one screenful at a time\n" \
      "\nOptions:" \
      "\n       -E      Quit once the end of a file is reached" \
      "\n       -M,-m   Display status line with line numbers" \
 #define linuxrc_full_usage ""
 
 #define setarch_trivial_usage \
-       "personality program [args...]"
+       "personality PROG ARGS"
 #define setarch_full_usage "\n\n" \
        "Personality may be:\n" \
        "       linux32         Set 32bit uname emulation\n" \
 #define loadfont_trivial_usage \
        "< font"
 #define loadfont_full_usage "\n\n" \
-       "Load a console font from standard input" \
+       "Load a console font from stdin" \
 /*   "\n       -C TTY  Affect TTY instead of /dev/tty" */ \
 
 #define loadfont_example_usage \
 #define loadkmap_trivial_usage \
        "< keymap"
 #define loadkmap_full_usage "\n\n" \
-       "Load a binary keyboard translation table from standard input\n" \
+       "Load a binary keyboard translation table from stdin\n" \
 /*   "\n       -C TTY  Affect TTY instead of /dev/tty" */ \
 
 #define loadkmap_example_usage \
 #define logger_trivial_usage \
        "[OPTIONS] [MESSAGE]"
 #define logger_full_usage "\n\n" \
-       "Write MESSAGE to the system log. If MESSAGE is omitted, log stdin.\n" \
+       "Write MESSAGE (or stdin) to syslog\n" \
      "\nOptions:" \
      "\n       -s      Log to stderr as well as the system log" \
      "\n       -t TAG  Log using the specified tag (defaults to user name)" \
      "\n       tcpsvd -E 0 515 softlimit -m 999999 lpd /var/spool ./print" \
 
 #define lpq_trivial_usage \
-       "[-P queue[@host[:port]]] [-U USERNAME] [-d JOBID...] [-fs]"
+       "[-P queue[@host[:port]]] [-U USERNAME] [-d JOBID]... [-fs]"
 #define lpq_full_usage "\n\n" \
        "Options:" \
      "\n       -P      lp service to connect to (else uses $PRINTER)" \
        "[-L LABEL] " \
        /* "[-M last-mounted-directory] [-S] [-T filesystem-type] " */ \
        "BLOCKDEV [KBYTES]"
-#define mkfs_ext2_full_usage "\n" \
-     "\n       -b BLK_SIZE     Block size, bytes" \
+#define mkfs_ext2_full_usage "\n\n" \
+       "       -b BLK_SIZE     Block size, bytes" \
 /*   "\n       -c              Check device for bad blocks" */ \
 /*   "\n       -E opts         Set extended options" */ \
 /*   "\n       -f size         Fragment size in bytes" */ \
 /*   "\n       -v              Verbose" */ \
 
 #define mkfs_minix_trivial_usage \
-       "[-c | -l filename] [-nXX] [-iXX] BLOCKDEV [KBYTES]"
+       "[-c | -l FILE] [-nXX] [-iXX] BLOCKDEV [KBYTES]"
 #define mkfs_minix_full_usage "\n\n" \
        "Make a MINIX filesystem\n" \
      "\nOptions:" \
      "\n       -c              Check device for bad blocks" \
      "\n       -n [14|30]      Maximum length of filenames" \
      "\n       -i INODES       Number of inodes for the filesystem" \
-     "\n       -l FILENAME     Read bad blocks list from FILENAME" \
+     "\n       -l FILE         Read bad blocks list from FILE" \
      "\n       -v              Make version 2 filesystem" \
 
 #define mkfs_reiser_trivial_usage \
        "$ mknod -m 644 /tmp/pipe p\n"
 
 #define mkswap_trivial_usage \
-       "[OPTIONS] BLOCKDEV" /* [SIZE_IN_KB] */
+       "[OPTIONS] BLOCKDEV [KBYTES]"
 #define mkswap_full_usage "\n\n" \
        "Prepare BLOCKDEV to be used as swap partition\n" \
      "\nOptions:" \
        "-rw-------    1 andersen andersen        0 Apr 25 17:10 /tmp/temp.mWiLjM\n"
 
 #define modprobe_trivial_usage \
-       IF_MODPROBE_SMALL("[-qfwrsv] MODULE [symbol=value...]") \
+       IF_MODPROBE_SMALL("[-qfwrsv] MODULE [symbol=value]...") \
        IF_NOT_MODPROBE_SMALL("[-" \
                IF_FEATURE_2_4_MODULES("k")"nqrsv" \
-               IF_FEATURE_MODPROBE_BLACKLIST("b")"] MODULE [symbol=value...]")
+               IF_FEATURE_MODPROBE_BLACKLIST("b")"] MODULE [symbol=value]...")
 #define modprobe_full_usage "\n\n" \
        "Options:" \
        IF_MODPROBE_SMALL( \
 #define more_trivial_usage \
        "[FILE]..."
 #define more_full_usage "\n\n" \
-       "View FILE or standard input one screenful at a time"
+       "View FILE (or stdin) one screenful at a time"
 
 #define more_example_usage \
        "$ dmesg | more\n"
        )
 
 #define nice_trivial_usage \
-       "[-n ADJUST] [PROG [ARGS]]"
+       "[-n ADJUST] [PROG ARGS]"
 #define nice_full_usage "\n\n" \
        "Run PROG with modified scheduling priority\n" \
      "\nOptions:" \
        "nmeter '%250d%t %20c int %i bio %b mem %m forks%p'"
 
 #define nohup_trivial_usage \
-       "PROG [ARGS]"
+       "PROG ARGS"
 #define nohup_full_usage "\n\n" \
        "Run PROG immune to hangups, with output to a non-tty"
 #define nohup_example_usage \
        "[-aBbcDdeFfHhIiLlOovXx] " IF_DESKTOP("[-t TYPE] ") "[FILE]"
 #define od_full_usage "\n\n" \
        "Write an unambiguous representation, octal bytes by default, of FILE\n" \
-       "(or standard input) to standard output."
+       "(or stdin) to stdout"
 
 #define openvt_trivial_usage \
-       "[-c N] [-sw] [PROG [ARGS]]"
+       "[-c N] [-sw] [PROG ARGS]"
 #define openvt_full_usage "\n\n" \
        "Start PROG on a new virtual terminal\n" \
      "\nOptions:" \
 
 #if (ENABLE_FEATURE_PIDOF_SINGLE || ENABLE_FEATURE_PIDOF_OMIT)
 #define pidof_trivial_usage \
-       "[OPTIONS] [NAME...]"
+       "[OPTIONS] [NAME]..."
 #define USAGE_PIDOF "\n\nOptions:"
 #else
 #define pidof_trivial_usage \
-       "[NAME...]"
+       "[NAME]..."
 #define USAGE_PIDOF /* none */
 #endif
 #define pidof_full_usage "\n\n" \
      "\n       -f      Force power off (don't go through init)" \
 
 #define printenv_trivial_usage \
-       "[VARIABLE...]"
+       "[VARIABLE]..."
 #define printenv_full_usage "\n\n" \
-       "Print all or part of environment.\n" \
-       "If no environment VARIABLE specified, print them all."
+       "Print environment VARIABLEs.\n" \
+       "If no VARIABLE specified, print all."
 
 #define printf_trivial_usage \
-       "FORMAT [ARGUMENT...]"
+       "FORMAT [ARGUMENT]..."
 #define printf_full_usage "\n\n" \
        "Format and print ARGUMENT(s) according to FORMAT,\n" \
        "where FORMAT controls the output exactly as in C printf"
      "\n       -n              Disable byte order auto-detection" \
 
 #define realpath_trivial_usage \
-       "pathname..."
+       "FILE..."
 #define realpath_full_usage "\n\n" \
-       "Return the absolute pathnames of given argument"
+       "Return the absolute pathnames of given FILE"
 
 #define reboot_trivial_usage \
        "[-d DELAY] [-n] [-f]"
 #define reformime_full_usage "\n\n" \
        "Parse MIME-encoded message\n" \
      "\nOptions:" \
-     "\n       -x prefix       Extract content of MIME sections to files" \
-     "\n       -X prog [args]  Filter content of MIME sections through prog." \
+     "\n       -x PREFIX       Extract content of MIME sections to files" \
+     "\n       -X PROG ARGS    Filter content of MIME sections through PROG" \
      "\n                       Must be the last option" \
      "\n" \
-     "\nOther options are silently ignored." \
+     "\nOther options are silently ignored" \
 
 #define renice_trivial_usage \
        "{{-n INCREMENT} | PRIORITY} [[-p | -g | -u] ID...]"
      "\n       -A inet" IF_FEATURE_IPV6("{6}") "       Select address family" \
 
 #define rpm_trivial_usage \
-       "-i -q[ildc]p package.rpm"
+       "-i -q[ildc]p PACKAGE.rpm"
 #define rpm_full_usage "\n\n" \
        "Manipulate RPM packages\n" \
      "\nOptions:" \
        )
 
 #define runcon_trivial_usage \
-       "[-c] [-u USER] [-r ROLE] [-t TYPE] [-l RANGE] PROG [ARGS]\n" \
-       "       runcon CONTEXT PROG [ARGS]"
+       "[-c] [-u USER] [-r ROLE] [-t TYPE] [-l RANGE] PROG ARGS\n" \
+       "       runcon CONTEXT PROG ARGS"
 #define runcon_full_usage "\n\n" \
        "Run PROG in a different security context\n" \
      "\n       CONTEXT         Complete security context\n" \
        "+ shutdown -h +4m"
 
 #define runlevel_trivial_usage \
-       "[utmp]"
+       "[FILE]"
 #define runlevel_full_usage "\n\n" \
        "Find the current and previous system runlevel\n" \
        "\n" \
-       "If no utmp file exists or if no runlevel record can be found,\n" \
+       "If no utmp FILE exists or if no runlevel record can be found,\n" \
        "print \"unknown\""
 #define runlevel_example_usage \
        "$ runlevel /var/run/utmp\n" \
        "N 2"
 
 #define runsv_trivial_usage \
-       "dir"
+       "DIR"
 #define runsv_full_usage "\n\n" \
        "Start and monitor a service and optionally an appendant log service"
 
 #define runsvdir_trivial_usage \
-       "[-P] [-s SCRIPT] dir"
+       "[-P] [-s SCRIPT] DIR"
 #define runsvdir_full_usage "\n\n" \
        "Start a runsv process for each subdirectory. If it exits, restart it.\n" \
      "\n       -P              Put each runsv in a new session" \
        "[-w] [-s SEP] [FIRST [INC]] LAST"
 #define seq_full_usage "\n\n" \
        "Print numbers from FIRST to LAST, in steps of INC.\n" \
-       "FIRST, INC default to 1\n" \
+       "FIRST, INC default to 1.\n" \
      "\nOptions:" \
      "\n       -w      Pad to last with leading zeros" \
      "\n       -s SEP  String separator" \
      "\n       -e DIR  Exclude DIR" \
      "\n       -F      Force reset of context to match file_context for customizable files" \
      "\n       -o FILE Save list of files with incorrect context" \
-     "\n       -s      Take a list of files from standard input (instead of command line)" \
+     "\n       -s      Take a list of files from stdin (instead of command line)" \
      "\n       -v      Show changes in file labels, if type or role are changing" \
      "\n       -vv     Show changes in file labels, if type, role, or user are changing" \
      "\n       -W      Display warnings about entries that had no matching files" \
        "Set entries into the kernel's scancode-to-keycode map,\n" \
        "allowing unusual keyboards to generate usable keycodes.\n\n" \
        "SCANCODE may be either xx or e0xx (hexadecimal),\n" \
-       "and KEYCODE is given in decimal" \
+       "and KEYCODE is given in decimal." \
 
 #define setkeycodes_example_usage \
        "$ setkeycodes e030 127\n"
        "Change boolean setting"
 
 #define setsid_trivial_usage \
-       "PROG [ARG...]"
+       "PROG ARGS"
 #define setsid_full_usage "\n\n" \
        "Run PROG in a new session. PROG will have no controlling terminal\n" \
        "and will not be affected by keyboard signals (Ctrl-C etc).\n" \
        "$ cat TODO | split -a 2 -l 2 TODO_\n"
 
 #define start_stop_daemon_trivial_usage \
-       "[OPTIONS] [-S|-K] ... [-- arguments...]"
+       "[OPTIONS] [-S|-K] ... [-- ARGS...]"
 #define start_stop_daemon_full_usage "\n\n" \
        "Search for matching processes, and then\n" \
        "-K: stop all matching processes.\n" \
      "\n       -s SH   Shell to use instead of default shell" \
 
 #define sulogin_trivial_usage \
-       "[OPTIONS] [TTY]"
+       "[-t N] [TTY]"
 #define sulogin_full_usage "\n\n" \
        "Single user login\n" \
      "\nOptions:" \
      "\n       -s      Use System V sum algorithm (512byte blocks)" \
 
 #define sv_trivial_usage \
-       "[-v] [-w SEC] command service..."
+       "[-v] [-w SEC] CMD SERVICE_DIR..."
 #define sv_full_usage "\n\n" \
        "Control services monitored by runsv supervisor.\n" \
        "Commands (only first character is enough):\n" \
 #define svlogd_trivial_usage \
        "[-ttv] [-r c] [-R abc] [-l len] [-b buflen] dir..."
 #define svlogd_full_usage "\n\n" \
-       "Continuously read log data from standard input, optionally\n" \
+       "Continuously read log data from stdin, optionally\n" \
        "filter log messages, and write the data to one or more automatically\n" \
        "rotated logs" \
 
 
 #define fsync_trivial_usage \
        "[OPTIONS] FILE..."
-#define fsync_full_usage \
+#define fsync_full_usage "\n\n" \
        "Write files' buffered blocks to disk\n" \
      "\nOptions:" \
      "\n       -d      Avoid syncing metadata"
        "[OPTIONS]"
 #define syslogd_full_usage "\n\n" \
        "System logging utility.\n" \
-       "Note that this version of syslogd ignores /etc/syslog.conf.\n" \
+       "This version of syslogd ignores /etc/syslog.conf\n" \
      "\nOptions:" \
      "\n       -n              Run in foreground" \
      "\n       -O FILE         Log to given file (default:/var/log/messages)" \
-     "\n       -l n            Set local log level" \
+     "\n       -l N            Set local log level" \
      "\n       -S              Smaller logging output" \
        IF_FEATURE_ROTATE_LOGFILE( \
      "\n       -s SIZE         Max size (KB) before rotate (default:200KB, 0=off)" \
 #define tail_trivial_usage \
        "[OPTIONS] [FILE]..."
 #define tail_full_usage "\n\n" \
-       "Print last 10 lines of each FILE (or standard input) to standard output.\n" \
+       "Print last 10 lines of each FILE (or stdin) to stdout.\n" \
        "With more than one FILE, precede each with a header giving the file name.\n" \
      "\nOptions:" \
        IF_FEATURE_FANCY_TAIL( \
        "$ tar -cf /tmp/tarball.tar /usr/local\n"
 
 #define taskset_trivial_usage \
-       "[-p] [MASK] [PID | PROG [ARGS]]"
+       "[-p] [MASK] [PID | PROG ARGS]"
 #define taskset_full_usage "\n\n" \
        "Set or get CPU affinity\n" \
      "\nOptions:" \
 #define tee_trivial_usage \
        "[OPTIONS] [FILE]..."
 #define tee_full_usage "\n\n" \
-       "Copy standard input to each FILE, and also to standard output\n" \
+       "Copy stdin to each FILE, and also to stdout\n" \
      "\nOptions:" \
      "\n       -a      Append to the given FILEs, don't overwrite" \
      "\n       -i      Ignore interrupt signals (SIGINT)" \
      "\n       -p PORT         Port to listen on" \
      "\n       -b ADDR[:PORT]  Address to bind to" \
      "\n       -F              Run in foreground" \
-     "\n       -i              Run as inetd service" \
+     "\n       -i              Inetd mode" \
        IF_FEATURE_TELNETD_INETD_WAIT( \
-     "\n       -w SEC          Run as inetd service in wait mode, linger time SEC" \
+     "\n       -w SEC          Inetd 'wait' mode, linger time SEC" \
      "\n       -S              Log to syslog (implied by -i or without -F and -w)" \
        ) \
        )
 /* with not-implemented options: */
 /*     "[-hpEvv] [-c N] [-C N[:MSG]] [-b N] [-u USER] [-l NAME] [-i DIR|-x CDB] [-t SEC] IP PORT PROG" */
 #define tcpsvd_full_usage "\n\n" \
-       "Create TCP socket, bind  to IP:PORT and listen\n" \
+       "Create TCP socket, bind to IP:PORT and listen\n" \
        "for incoming connection. Run PROG for each connection.\n" \
      "\n       IP              IP to listen on. '0' = all" \
      "\n       PORT            Port to listen on" \
-     "\n       PROG [ARGS]     Program to run" \
+     "\n       PROG ARGS       Program to run" \
      "\n       -l NAME         Local hostname (else looks up local hostname in DNS)" \
      "\n       -u USER[:GRP]   Change to user/group after bind" \
      "\n       -c N            Handle up to N connections simultaneously" \
        "redirecting all further packets with same peer ip:port to it.\n" \
      "\n       IP              IP to listen on. '0' = all" \
      "\n       PORT            Port to listen on" \
-     "\n       PROG [ARGS]     Program to run" \
+     "\n       PROG ARGS       Program to run" \
      "\n       -l NAME         Local hostname (else looks up local hostname in DNS)" \
      "\n       -u USER[:GRP]   Change to user/group after bind" \
      "\n       -c N            Handle up to N connections simultaneously" \
      "\n       -u      Access files as USER" \
 
 #define time_trivial_usage \
-       "[OPTIONS] PROG [ARGS]"
+       "[OPTIONS] PROG ARGS"
 #define time_full_usage "\n\n" \
-       "Run PROG. When it finishes, its resource usage is displayed.\n" \
+       "Run PROG, display resource usage when it exits\n" \
      "\nOptions:" \
      "\n       -v      Verbose" \
 
 #define timeout_trivial_usage \
-       "[-t SECS] [-s SIG] PROG [ARGS]"
+       "[-t SECS] [-s SIG] PROG ARGS"
 #define timeout_full_usage "\n\n" \
        "Runs PROG. Sends SIG to it if it is not gone in SECS seconds.\n" \
        "Defaults: SECS: 10, SIG: TERM." \
 #define top_full_usage "\n\n" \
        "Provide a view of process activity in real time.\n" \
        "Read the status of all processes from /proc each SECONDS\n" \
-       "and show the status for however many processes will fit on the screen." \
+       "and display a screenful of them." \
+//TODO: add options and keyboard commands
 
 #define touch_trivial_usage \
        "[-c] [-d DATE] FILE [FILE]..."
 #define tr_trivial_usage \
        "[-cds] STRING1 [STRING2]"
 #define tr_full_usage "\n\n" \
-       "Translate, squeeze, and/or delete characters from\n" \
-       "standard input, writing to standard output\n" \
+       "Translate, squeeze, or delete characters from stdin, writing to stdout\n" \
      "\nOptions:" \
      "\n       -c      Take complement of STRING1" \
      "\n       -d      Delete input characters coded STRING1" \
        ) \
      "\n       -F      Set the don't fragment bit" \
      "\n       -I      Use ICMP ECHO instead of UDP datagrams" \
-     "\n       -l      Display the ttl value of the returned packet" \
+     "\n       -l      Display the TTL value of the returned packet" \
      "\n       -d      Set SO_DEBUG options to socket" \
      "\n       -n      Print numeric addresses" \
      "\n       -r      Bypass routing tables, send directly to HOST" \
      "\n       -m      Max time-to-live (max number of hops)" \
      "\n       -p      Base UDP port number used in probes" \
      "\n               (default 33434)" \
-     "\n       -q      Number of probes per 'ttl' (default 3)" \
+     "\n       -q      Number of probes per TTL (default 3)" \
      "\n       -s      IP address to use as the source address" \
      "\n       -t      Type-of-service in probe packets (default 0)" \
      "\n       -w      Time in seconds to wait for a response (default 3)" \
      "\n       -m      Max time-to-live (max number of hops)" \
      "\n       -p      Base UDP port number used in probes" \
      "\n               (default is 33434)" \
-     "\n       -q      Number of probes per 'ttl' (default 3)" \
+     "\n       -q      Number of probes per TTL (default 3)" \
      "\n       -s      IP address to use as the source address" \
      "\n       -t      Type-of-service in probe packets (default 0)" \
      "\n       -w      Time in seconds to wait for a response (default 3)" \
 #define tty_trivial_usage \
        ""
 #define tty_full_usage "\n\n" \
-       "Print file name of standard input's terminal" \
+       "Print file name of stdin's terminal" \
        IF_INCLUDE_SUSv2( "\n" \
      "\nOptions:" \
      "\n       -s      Print nothing, only return exit status" \
 #define ttysize_trivial_usage \
        "[w] [h]"
 #define ttysize_full_usage "\n\n" \
-       "Print dimension(s) of standard input's terminal, on error return 80x25"
+       "Print dimension(s) of stdin's terminal, on error return 80x25"
 
 #define tunctl_trivial_usage \
        "[-f device] ([-t name] | -d name)" IF_FEATURE_TUNCTL_UG(" [-u owner] [-g group] [-b]")
        "Linux debian 2.4.23 #2 Tue Dec 23 17:09:10 MST 2003 i686 GNU/Linux\n"
 
 #define uncompress_trivial_usage \
-       "[-c] [-f] [FILE...]"
+       "[-c] [-f] [FILE]..."
 #define uncompress_full_usage "\n\n" \
        "Uncompress .Z file[s]\n" \
      "\nOptions:" \
 #define unexpand_trivial_usage \
        "[-f][-a][-t N] [FILE|-]"
 #define unexpand_full_usage "\n\n" \
-       "Convert spaces to tabs, writing to standard output\n" \
+       "Convert spaces to tabs, writing to stdout\n" \
      "\nOptions:" \
        IF_FEATURE_UNEXPAND_LONG_OPTIONS( \
      "\n       -a,--all        Convert all blanks" \
 #define wall_trivial_usage \
        "[FILE]"
 #define wall_full_usage "\n\n" \
-       "Write content of FILE or standard-input to all logged-in users"
+       "Write content of FILE or stdin to all logged-in users"
 #define wall_sample_usage \
        "echo foo | wall\n" \
        "wall ./mymessage"
 
 #define watch_trivial_usage \
-       "[-n seconds] [-t] PROG [ARGS]"
+       "[-n SEC] [-t] PROG ARGS"
 #define watch_full_usage "\n\n" \
        "Run PROG periodically\n" \
      "\nOptions:" \
 #define wc_trivial_usage \
        "[OPTIONS] [FILE]..."
 #define wc_full_usage "\n\n" \
-       "Print line, word, and byte counts for each FILE, and a total line if\n" \
-       "more than one FILE is specified. With no FILE, read standard input.\n" \
+       "Print line, word, and byte counts for each FILE (or stdin),\n" \
+       "and a total line if more than one FILE is specified\n" \
      "\nOptions:" \
      "\n       -c      Print the byte counts" \
      "\n       -l      Print the newline counts" \
        IF_FEATURE_WGET_LONG_OPTIONS( \
        "[-c|--continue] [-s|--spider] [-q|--quiet] [-O|--output-document file]\n" \
        "       [--header 'header: value'] [-Y|--proxy on/off] [-P DIR]\n" \
-       "       [-U|--user-agent agent] url" \
+       "       [--no-check-certificate] [-U|--user-agent agent] url" \
        ) \
        IF_NOT_FEATURE_WGET_LONG_OPTIONS( \
        "[-csq] [-O file] [-Y on/off] [-P DIR] [-U agent] url" \
        "Print the user name associated with the current effective user id"
 
 #define xargs_trivial_usage \
-       "[OPTIONS] [PROG [ARGS]]"
+       "[OPTIONS] [PROG ARGS]"
 #define xargs_full_usage "\n\n" \
-       "Run PROG on every item given by standard input\n" \
+       "Run PROG on every item given by stdin\n" \
      "\nOptions:" \
        IF_FEATURE_XARGS_SUPPORT_CONFIRMATION( \
      "\n       -p      Ask user whether to run each command") \
index c17cbfdad53064f7a9a5e6a703e481dfff121045..b0ee7ea25ccda4cb724d4e0f44b37b303ce9c698 100644 (file)
@@ -79,11 +79,11 @@ int beep_main(int argc, char **argv)
                }
                while (rep) {
 //bb_info_msg("rep[%d] freq=%d, length=%d, delay=%d", rep, freq, length, delay);
-                       xioctl(speaker, KIOCSOUND, (void*)(long)tickrate_div_freq);
+                       xioctl(speaker, KIOCSOUND, (void*)(uintptr_t)tickrate_div_freq);
                        usleep(1000 * length);
                        ioctl(speaker, KIOCSOUND, (void*)0);
                        if (--rep)
-                               usleep(delay);
+                               usleep(1000 * delay);
                }
        }
 
index 4560bb2e99e1a135907699f5501520797b38f5c7..5974006bb8fdf0b44690bcbba6002d9ffe25e429 100644 (file)
@@ -84,7 +84,7 @@ static void fb_open(const char *strfb_device)
        // map the device in memory
        G.addr = mmap(NULL,
                        G.scr_var.xres * G.scr_var.yres
-                       * BYTES_PER_PIXEL /*(G.scr_var.bits_per_pixel / 8)*/ ,
+                       * BYTES_PER_PIXEL /*(G.scr_var.bits_per_pixel / 8)*/,
                        PROT_WRITE, MAP_SHARED, fbfd, 0);
        if (G.addr == MAP_FAILED)
                bb_perror_msg_and_die("mmap");
@@ -121,7 +121,7 @@ static void fb_drawrectangle(void)
        // vertical lines
        ptr1 = (DATA*)(G.addr + (G.nbar_posy * G.scr_var.xres + G.nbar_posx) * BYTES_PER_PIXEL);
        ptr2 = (DATA*)(G.addr + (G.nbar_posy * G.scr_var.xres + G.nbar_posx + G.nbar_width - 1) * BYTES_PER_PIXEL);
-       cnt = G.nbar_height - 1 /* HUH?!  G.nbar_posy + G.nbar_height - 1 - G.nbar_posy*/;
+       cnt = G.nbar_height - 1;
        do {
                *ptr1 = thispix; ptr1 += G.scr_var.xres;
                *ptr2 = thispix; ptr2 += G.scr_var.xres;
@@ -216,70 +216,69 @@ static void fb_drawprogressbar(unsigned percent)
  */
 static void fb_drawimage(void)
 {
-       char *head, *ptr;
        FILE *theme_file;
+       char *read_ptr;
        unsigned char *pixline;
        unsigned i, j, width, height, line_size;
 
-       if (LONE_DASH(G.image_filename))
+       if (LONE_DASH(G.image_filename)) {
                theme_file = stdin;
-       else {
+       else {
                int fd = open_zipped(G.image_filename);
                if (fd < 0)
                        bb_simple_perror_msg_and_die(G.image_filename);
                theme_file = xfdopen_for_read(fd);
        }
-       head = xmalloc(256);
 
-       /* parse ppm header
-        * - A ppm image’s magic number is the two characters "P6".
+       /* Parse ppm header:
+        * - Magic: two characters "P6".
         * - Whitespace (blanks, TABs, CRs, LFs).
         * - A width, formatted as ASCII characters in decimal.
         * - Whitespace.
-        * - A height, again in ASCII decimal.
+        * - A height, ASCII decimal.
         * - Whitespace.
-        * - The maximum color value (Maxval), again in ASCII decimal. Must be
-        *   less than 65536.
+        * - The maximum color value, ASCII decimal, in 0..65535
         * - Newline or other single whitespace character.
+        *   (we support newline only)
         * - A raster of Width * Height pixels in triplets of rgb
-        *   in pure binary by 1 (or not implemented 2) bytes.
+        *   in pure binary by 1 or 2 bytes. (we support only 1 byte)
         */
+#define concat_buf bb_common_bufsiz1
+       read_ptr = concat_buf;
        while (1) {
-               if (fgets(head, 256, theme_file) == NULL
-                       /* do not overrun the buffer */
-                       || strlen(bb_common_bufsiz1) >= sizeof(bb_common_bufsiz1) - 256)
+               int w, h, max_color_val;
+               int rem = concat_buf + sizeof(concat_buf) - read_ptr;
+               if (rem < 2
+                || fgets(read_ptr, rem, theme_file) == NULL
+               ) {
                        bb_error_msg_and_die("bad PPM file '%s'", G.image_filename);
-
-               ptr = memchr(skip_whitespace(head), '#', 256);
-               if (ptr != NULL)
-                       *ptr = 0; /* ignore comments */
-               strcat(bb_common_bufsiz1, head);
-               // width, height, max_color_val
-               if (sscanf(bb_common_bufsiz1, "P6 %u %u %u", &width, &height, &i) == 3
-                       && i <= 255)
+               }
+               read_ptr = strchrnul(read_ptr, '#');
+               *read_ptr = '\0'; /* ignore #comments */
+               if (sscanf(concat_buf, "P6 %u %u %u", &w, &h, &max_color_val) == 3
+                && max_color_val <= 255
+               ) {
+                       width = w; /* w is on stack, width may be in register */
+                       height = h;
                        break;
-               /* If we do not find a signature throughout the whole file then
-                  we will diagnose this via EOF on read in the head of the loop.  */
+               }
        }
 
-       if (ENABLE_FEATURE_CLEAN_UP)
-               free(head);
-       if (width != G.scr_var.xres || height != G.scr_var.yres)
-               bb_error_msg_and_die("PPM %dx%d does not match screen %dx%d",
-                                                        width, height, G.scr_var.xres, G.scr_var.yres);
        line_size = width*3;
+       pixline = xmalloc(line_size);
+
        if (width > G.scr_var.xres)
                width = G.scr_var.xres;
        if (height > G.scr_var.yres)
                height = G.scr_var.yres;
-
-       pixline = xmalloc(line_size);
        for (j = 0; j < height; j++) {
-               unsigned char *pixel = pixline;
-               DATA *src = (DATA *)(G.addr + j * G.scr_fix.line_length);
+               unsigned char *pixel;
+               DATA *src;
 
                if (fread(pixline, 1, line_size, theme_file) != line_size)
                        bb_error_msg_and_die("bad PPM file '%s'", G.image_filename);
+               pixel = pixline;
+               src = (DATA *)(G.addr + j * G.scr_fix.line_length);
                for (i = 0; i < width; i++) {
                        unsigned thispix;
                        thispix = (((unsigned)pixel[0] << 8) & 0xf800)
@@ -289,8 +288,7 @@ static void fb_drawimage(void)
                        pixel += 3;
                }
        }
-       if (ENABLE_FEATURE_CLEAN_UP)
-               free(pixline);
+       free(pixline);
        fclose(theme_file);
 }
 
@@ -301,7 +299,7 @@ static void fb_drawimage(void)
  */
 static void init(const char *cfg_filename)
 {
-       static const char const param_names[] ALIGN1 =
+       static const char param_names[] ALIGN1 =
                "BAR_WIDTH\0" "BAR_HEIGHT\0"
                "BAR_LEFT\0" "BAR_TOP\0"
                "BAR_R\0" "BAR_G\0" "BAR_B\0"
@@ -312,7 +310,7 @@ static void init(const char *cfg_filename)
        char *token[2];
        parser_t *parser = config_open2(cfg_filename, xfopen_stdin);
        while (config_read(parser, token, 2, 2, "#=",
-                                   (PARSE_NORMAL | PARSE_MIN_DIE) & ~(PARSE_TRIM | PARSE_COLLAPSE))) {
+                               (PARSE_NORMAL | PARSE_MIN_DIE) & ~(PARSE_TRIM | PARSE_COLLAPSE))) {
                unsigned val = xatoi_u(token[1]);
                int i = index_in_strings(param_names, token[0]);
                if (i < 0)
index 9a7a41d53e85b75d481082bdb08a194764b6ca04..0fb51d2e8f67d65e7857d98616a3334804eff40f 100644 (file)
@@ -119,7 +119,7 @@ int microcom_main(int argc UNUSED_PARAM, char **argv)
        nfd = 2;
        // Not safe_poll: we want to exit on signal
        while (!bb_got_signal && poll(pfd, nfd, timeout) > 0) {
-               if (nfd > 1 && (pfd[1].revents & POLLIN)) {
+               if (nfd > 1 && pfd[1].revents) {
                        char c;
                        // read from stdin -> write to device
                        if (safe_read(STDIN_FILENO, &c, 1) < 1) {
@@ -143,7 +143,7 @@ int microcom_main(int argc UNUSED_PARAM, char **argv)
                                safe_poll(pfd, 1, delay);
 skip_write: ;
                }
-               if (pfd[0].revents & POLLIN) {
+               if (pfd[0].revents) {
 #define iobuf bb_common_bufsiz1
                        ssize_t len;
                        // read from device -> write to stdout
index 227803abf03a5ff2ff195fc97df69f36b63d6e00..0a8322c8856806f9cac16aedd6fd3634272ad332 100644 (file)
@@ -1167,7 +1167,7 @@ static NOINLINE void cgi_io_loop_and_exit(int fromCgi_rd, int toCgi_wr, int post
                        break;
                }
 
-               if (pfd[TO_CGI].revents & POLLOUT) {
+               if (pfd[TO_CGI].revents) {
                        /* hdr_cnt > 0 here due to the way pfd[TO_CGI].events set */
                        /* Have data from peer and can write to CGI */
                        count = safe_write(toCgi_wr, hdr_ptr, hdr_cnt);
@@ -1184,7 +1184,7 @@ static NOINLINE void cgi_io_loop_and_exit(int fromCgi_rd, int toCgi_wr, int post
                        }
                }
 
-               if (pfd[0].revents & POLLIN) {
+               if (pfd[0].revents) {
                        /* post_len > 0 && hdr_cnt == 0 here */
                        /* We expect data, prev data portion is eaten by CGI
                         * and there *is* data to read from the peer
@@ -1202,7 +1202,7 @@ static NOINLINE void cgi_io_loop_and_exit(int fromCgi_rd, int toCgi_wr, int post
                        }
                }
 
-               if (pfd[FROM_CGI].revents & POLLIN) {
+               if (pfd[FROM_CGI].revents) {
                        /* There is something to read from CGI */
                        char *rbuf = iobuf;
 
index 013d959a177ba260b121760e0aba88eb503149b3..6a84e9405c7758b555e160e3ff192bc68bdfc5d5 100644 (file)
@@ -618,7 +618,7 @@ int telnet_main(int argc UNUSED_PARAM, char **argv)
                default:
 
 #ifdef USE_POLL
-                       if (ufds[0].revents & POLLIN)
+                       if (ufds[0].revents)
 #else
                        if (FD_ISSET(STDIN_FILENO, &rfds))
 #endif
@@ -631,7 +631,7 @@ int telnet_main(int argc UNUSED_PARAM, char **argv)
                        }
 
 #ifdef USE_POLL
-                       if (ufds[1].revents & POLLIN)
+                       if (ufds[1].revents)
 #else
                        if (FD_ISSET(netfd, &rfds))
 #endif
index 8d6038853a3018ee5678c3b8e729756ce225d4e0..b2c3c033c283e4b02f8906ff50bc40b8158cb374 100644 (file)
@@ -308,7 +308,7 @@ static int tftp_protocol(
 
        if (!ENABLE_TFTP || our_lsa) { /* tftpd */
                /* Open file (must be after changing user) */
-               local_fd = open(local_file, open_mode);
+               local_fd = open(local_file, open_mode, 0666);
                if (local_fd < 0) {
                        error_pkt_reason = ERR_NOFILE;
                        strcpy((char*)error_pkt_str, "can't open file");
index dc5d9ffe91fa0bf7635570523c9ea3d4c84cc753..7fff56b4b5df5ae36d738ab26528e178987f585e 100644 (file)
@@ -61,7 +61,7 @@ int udhcpd_main(int argc UNUSED_PARAM, char **argv)
                logmode |= LOGMODE_SYSLOG;
        }
 #if ENABLE_FEATURE_UDHCP_PORT
-       if (opt & 4) { /* -P */
+       if (opt & 8) { /* -P */
                SERVER_PORT = xatou16(str_P);
                CLIENT_PORT = SERVER_PORT + 1;
        }
index ad1770b5803acb7a9b9a812b0fb3770936b7a5a0..0aab3c288cc932a45cad5bd492ae207fda79bab5 100644 (file)
@@ -546,6 +546,8 @@ int wget_main(int argc UNUSED_PARAM, char **argv)
                "passive-ftp\0"      No_argument       "\xff"
                "header\0"           Required_argument "\xfe"
                "post-data\0"        Required_argument "\xfd"
+               /* Ignored (we don't do ssl) */
+               "no-check-certificate\0" No_argument   "\xfc"
                ;
 #endif
 
@@ -590,6 +592,7 @@ int wget_main(int argc UNUSED_PARAM, char **argv)
        if (use_proxy) {
                proxy = getenv(target.is_ftp ? "ftp_proxy" : "http_proxy");
                if (proxy && proxy[0]) {
+                       server.user = NULL;
                        parse_url(proxy, &server);
                } else {
                        use_proxy = 0;
index 3a3d08260ada7d08b0bd2b88e48c0c26cc413667..c2f6bd40e013d13de925e495abe4a6d0be5bc5bc 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Busybox version: 1.15.0.svn
-# Fri Aug 21 00:14:11 2009
+# Busybox version: 1.16.1
+# Sun Mar 28 20:00:00 2010
 #
 CONFIG_HAVE_DOT_CONFIG=y
 
@@ -14,6 +14,8 @@ CONFIG_HAVE_DOT_CONFIG=y
 #
 # CONFIG_DESKTOP is not set
 # CONFIG_EXTRA_COMPAT is not set
+CONFIG_INCLUDE_SUSv2=y
+# CONFIG_USE_PORTABLE_CODE is not set
 CONFIG_FEATURE_BUFFERS_USE_MALLOC=y
 # CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set
 # CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set
@@ -22,7 +24,7 @@ CONFIG_FEATURE_VERBOSE_USAGE=y
 CONFIG_FEATURE_COMPRESS_USAGE=y
 CONFIG_FEATURE_INSTALLER=y
 CONFIG_LOCALE_SUPPORT=y
-# CONFIG_FEATURE_ASSUME_UNICODE is not set
+CONFIG_FEATURE_ASSUME_UNICODE=y
 # CONFIG_FEATURE_CHECK_UNICODE_IN_ENV is not set
 CONFIG_LONG_OPTS=y
 CONFIG_FEATURE_DEVPTS=y
@@ -59,7 +61,6 @@ CONFIG_EXTRA_CFLAGS=""
 CONFIG_NO_DEBUG_LIB=y
 # CONFIG_DMALLOC is not set
 # CONFIG_EFENCE is not set
-CONFIG_INCLUDE_SUSv2=y
 
 #
 # Installation Options
@@ -120,10 +121,11 @@ CONFIG_FEATURE_CPIO_P=y
 # CONFIG_FEATURE_DPKG_DEB_EXTRACT_ONLY is not set
 CONFIG_GUNZIP=y
 CONFIG_GZIP=y
+CONFIG_FEATURE_GZIP_LONG_OPTIONS=y
 CONFIG_LZOP=y
 # CONFIG_LZOP_COMPR_HIGH is not set
-# CONFIG_RPM2CPIO is not set
-# CONFIG_RPM is not set
+CONFIG_RPM2CPIO=y
+CONFIG_RPM=y
 CONFIG_TAR=y
 CONFIG_FEATURE_TAR_CREATE=y
 CONFIG_FEATURE_TAR_AUTODETECT=y
@@ -133,6 +135,7 @@ CONFIG_FEATURE_TAR_OLDSUN_COMPATIBILITY=y
 CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y
 CONFIG_FEATURE_TAR_LONG_OPTIONS=y
 CONFIG_FEATURE_TAR_UNAME_GNAME=y
+CONFIG_FEATURE_TAR_NOPRESERVE_TIME=y
 CONFIG_UNCOMPRESS=y
 CONFIG_UNLZMA=y
 CONFIG_FEATURE_LZMA_FAST=y
@@ -148,15 +151,19 @@ CONFIG_CATV=y
 CONFIG_CHGRP=y
 CONFIG_CHMOD=y
 CONFIG_CHOWN=y
+CONFIG_FEATURE_CHOWN_LONG_OPTIONS=y
 CONFIG_CHROOT=y
 CONFIG_CKSUM=y
 CONFIG_COMM=y
 CONFIG_CP=y
+CONFIG_FEATURE_CP_LONG_OPTIONS=y
 CONFIG_CUT=y
 CONFIG_DATE=y
 CONFIG_FEATURE_DATE_ISOFMT=y
+CONFIG_FEATURE_DATE_COMPAT=y
 CONFIG_DD=y
 CONFIG_FEATURE_DD_SIGNAL_HANDLING=y
+CONFIG_FEATURE_DD_THIRD_STATUS_LINE=y
 CONFIG_FEATURE_DD_IBS_OBS=y
 CONFIG_DF=y
 CONFIG_FEATURE_DF_FANCY=y
@@ -271,7 +278,7 @@ CONFIG_FEATURE_AUTOWIDTH=y
 CONFIG_FEATURE_HUMAN_READABLE=y
 
 #
-# Common options for md5sum, sha1sum
+# Common options for md5sum, sha1sum, sha256sum, sha512sum
 #
 CONFIG_FEATURE_MD5_SHA1_SUM_CHECK=y
 
@@ -318,9 +325,8 @@ CONFIG_AWK=y
 CONFIG_FEATURE_AWK_LIBM=y
 CONFIG_CMP=y
 CONFIG_DIFF=y
-CONFIG_FEATURE_DIFF_BINARY=y
+CONFIG_FEATURE_DIFF_LONG_OPTIONS=y
 CONFIG_FEATURE_DIFF_DIR=y
-CONFIG_FEATURE_DIFF_MINIMAL=y
 CONFIG_ED=y
 CONFIG_PATCH=y
 CONFIG_SED=y
@@ -364,6 +370,7 @@ CONFIG_FEATURE_FIND_DELETE=y
 CONFIG_FEATURE_FIND_PATH=y
 CONFIG_FEATURE_FIND_REGEX=y
 # CONFIG_FEATURE_FIND_CONTEXT is not set
+CONFIG_FEATURE_FIND_LINKS=y
 CONFIG_GREP=y
 CONFIG_FEATURE_GREP_EGREP_ALIAS=y
 CONFIG_FEATURE_GREP_FGREP_ALIAS=y
@@ -453,6 +460,7 @@ CONFIG_FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED=y
 # Options common to multiple modutils
 #
 # CONFIG_FEATURE_2_4_MODULES is not set
+# CONFIG_FEATURE_INSMOD_TRY_MMAP is not set
 # CONFIG_FEATURE_INSMOD_VERSION_CHECKING is not set
 # CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS is not set
 # CONFIG_FEATURE_INSMOD_LOADINKMEM is not set
@@ -467,8 +475,8 @@ CONFIG_DEFAULT_DEPMOD_FILE="modules.dep"
 #
 # Linux System Utilities
 #
-# CONFIG_ACPID is not set
-# CONFIG_FEATURE_ACPID_COMPAT is not set
+CONFIG_ACPID=y
+CONFIG_FEATURE_ACPID_COMPAT=y
 CONFIG_BLKID=y
 CONFIG_DMESG=y
 CONFIG_FEATURE_DMESG_PRETTY=y
@@ -488,12 +496,14 @@ CONFIG_FEATURE_FDISK_ADVANCED=y
 CONFIG_FINDFS=y
 CONFIG_FREERAMDISK=y
 CONFIG_FSCK_MINIX=y
+CONFIG_MKFS_EXT2=y
 CONFIG_MKFS_MINIX=y
 
 #
 # Minix filesystem support
 #
 CONFIG_FEATURE_MINIX2=y
+# CONFIG_MKFS_REISER is not set
 CONFIG_MKFS_VFAT=y
 CONFIG_GETOPT=y
 CONFIG_FEATURE_GETOPT_LONG=y
@@ -506,6 +516,8 @@ CONFIG_FEATURE_HWCLOCK_ADJTIME_FHS=y
 CONFIG_IPCRM=y
 CONFIG_IPCS=y
 CONFIG_LOSETUP=y
+CONFIG_LSPCI=y
+CONFIG_LSUSB=y
 CONFIG_MDEV=y
 CONFIG_FEATURE_MDEV_CONF=y
 CONFIG_FEATURE_MDEV_RENAME=y
@@ -518,6 +530,7 @@ CONFIG_MORE=y
 CONFIG_FEATURE_USE_TERMIOS=y
 CONFIG_VOLUMEID=y
 CONFIG_FEATURE_VOLUMEID_EXT=y
+CONFIG_FEATURE_VOLUMEID_BTRFS=y
 CONFIG_FEATURE_VOLUMEID_REISERFS=y
 CONFIG_FEATURE_VOLUMEID_FAT=y
 CONFIG_FEATURE_VOLUMEID_HFS=y
@@ -595,11 +608,12 @@ CONFIG_DEVMEM=y
 CONFIG_EJECT=y
 CONFIG_FEATURE_EJECT_SCSI=y
 CONFIG_FBSPLASH=y
-# CONFIG_FLASH_LOCK is not set
-# CONFIG_FLASH_UNLOCK is not set
-# CONFIG_FLASH_ERASEALL is not set
+CONFIG_FLASHCP=y
+CONFIG_FLASH_LOCK=y
+CONFIG_FLASH_UNLOCK=y
+CONFIG_FLASH_ERASEALL=y
 CONFIG_IONICE=y
-# CONFIG_INOTIFYD is not set
+CONFIG_INOTIFYD=y
 CONFIG_LAST=y
 # CONFIG_FEATURE_LAST_SMALL is not set
 CONFIG_FEATURE_LAST_FANCY=y
@@ -632,8 +646,8 @@ CONFIG_RUNLEVEL=y
 CONFIG_RX=y
 CONFIG_SETSID=y
 CONFIG_STRINGS=y
-# CONFIG_TASKSET is not set
-# CONFIG_FEATURE_TASKSET_FANCY is not set
+CONFIG_TASKSET=y
+CONFIG_FEATURE_TASKSET_FANCY=y
 CONFIG_TIME=y
 CONFIG_TIMEOUT=y
 CONFIG_TTYSIZE=y
@@ -658,6 +672,7 @@ CONFIG_ETHER_WAKE=y
 CONFIG_FAKEIDENTD=y
 CONFIG_FTPD=y
 CONFIG_FEATURE_FTP_WRITE=y
+CONFIG_FEATURE_FTPD_ACCEPT_BROKEN_LIST=y
 CONFIG_FTPGET=y
 CONFIG_FTPPUT=y
 CONFIG_FEATURE_FTPGETPUT_LONG_OPTIONS=y
@@ -723,6 +738,8 @@ CONFIG_NETSTAT=y
 CONFIG_FEATURE_NETSTAT_WIDE=y
 CONFIG_FEATURE_NETSTAT_PRG=y
 CONFIG_NSLOOKUP=y
+CONFIG_NTPD=y
+CONFIG_FEATURE_NTPD_SERVER=y
 CONFIG_PING=y
 CONFIG_PING6=y
 CONFIG_FEATURE_FANCY_PING=y
@@ -734,13 +751,16 @@ CONFIG_FEATURE_TELNET_TTYPE=y
 CONFIG_FEATURE_TELNET_AUTOLOGIN=y
 CONFIG_TELNETD=y
 CONFIG_FEATURE_TELNETD_STANDALONE=y
+CONFIG_FEATURE_TELNETD_INETD_WAIT=y
 CONFIG_TFTP=y
 CONFIG_TFTPD=y
 CONFIG_FEATURE_TFTP_GET=y
 CONFIG_FEATURE_TFTP_PUT=y
 CONFIG_FEATURE_TFTP_BLOCKSIZE=y
+CONFIG_FEATURE_TFTP_PROGRESS_BAR=y
 # CONFIG_TFTP_DEBUG is not set
 CONFIG_TRACEROUTE=y
+CONFIG_TRACEROUTE6=y
 CONFIG_FEATURE_TRACEROUTE_VERBOSE=y
 # CONFIG_FEATURE_TRACEROUTE_SOURCE_ROUTE is not set
 # CONFIG_FEATURE_TRACEROUTE_USE_ICMP is not set
@@ -814,6 +834,7 @@ CONFIG_FEATURE_TOP_SMP_CPU=y
 CONFIG_FEATURE_TOP_DECIMALS=y
 CONFIG_FEATURE_TOP_SMP_PROCESS=y
 CONFIG_FEATURE_TOPMEM=y
+CONFIG_FEATURE_SHOW_THREADS=y
 CONFIG_UPTIME=y
 CONFIG_WATCH=y
 
@@ -878,6 +899,7 @@ CONFIG_HUSH_CASE=y
 CONFIG_HUSH_FUNCTIONS=y
 CONFIG_HUSH_LOCAL=y
 CONFIG_HUSH_EXPORT_N=y
+CONFIG_HUSH_RANDOM_SUPPORT=y
 # CONFIG_LASH is not set
 CONFIG_MSH=y
 CONFIG_SH_MATH_SUPPORT=y
index 798d15a4c4dc1b2216a04707bfc7ffd67a85b744..34f70ecfc303ce111a8e74098a8af1f9fddc549e 100644 (file)
@@ -43,8 +43,6 @@
 #endif
 
 #include "busybox.h" /* for applet_names */
-//TODO: pull in some .h and find out do we have SINGLE_APPLET_MAIN?
-//#include "applet_tables.h" doesn't work
 #include <paths.h>
 #include <setjmp.h>
 #include <fnmatch.h>
 # define CLEAR_RANDOM_T(rnd) ((void)0)
 #endif
 
-#if defined SINGLE_APPLET_MAIN
+#define SKIP_definitions 1
+#include "applet_tables.h"
+#undef SKIP_definitions
+#if NUM_APPLETS == 1
 /* STANDALONE does not make sense, and won't compile */
 # undef CONFIG_FEATURE_SH_STANDALONE
 # undef ENABLE_FEATURE_SH_STANDALONE
 # undef IF_FEATURE_SH_STANDALONE
-# undef IF_NOT_FEATURE_SH_STANDALONE(...)
+# undef IF_NOT_FEATURE_SH_STANDALONE
 # define ENABLE_FEATURE_SH_STANDALONE 0
 # define IF_FEATURE_SH_STANDALONE(...)
 # define IF_NOT_FEATURE_SH_STANDALONE(...) __VA_ARGS__
@@ -4539,7 +4540,7 @@ forkchild(struct job *jp, union node *n, int mode)
        if (mode == FORK_NOJOB          /* is it `xxx` ? */
         && n && n->type == NCMD        /* is it single cmd? */
        /* && n->ncmd.args->type == NARG - always true? */
-        && strcmp(n->ncmd.args->narg.text, "trap") == 0
+        && n->ncmd.args && strcmp(n->ncmd.args->narg.text, "trap") == 0
         && n->ncmd.args->narg.next == NULL /* "trap" with no arguments */
        /* && n->ncmd.args->narg.backquote == NULL - do we need to check this? */
        ) {
@@ -4627,7 +4628,7 @@ forkchild(struct job *jp, union node *n, int mode)
        }
 #if JOBS
        if (n && n->type == NCMD
-        && strcmp(n->ncmd.args->narg.text, "jobs") == 0
+        && n->ncmd.args && strcmp(n->ncmd.args->narg.text, "jobs") == 0
        ) {
                TRACE(("Job hack\n"));
                /* "jobs": we do not want to clear job list for it,
diff --git a/shell/ash_test/ash-misc/nulltick1.right b/shell/ash_test/ash-misc/nulltick1.right
new file mode 100644 (file)
index 0000000..f90b820
--- /dev/null
@@ -0,0 +1,3 @@
+Test 1
+Test 2
+Done
diff --git a/shell/ash_test/ash-misc/nulltick1.tests b/shell/ash_test/ash-misc/nulltick1.tests
new file mode 100755 (executable)
index 0000000..f81923d
--- /dev/null
@@ -0,0 +1,3 @@
+echo Test ` ` 1
+echo Test `</dev/null` 2
+echo Done
index e0c56262132f11122a28ecd8f4c2fd634a6c958e..2aeb8e4406620394946e9e72e8c1ede4c7af07c6 100644 (file)
 # define USE_FOR_MMU(...)
 #endif
 
-#if defined SINGLE_APPLET_MAIN
+#define SKIP_definitions 1
+#include "applet_tables.h"
+#undef SKIP_definitions
+#if NUM_APPLETS == 1
 /* STANDALONE does not make sense, and won't compile */
 # undef CONFIG_FEATURE_SH_STANDALONE
 # undef ENABLE_FEATURE_SH_STANDALONE
 # undef IF_FEATURE_SH_STANDALONE
+# undef IF_NOT_FEATURE_SH_STANDALONE
+# define ENABLE_FEATURE_SH_STANDALONE 0
 # define IF_FEATURE_SH_STANDALONE(...)
 # define IF_NOT_FEATURE_SH_STANDALONE(...) __VA_ARGS__
-# define ENABLE_FEATURE_SH_STANDALONE 0
 #endif
 
 #if !ENABLE_HUSH_INTERACTIVE
@@ -3568,7 +3572,9 @@ static void execvp_or_die(char **argv)
 {
        debug_printf_exec("execing '%s'\n", argv[0]);
        sigprocmask(SIG_SETMASK, &G.inherited_set, NULL);
-       execvp(argv[0], argv);
+       /* if FEATURE_SH_STANDALONE, "exec <applet_name>" should work,
+        * therefore we should use BB_EXECVP, not execvp */
+       BB_EXECVP(argv[0], argv);
        bb_perror_msg("can't execute '%s'", argv[0]);
        _exit(127); /* bash compat */
 }
index 754fa44b3ad8029915bd739b65cfc0bb0c4594d9..8338d6be884dc10cf830619dd3ec67d92e3d7c0c 100644 (file)
@@ -698,7 +698,7 @@ int syslogd_main(int argc UNUSED_PARAM, char **argv)
        if (!(opts & OPT_nofork)) {
                bb_daemonize_or_rexec(DAEMON_CHDIR_ROOT, argv);
        }
-       umask(0);
+       //umask(0); - why??
        write_pidfile("/var/run/syslogd.pid");
        do_syslogd();
        /* return EXIT_SUCCESS; */
index 75f085873fd1b0cdcef9ed0025e5d6e80c2ed23c..e53ade9254b69e9afa43cb698c29480f1ba95bbc 100755 (executable)
@@ -7,7 +7,8 @@
 # ls -ln shows date. Need to remove that, it's variable.
 # sed: coalesce spaces
 # cut: remove date
-FILTER_LS="sed 's/  */ /g' | cut -d' ' -f 1-5,9-"
+# grep: remove "total NNN" lines
+FILTER_LS="sed 's/  */ /g' | cut -d' ' -f 1-5,9- | grep -v '^total '"
 
 
 # newc cpio archive of directory cpio.testdir with empty x and y hardlinks
@@ -36,7 +37,6 @@ ls -ln cpio.testdir | $FILTER_LS" \
 "\
 1 blocks
 0
-total 0
 -rw-r--r-- 2 $user $group 0 x
 -rw-r--r-- 2 $user $group 0 y
 " \
@@ -75,7 +75,6 @@ ls -ln cpio.testdir2/cpio.testdir | $FILTER_LS" \
 "\
 2 blocks
 0
-total 8
 -rw-r--r-- 2 $user $group 0 empty
 -rw-r--r-- 2 $user $group 0 empty1
 -rw-r--r-- 2 $user $group 2 nonempty
index 37213eec86191366d5b646b23d7bdf0d2a396a1e..d9a62fbfefef573de72aebc969a7ac2f4cebd2f4 100644 (file)
@@ -119,7 +119,7 @@ int script_main(int argc UNUSED_PARAM, char **argv)
                                 * for example, try "script -c true" */
                                break;
                        }
-                       if (pfd[0].revents & POLLIN) {
+                       if (pfd[0].revents) {
                                errno = 0;
                                count = safe_read(pty, buf, sizeof(buf));
                                if (count <= 0 && errno != EAGAIN) {
@@ -143,7 +143,7 @@ int script_main(int argc UNUSED_PARAM, char **argv)
                                        }
                                }
                        }
-                       if (pfd[1].revents & POLLIN) {
+                       if (pfd[1].revents) {
                                count = safe_read(STDIN_FILENO, buf, sizeof(buf));
                                if (count <= 0) {
                                        /* err/eof from stdin: don't read stdin anymore */
index 1b5488f9ed486a541b6afa16da818d486e9d2f6f..574354611ceb72d599dc9505a4f34c1880badd0e 100644 (file)
@@ -52,7 +52,11 @@ int FAST_FUNC volume_id_probe_linux_swap(struct volume_id *id /*,uint64_t off*/)
                                goto found;
                        }
 
-                       if (memcmp(buf, "SWAPSPACE2", 10) == 0) {
+                       if (memcmp(buf, "SWAPSPACE2", 10) == 0
+                        || memcmp(buf, "S1SUSPEND", 9) == 0
+                        || memcmp(buf, "S2SUSPEND", 9) == 0
+                        || memcmp(buf, "ULSUSPEND", 9) == 0
+                       ) {
                                sw = volume_id_get_buffer(id, off, sizeof(struct swap_header_v1_2));
                                if (sw == NULL)
                                        return -1;