From 5e1189e187f6a7957dadb8eda2c271c4a0777a23 Mon Sep 17 00:00:00 2001 From: Erik Andersen Date: Sat, 15 Apr 2000 16:34:54 +0000 Subject: [PATCH] More documentation updates, and minor fixes to make things sync up with the docs. -Erik --- TODO | 5 + applets/busybox.c | 64 ++-- archival/gzip.c | 2 +- busybox.c | 64 ++-- busybox.def.h | 11 +- coreutils/mkfifo.c | 4 +- coreutils/mknod.c | 53 ++- coreutils/printf.c | 2 +- coreutils/sort.c | 4 +- coreutils/test.c | 8 +- coreutils/tr.c | 14 +- docs/busybox.pod | 755 ++++++++++++++++++++++++++++++++++++++---- gzip.c | 2 +- makedevs.c | 19 +- math.c | 21 +- miscutils/makedevs.c | 19 +- miscutils/mt.c | 15 +- mkfifo.c | 4 +- mknod.c | 53 ++- mnc.c | 6 +- mt.c | 15 +- networking/nslookup.c | 18 +- nslookup.c | 18 +- printf.c | 2 +- sort.c | 4 +- test.c | 8 +- tr.c | 14 +- 27 files changed, 967 insertions(+), 237 deletions(-) diff --git a/TODO b/TODO index 872de4677..4d1b82874 100644 --- a/TODO +++ b/TODO @@ -28,6 +28,11 @@ around to it some time. If you have any good ideas, please let me know. * ftp +----------------------- + +Add a compile option to turn off all the compiled in help +andusage information. Some folks don't need or want it... + ----------------------- Compile with debugging on, run 'nm --size-sort ./busybox' diff --git a/applets/busybox.c b/applets/busybox.c index a14711a67..15d53eb05 100644 --- a/applets/busybox.c +++ b/applets/busybox.c @@ -45,13 +45,13 @@ static const struct Applet applets[] = { {"cat", cat_main, _BB_DIR_BIN}, #endif #ifdef BB_CHMOD_CHOWN_CHGRP - {"chmod", chmod_chown_chgrp_main, _BB_DIR_BIN}, + {"chgrp", chmod_chown_chgrp_main, _BB_DIR_BIN}, #endif #ifdef BB_CHMOD_CHOWN_CHGRP - {"chown", chmod_chown_chgrp_main, _BB_DIR_BIN}, + {"chmod", chmod_chown_chgrp_main, _BB_DIR_BIN}, #endif #ifdef BB_CHMOD_CHOWN_CHGRP - {"chgrp", chmod_chown_chgrp_main, _BB_DIR_BIN}, + {"chown", chmod_chown_chgrp_main, _BB_DIR_BIN}, #endif #ifdef BB_CHROOT {"chroot", chroot_main, _BB_DIR_SBIN}, @@ -65,9 +65,6 @@ static const struct Applet applets[] = { #ifdef BB_CP_MV {"cp", cp_mv_main, _BB_DIR_BIN}, #endif -#ifdef BB_CP_MV - {"mv", cp_mv_main, _BB_DIR_BIN}, -#endif #ifdef BB_DATE {"date", date_main, _BB_DIR_BIN}, #endif @@ -92,6 +89,9 @@ static const struct Applet applets[] = { #ifdef BB_ECHO {"echo", echo_main, _BB_DIR_BIN}, #endif +#ifdef BB_TRUE_FALSE + {"false", false_main, _BB_DIR_BIN}, +#endif #ifdef BB_FBSET {"fbset", fbset_main, _BB_DIR_USR_SBIN}, #endif @@ -113,12 +113,15 @@ static const struct Applet applets[] = { #ifdef BB_FSCK_MINIX {"fsck.minix", fsck_minix_main, _BB_DIR_SBIN}, #endif -#ifdef BB_MKFS_MINIX - {"mkfs.minix", mkfs_minix_main, _BB_DIR_SBIN}, -#endif #ifdef BB_GREP {"grep", grep_main, _BB_DIR_BIN}, #endif +#ifdef BB_GUNZIP + {"gunzip", gunzip_main, _BB_DIR_BIN}, +#endif +#ifdef BB_GZIP + {"gzip", gzip_main, _BB_DIR_BIN}, +#endif #ifdef BB_HALT {"halt", halt_main, _BB_DIR_SBIN}, #endif @@ -137,9 +140,6 @@ static const struct Applet applets[] = { #ifdef BB_INSMOD {"insmod", insmod_main, _BB_DIR_SBIN}, #endif -#ifdef BB_FEATURE_LINUXRC // - {"linuxrc", init_main, _BB_DIR_ROOT}, -#endif #ifdef BB_KILL {"kill", kill_main, _BB_DIR_BIN}, #endif @@ -149,6 +149,9 @@ static const struct Applet applets[] = { #ifdef BB_LENGTH {"length", length_main, _BB_DIR_USR_BIN}, #endif +#ifdef BB_FEATURE_LINUXRC // + {"linuxrc", init_main, _BB_DIR_ROOT}, +#endif #ifdef BB_LN {"ln", ln_main, _BB_DIR_BIN}, #endif @@ -161,6 +164,12 @@ static const struct Applet applets[] = { #ifdef BB_LOADKMAP {"loadkmap", loadkmap_main, _BB_DIR_SBIN}, #endif +#ifdef BB_LOGGER + {"logger", logger_main, _BB_DIR_USR_BIN}, +#endif +#ifdef BB_LOGNAME + {"logname", logname_main, _BB_DIR_USR_BIN}, +#endif #ifdef BB_LS {"ls", ls_main, _BB_DIR_BIN}, #endif @@ -179,6 +188,9 @@ static const struct Applet applets[] = { #ifdef BB_MKFIFO {"mkfifo", mkfifo_main, _BB_DIR_USR_BIN}, #endif +#ifdef BB_MKFS_MINIX + {"mkfs.minix", mkfs_minix_main, _BB_DIR_SBIN}, +#endif #ifdef BB_MKNOD {"mknod", mknod_main, _BB_DIR_BIN}, #endif @@ -197,6 +209,9 @@ static const struct Applet applets[] = { #ifdef BB_MT {"mt", mt_main, _BB_DIR_BIN}, #endif +#ifdef BB_CP_MV + {"mv", cp_mv_main, _BB_DIR_BIN}, +#endif #ifdef BB_NSLOOKUP {"nslookup", nslookup_main, _BB_DIR_USR_BIN}, #endif @@ -248,12 +263,6 @@ static const struct Applet applets[] = { #ifdef BB_SYSLOGD {"syslogd", syslogd_main, _BB_DIR_SBIN}, #endif -#ifdef BB_LOGGER - {"logger", logger_main, _BB_DIR_USR_BIN}, -#endif -#ifdef BB_LOGNAME - {"logname", logname_main, _BB_DIR_USR_BIN}, -#endif #ifdef BB_SWAPONOFF {"swapon", swap_on_off_main, _BB_DIR_SBIN}, #endif @@ -269,9 +278,6 @@ static const struct Applet applets[] = { #ifdef BB_TELNET {"telnet", telnet_main, _BB_DIR_USR_BIN}, #endif -#ifdef BB_TEST - {"[", test_main, _BB_DIR_USR_BIN}, -#endif #ifdef BB_TEST {"test", test_main, _BB_DIR_USR_BIN}, #endif @@ -287,9 +293,6 @@ static const struct Applet applets[] = { #ifdef BB_TRUE_FALSE {"true", true_main, _BB_DIR_BIN}, #endif -#ifdef BB_TRUE_FALSE - {"false", false_main, _BB_DIR_BIN}, -#endif #ifdef BB_TTY {"tty", tty_main, _BB_DIR_USR_BIN}, #endif @@ -299,15 +302,15 @@ static const struct Applet applets[] = { #ifdef BB_UNAME {"uname", uname_main, _BB_DIR_BIN}, #endif -#ifdef BB_UPTIME - {"uptime", uptime_main, _BB_DIR_USR_BIN}, -#endif #ifdef BB_UNIQ {"uniq", uniq_main, _BB_DIR_BIN}, #endif #ifdef BB_UPDATE {"update", update_main, _BB_DIR_SBIN}, #endif +#ifdef BB_UPTIME + {"uptime", uptime_main, _BB_DIR_USR_BIN}, +#endif #ifdef BB_USLEEP {"usleep", usleep_main, _BB_DIR_BIN}, #endif @@ -323,11 +326,8 @@ static const struct Applet applets[] = { #ifdef BB_GUNZIP {"zcat", gunzip_main, _BB_DIR_BIN}, #endif -#ifdef BB_GUNZIP - {"gunzip", gunzip_main, _BB_DIR_BIN}, -#endif -#ifdef BB_GZIP - {"gzip", gzip_main, _BB_DIR_BIN}, +#ifdef BB_TEST + {"[", test_main, _BB_DIR_USR_BIN}, #endif {0} }; diff --git a/archival/gzip.c b/archival/gzip.c index 55ec5bc4e..a9d34aeb1 100644 --- a/archival/gzip.c +++ b/archival/gzip.c @@ -41,7 +41,7 @@ static const char gzip_usage[] = "gzip [OPTION]... FILE\n\n" "Compress FILE with maximum compression.\n" - "When FILE is -, reads standard input. Implies -c.\n\n" + "When FILE is '-', reads standard input. Implies -c.\n\n" "Options:\n" "\t-c\tWrite output to standard output instead of FILE.gz\n"; diff --git a/busybox.c b/busybox.c index a14711a67..15d53eb05 100644 --- a/busybox.c +++ b/busybox.c @@ -45,13 +45,13 @@ static const struct Applet applets[] = { {"cat", cat_main, _BB_DIR_BIN}, #endif #ifdef BB_CHMOD_CHOWN_CHGRP - {"chmod", chmod_chown_chgrp_main, _BB_DIR_BIN}, + {"chgrp", chmod_chown_chgrp_main, _BB_DIR_BIN}, #endif #ifdef BB_CHMOD_CHOWN_CHGRP - {"chown", chmod_chown_chgrp_main, _BB_DIR_BIN}, + {"chmod", chmod_chown_chgrp_main, _BB_DIR_BIN}, #endif #ifdef BB_CHMOD_CHOWN_CHGRP - {"chgrp", chmod_chown_chgrp_main, _BB_DIR_BIN}, + {"chown", chmod_chown_chgrp_main, _BB_DIR_BIN}, #endif #ifdef BB_CHROOT {"chroot", chroot_main, _BB_DIR_SBIN}, @@ -65,9 +65,6 @@ static const struct Applet applets[] = { #ifdef BB_CP_MV {"cp", cp_mv_main, _BB_DIR_BIN}, #endif -#ifdef BB_CP_MV - {"mv", cp_mv_main, _BB_DIR_BIN}, -#endif #ifdef BB_DATE {"date", date_main, _BB_DIR_BIN}, #endif @@ -92,6 +89,9 @@ static const struct Applet applets[] = { #ifdef BB_ECHO {"echo", echo_main, _BB_DIR_BIN}, #endif +#ifdef BB_TRUE_FALSE + {"false", false_main, _BB_DIR_BIN}, +#endif #ifdef BB_FBSET {"fbset", fbset_main, _BB_DIR_USR_SBIN}, #endif @@ -113,12 +113,15 @@ static const struct Applet applets[] = { #ifdef BB_FSCK_MINIX {"fsck.minix", fsck_minix_main, _BB_DIR_SBIN}, #endif -#ifdef BB_MKFS_MINIX - {"mkfs.minix", mkfs_minix_main, _BB_DIR_SBIN}, -#endif #ifdef BB_GREP {"grep", grep_main, _BB_DIR_BIN}, #endif +#ifdef BB_GUNZIP + {"gunzip", gunzip_main, _BB_DIR_BIN}, +#endif +#ifdef BB_GZIP + {"gzip", gzip_main, _BB_DIR_BIN}, +#endif #ifdef BB_HALT {"halt", halt_main, _BB_DIR_SBIN}, #endif @@ -137,9 +140,6 @@ static const struct Applet applets[] = { #ifdef BB_INSMOD {"insmod", insmod_main, _BB_DIR_SBIN}, #endif -#ifdef BB_FEATURE_LINUXRC // - {"linuxrc", init_main, _BB_DIR_ROOT}, -#endif #ifdef BB_KILL {"kill", kill_main, _BB_DIR_BIN}, #endif @@ -149,6 +149,9 @@ static const struct Applet applets[] = { #ifdef BB_LENGTH {"length", length_main, _BB_DIR_USR_BIN}, #endif +#ifdef BB_FEATURE_LINUXRC // + {"linuxrc", init_main, _BB_DIR_ROOT}, +#endif #ifdef BB_LN {"ln", ln_main, _BB_DIR_BIN}, #endif @@ -161,6 +164,12 @@ static const struct Applet applets[] = { #ifdef BB_LOADKMAP {"loadkmap", loadkmap_main, _BB_DIR_SBIN}, #endif +#ifdef BB_LOGGER + {"logger", logger_main, _BB_DIR_USR_BIN}, +#endif +#ifdef BB_LOGNAME + {"logname", logname_main, _BB_DIR_USR_BIN}, +#endif #ifdef BB_LS {"ls", ls_main, _BB_DIR_BIN}, #endif @@ -179,6 +188,9 @@ static const struct Applet applets[] = { #ifdef BB_MKFIFO {"mkfifo", mkfifo_main, _BB_DIR_USR_BIN}, #endif +#ifdef BB_MKFS_MINIX + {"mkfs.minix", mkfs_minix_main, _BB_DIR_SBIN}, +#endif #ifdef BB_MKNOD {"mknod", mknod_main, _BB_DIR_BIN}, #endif @@ -197,6 +209,9 @@ static const struct Applet applets[] = { #ifdef BB_MT {"mt", mt_main, _BB_DIR_BIN}, #endif +#ifdef BB_CP_MV + {"mv", cp_mv_main, _BB_DIR_BIN}, +#endif #ifdef BB_NSLOOKUP {"nslookup", nslookup_main, _BB_DIR_USR_BIN}, #endif @@ -248,12 +263,6 @@ static const struct Applet applets[] = { #ifdef BB_SYSLOGD {"syslogd", syslogd_main, _BB_DIR_SBIN}, #endif -#ifdef BB_LOGGER - {"logger", logger_main, _BB_DIR_USR_BIN}, -#endif -#ifdef BB_LOGNAME - {"logname", logname_main, _BB_DIR_USR_BIN}, -#endif #ifdef BB_SWAPONOFF {"swapon", swap_on_off_main, _BB_DIR_SBIN}, #endif @@ -269,9 +278,6 @@ static const struct Applet applets[] = { #ifdef BB_TELNET {"telnet", telnet_main, _BB_DIR_USR_BIN}, #endif -#ifdef BB_TEST - {"[", test_main, _BB_DIR_USR_BIN}, -#endif #ifdef BB_TEST {"test", test_main, _BB_DIR_USR_BIN}, #endif @@ -287,9 +293,6 @@ static const struct Applet applets[] = { #ifdef BB_TRUE_FALSE {"true", true_main, _BB_DIR_BIN}, #endif -#ifdef BB_TRUE_FALSE - {"false", false_main, _BB_DIR_BIN}, -#endif #ifdef BB_TTY {"tty", tty_main, _BB_DIR_USR_BIN}, #endif @@ -299,15 +302,15 @@ static const struct Applet applets[] = { #ifdef BB_UNAME {"uname", uname_main, _BB_DIR_BIN}, #endif -#ifdef BB_UPTIME - {"uptime", uptime_main, _BB_DIR_USR_BIN}, -#endif #ifdef BB_UNIQ {"uniq", uniq_main, _BB_DIR_BIN}, #endif #ifdef BB_UPDATE {"update", update_main, _BB_DIR_SBIN}, #endif +#ifdef BB_UPTIME + {"uptime", uptime_main, _BB_DIR_USR_BIN}, +#endif #ifdef BB_USLEEP {"usleep", usleep_main, _BB_DIR_BIN}, #endif @@ -323,11 +326,8 @@ static const struct Applet applets[] = { #ifdef BB_GUNZIP {"zcat", gunzip_main, _BB_DIR_BIN}, #endif -#ifdef BB_GUNZIP - {"gunzip", gunzip_main, _BB_DIR_BIN}, -#endif -#ifdef BB_GZIP - {"gzip", gzip_main, _BB_DIR_BIN}, +#ifdef BB_TEST + {"[", test_main, _BB_DIR_USR_BIN}, #endif {0} }; diff --git a/busybox.def.h b/busybox.def.h index 1952dd377..1880884f9 100644 --- a/busybox.def.h +++ b/busybox.def.h @@ -32,12 +32,12 @@ #define BB_GREP #define BB_GUNZIP #define BB_GZIP -//#define BB_HALT +#define BB_HALT #define BB_HEAD #define BB_HOSTID #define BB_HOSTNAME #define BB_INIT -// Don't bother turning BB_INSMOD on. It doesn't work. +// Don't bother turning BB_INSMOD on. It doesn't work yet. //#define BB_INSMOD #define BB_KILL #define BB_KILLALL @@ -65,11 +65,11 @@ #define BB_MT #define BB_NSLOOKUP #define BB_PING -//#define BB_POWEROFF +#define BB_POWEROFF #define BB_PRINTF #define BB_PS #define BB_PWD -//#define BB_REBOOT +#define BB_REBOOT #define BB_RM #define BB_RMDIR #define BB_RMMOD @@ -85,7 +85,7 @@ #define BB_TAR #define BB_TEE #define BB_TEST -// Don't turn BB_TELNET on. It doesn't work. +// Don't bother turning BB_TELNET on. It doesn't work properly yet. //#define BB_TELNET #define BB_TOUCH #define BB_TR @@ -115,6 +115,7 @@ // the /proc filesystem and thereby saving lots and lots // memory for more important things. // You can't use this and USE_PROCFS at the same time... +// (BTW, I emailed Linus and this patch will not be going into the stock kernel) //#define BB_FEATURE_USE_DEVPS_PATCH // // enable features that use the /proc filesystem (apps that diff --git a/coreutils/mkfifo.c b/coreutils/mkfifo.c index c74402d4c..b273df046 100644 --- a/coreutils/mkfifo.c +++ b/coreutils/mkfifo.c @@ -27,10 +27,10 @@ #include static const char mkfifo_usage[] = "mkfifo [OPTIONS] name\n\n" - "Create the named fifo\n\n" + "Creates a named pipe (identical to 'mknod name p')\n\n" "Options:\n" - "\t-m\tcreate the fifo with the specified mode; default = a=rw-umask\n"; + "\t-m\tcreate the pipe using the specified mode (default a=rw)\n"; extern int mkfifo_main(int argc, char **argv) { diff --git a/coreutils/mknod.c b/coreutils/mknod.c index 40f508d33..0c93df64d 100644 --- a/coreutils/mknod.c +++ b/coreutils/mknod.c @@ -28,23 +28,47 @@ #include #include -static const char mknod_usage[] = "mknod NAME TYPE MAJOR MINOR\n\n" - "Make block or character special files.\n\n" +static const char mknod_usage[] = "mknod [OPTIONS] NAME TYPE MAJOR MINOR\n\n" + "Create a special file (block, character, or pipe).\n\n" + "Options:\n" + "\t-m\tcreate the special file using the specified mode (default a=rw)\n\n" "TYPEs include:\n" "\tb:\tMake a block (buffered) device.\n" - "\tc or u:\tMake a character (un-buffered) device.\n" - "\tp:\tMake a named pipe. Major and minor are ignored for named pipes.\n"; + "\tp:\tMake a named pipe. MAJOR and MINOR are ignored for named pipes.\n"; int mknod_main(int argc, char **argv) { + char *thisarg; mode_t mode = 0; + mode_t perm = 0666; dev_t dev = 0; - if (argc != 5 || **(argv + 1) == '-') { + argc--; + argv++; + + /* Parse any options */ + while (argc > 1) { + if (**argv != '-') + break; + thisarg = *argv; + thisarg++; + switch (*thisarg) { + case 'm': + argc--; + argv++; + parse_mode(*argv, &perm); + break; + default: + usage(mknod_usage); + } + argc--; + argv++; + } + if (argc != 4 && argc != 2) { usage(mknod_usage); } - switch (argv[2][0]) { + switch (argv[1][0]) { case 'c': case 'u': mode = S_IFCHR; @@ -54,23 +78,22 @@ int mknod_main(int argc, char **argv) break; case 'p': mode = S_IFIFO; + if (argc!=2) { + usage(mknod_usage); + } break; default: usage(mknod_usage); } if (mode == S_IFCHR || mode == S_IFBLK) { - dev = (atoi(argv[3]) << 8) | atoi(argv[4]); - if (argc != 5) { - usage(mknod_usage); - } + dev = (atoi(argv[2]) << 8) | atoi(argv[1]); } - mode |= 0666; + mode |= perm; - if (mknod(argv[1], mode, dev) != 0) { - perror(argv[1]); - exit (FALSE); - } + if (mknod(argv[0], mode, dev) != 0) + fatalError("%s: %s\n", argv[0], strerror(errno)); exit (TRUE); } + diff --git a/coreutils/printf.c b/coreutils/printf.c index 41ab2e442..bfe408175 100644 --- a/coreutils/printf.c +++ b/coreutils/printf.c @@ -139,7 +139,7 @@ static void verify __P((char *s, char *end)); /* The value to return to the calling program. */ static int exit_status; -static const char printf_usage[] = "printf format [argument...]\n"; +static const char printf_usage[] = "printf format [argument...]\n\nFormats and prints the given data.\n"; int printf_main(int argc, char **argv) { diff --git a/coreutils/sort.c b/coreutils/sort.c index 6ee6f207e..4301f4303 100644 --- a/coreutils/sort.c +++ b/coreutils/sort.c @@ -33,7 +33,7 @@ static const char sort_usage[] = "sort [-n]" #ifdef BB_FEATURE_SORT_REVERSE " [-r]" #endif -" [FILE]...\n\n"; +" [FILE]...\n\nSorts lines of text in the specified files\n"; #ifdef BB_FEATURE_SORT_REVERSE #define APPLY_REVERSE(x) (reverse ? -(x) : (x)) @@ -320,4 +320,4 @@ int sort_main(int argc, char **argv) exit(0); } -/* $Id: sort.c,v 1.13 2000/04/13 01:18:56 erik Exp $ */ +/* $Id: sort.c,v 1.14 2000/04/15 16:34:54 erik Exp $ */ diff --git a/coreutils/test.c b/coreutils/test.c index 85d06a83a..0ed777194 100644 --- a/coreutils/test.c +++ b/coreutils/test.c @@ -1,6 +1,6 @@ /* vi: set sw=4 ts=4: */ /* - * echo implementation for busybox + * test implementation for busybox * * Copyright (c) by a whole pile of folks: * @@ -185,6 +185,12 @@ test_main(int argc, char** argv) fatalError("missing ]"); argv[argc] = NULL; } + if (strcmp(argv[1], "--help") == 0) { + usage("test EXPRESSION\n" + "or [ EXPRESSION ]\n\n" + "Checks file types and compares values returning an exit\n" + "code determined by the value of EXPRESSION.\n"); + } /* Implement special cases from POSIX.2, section 4.62.4 */ switch (argc) { diff --git a/coreutils/tr.c b/coreutils/tr.c index 3bfa48080..b631b0065 100644 --- a/coreutils/tr.c +++ b/coreutils/tr.c @@ -44,7 +44,7 @@ static char sccsid[] = "@(#)tr.c 8.2 (Berkeley) 5/4/95"; #endif static const char rcsid[] = - "$Id: tr.c,v 1.2 2000/03/21 22:32:57 erik Exp $"; + "$Id: tr.c,v 1.3 2000/04/15 16:34:54 erik Exp $"; #endif /* not lint */ #endif /* #if 0 */ @@ -138,12 +138,12 @@ int cflag; static void tr_usage() { - (void) fprintf(stderr, "%s\n%s\n%s\n%s\n", - "usage: tr [-csu] string1 string2", - " tr [-cu] -d string1", - " tr [-cu] -s string1", - " tr [-cu] -ds string1 string2"); - exit(1); + usage( "\ttr [-csu] string1 string2\n" + "\ttr [-cu] -d string1\n" + "\ttr [-cu] -s string1\n" + "\ttr [-cu] -ds string1 string2\n\n" + "Translate, squeeze, and/or delete characters from standard\n" + "input, writing to standard output.\n"); } diff --git a/docs/busybox.pod b/docs/busybox.pod index 0e36e3172..7d185fa15 100644 --- a/docs/busybox.pod +++ b/docs/busybox.pod @@ -36,16 +36,15 @@ tries to make itself useful to small systems with limited resources. Currently defined functions include: -basename, cat, chmod, chown, chgrp, chroot, clear, chvt, cp, date, -dd, df, dirname, dmesg, du, dutmp, echo, false, fbset, fdflush, find, free, -freeramdisk, deallocvt, fsck.minix, mkfs.minix, grep, gunzip, gzip, -halt, head, hostid, hostname, init, kill, killall, length, ln, loadacm, -loadfont, loadkmap, ls, lsmod, makedevs, math, mkdir, mkfifo, mknod, -mkswap, mnc, more, mount, mt, mv, nslookup, poweroff, ping, printf, ps, -pwd, reboot, rm, rmdir, rmmod, sed, sh, fdisk, sfdisk, sleep, sort, -sync, syslogd, logger, logname, swapon, swapoff, tail, tar, [, test, -tee, touch, tr, true, tty, umount, uname, uptime, uniq, update, -usleep, wc, whoami, yes, zcat +basename, cat, chgrp, chmod, chown, chroot, clear, chvt, cp, date, dd, df, +dirname, dmesg, du, dutmp, echo, false, fbset, fdflush, find, free, +freeramdisk, deallocvt, fsck.minix, grep, gunzip, gzip, halt, head, hostid, +hostname, init, kill, killall, length, ln, loadacm, loadfont, loadkmap, logger, +logname, ls, lsmod, makedevs, math, mkdir, mkfifo, mkfs.minix, mknod, mkswap, +mnc, more, mount, mt, mv, nslookup, ping, poweroff, printf, ps, pwd, reboot, +rm, rmdir, rmmod, sed, sh, sfdisk, sleep, sort, sync, syslogd, swapon, swapoff, +tail, tar, test, tee, touch, tr, true, tty, umount, uname, uniq, update, +uptime, usleep, wc, whoami, yes, zcat, [ =head1 COMMON OPTIONS @@ -82,6 +81,26 @@ Example: ------------------------------- +=item chgrp + +Usage: chgrp [OPTION]... GROUP FILE... + +Change the group membership of each FILE to GROUP. + +Options: + + -R change files and directories recursively + +Example: + + $ ls -l /tmp/foo + -r--r--r-- 1 andersen andersen 0 Apr 12 18:25 /tmp/foo + $ chgrp root /tmp/foo + $ ls -l /tmp/foo + -r--r--r-- 1 andersen root 0 Apr 12 18:25 /tmp/foo + +------------------------------- + =item chmod Usage: chmod [B<-R>] MODE[,MODE]... FILE... @@ -165,26 +184,6 @@ Example: ------------------------------- -=item chgrp - -Usage: chgrp [OPTION]... GROUP FILE... - -Change the group membership of each FILE to GROUP. - -Options: - - -R change files and directories recursively - -Example: - - $ ls -l /tmp/foo - -r--r--r-- 1 andersen andersen 0 Apr 12 18:25 /tmp/foo - $ chgrp root /tmp/foo - $ ls -l /tmp/foo - -r--r--r-- 1 andersen root 0 Apr 12 18:25 /tmp/foo - -------------------------------- - =item chroot Usage: chroot NEWROOT [COMMAND...] @@ -391,6 +390,14 @@ Example: =item false +Returns an exit code of FALSE (1) + +Example: + + $ false + $ echo $? + 1 + ------------------------------- =item fbset @@ -465,7 +472,7 @@ Displays the amount of free and used memory in the system. Example: $ free - total used free shared buffers + total used free shared buffers Mem: 257628 248724 8904 59644 93124 Swap: 128516 8404 120112 Total: 386144 257128 129016 @@ -510,22 +517,6 @@ OPTIONS: ------------------------------- -=item mkfs.minix - -Usage: mkfs.minix [B<-c> | B<-l> filename] [B<-nXX>] [B<-iXX>] /dev/name [blocks] - -Make a MINIX filesystem. - -OPTIONS: - - -c Check the device for bad blocks - -n [14|30] Specify the maximum length of filenames - -i Specify the number of inodes for the filesystem - -l FILENAME Read the bad blocks list from FILENAME - -v Make a Minix version 2 filesystem - -------------------------------- - =item grep Usage: grep [OPTIONS]... PATTERN [FILE]... @@ -552,16 +543,52 @@ Example: =item gunzip +Usage: gunzip [OPTION]... FILE + +Uncompress FILE (or standard input if FILE is '-'). + +Options: + + -c Write output to standard output + -t Test compressed file integrity + +Example: + + $ ls -la /tmp/busybox* + -rw-rw-r-- 1 andersen andersen 557009 Apr 11 10:55 /tmp/busybox-0.43.tar.gz + $ gunzip /tmp/busybox-0.43.tar.gz + $ ls -la /tmp/busybox* + -rw-rw-r-- 1 andersen andersen 1761280 Apr 14 17:47 /tmp/busybox-0.43.tar ------------------------------- =item gzip +Usage: gzip [OPTION]... FILE + +Compress FILE with maximum compression. +When FILE is '-', reads standard input. Implies -c. + +Options: + + -c Write output to standard output instead of FILE.gz + +Example: + + $ ls -la /tmp/busybox* + -rw-rw-r-- 1 andersen andersen 1761280 Apr 14 17:47 /tmp/busybox-0.43.tar + $ gzip /tmp/busybox-0.43.tar + $ ls -la /tmp/busybox* + -rw-rw-r-- 1 andersen andersen 554058 Apr 14 17:49 /tmp/busybox-0.43.tar.gz + ------------------------------- =item halt +Usage: halt + +This comand halts the system. ------------------------------- @@ -587,6 +614,11 @@ Example: =item hostid +Usage: hostid + +Prints out a unique 32-bit identifier for the current +machine. The 32-bit identifier is intended to be unique +among all UNIX systems in existence. ------------------------------- @@ -613,6 +645,94 @@ Example: =item init +Usage: init + +Init is the parent of all processes. + +This version of init is designed to be run only by the kernel. + +BusyBox init doesn't support multiple runlevels. The runlevels field of +the /etc/inittab file is completely ignored by BusyBox init. If you want +runlevels, use sysvinit. + +BusyBox init works just fine without an inittab. If no inittab is found, +it has the following default behavior: + + ::sysinit:/etc/init.d/rcS + ::askfirst:/bin/sh + +if it detects that /dev/console is _not_ a serial console, it will also run: + + tty2::askfirst:/bin/sh + +If you choose to use an /etc/inittab file, the inittab entry format is as follows: + + ::: + + : + + WARNING: This field has a non-traditional meaning for BusyBox init! + The id field is used by BusyBox init to specify the controlling tty for + the specified process to run on. The contents of this field are + appended to "/dev/" and used as-is. There is no need for this field to + be unique, although if it isn't you may have strange results. If this + field is left blank, it is completely ignored. Also note that if + BusyBox detects that a serial console is in use, then all entries + containing non-empty id fields will _not_ be run. BusyBox init does + nothing with utmp. We don't need no stinkin' utmp. + + : + + The runlevels field is completely ignored. + + : + + Valid actions include: sysinit, respawn, askfirst, wait, + once, and ctrlaltdel. + + askfirst acts just like respawn, but before running the specified + process it displays the line "Please press Enter to activate this + console." and then waits for the user to press enter before starting + the specified process. + + Unrecognised actions (like initdefault) will cause init to emit + an error message, and then go along with its business. + + : + + Specifies the process to be executed and it's command line. + + +Example /etc/inittab file: + + # This is run first except when booting in single-user mode. + # + ::sysinit:/etc/init.d/rcS + + # /bin/sh invocations on selected ttys + # + # Start an "askfirst" shell on the console (whatever that may be) + ::askfirst:/bin/sh + # Start an "askfirst" shell on /dev/tty2 + tty2::askfirst:/bin/sh + + # /sbin/getty invocations for selected ttys + # + tty4::respawn:/sbin/getty 38400 tty4 + tty5::respawn:/sbin/getty 38400 tty5 + + + # Example of how to put a getty on a serial line (for a terminal) + # + #ttyS0::respawn:/sbin/getty -L ttyS0 9600 vt100 + #ttyS1::respawn:/sbin/getty -L ttyS1 9600 vt100 + # + # Example how to put a getty on a modem line. + #ttyS2::respawn:/sbin/getty -x0 -s 57600 ttyS2 + + # Stuff to do before rebooting + ::ctrlaltdel:/bin/umount -a -r > /dev/null 2>&1 + ::ctrlaltdel:/sbin/swapoff -a > /dev/null 2>&1 ------------------------------- @@ -641,10 +761,28 @@ Example: =item killall +Usage: killall [-signal] process-name [process-name ...] + +Send a signal (default is SIGTERM) to the specified process(es). + +Options: + -l List all signal names and numbers. + +Example: + + $ killall apache + ------------------------------- =item length +Usage: length string + +Prints out the length of the specified string. + +Example: + $ length "Hello" + 5 ------------------------------- @@ -668,14 +806,52 @@ Example: =item loadacm +FIXME + ------------------------------- =item loadfont +FIXME + ------------------------------- =item loadkmap +FIXME + +------------------------------- + +=item logger + +Usage: logger [OPTION]... [MESSAGE] + +Write MESSAGE to the system log. If MESSAGE is '-', log stdin. + +Options: + + -s Log to stderr as well as the system log. + -t Log using the specified tag (defaults to user name). + -p Enter the message with the specified priority. + This may be numerical or a ``facility.level'' pair. + +Example: + + $ logger "hello" + +------------------------------- + +=item logname + +Usage: logname + +Print the name of the current user. + +Example: + + $ logname + root + ------------------------------- =item ls @@ -705,16 +881,53 @@ Options: Usage: lsmod -Shows information about all loaded modules. +Shows a list of all currently loaded kernel modules. ------------------------------- =item makedevs +Usage: makedevs NAME TYPE MAJOR MINOR FIRST LAST [s] + +Creates a range of block or character special files + +TYPEs include: + + b: Make a block (buffered) device. + c or u: Make a character (un-buffered) device. + p: Make a named pipe. MAJOR and MINOR are ignored for named pipes. + +FIRST specifies the number appended to NAME to create the first device. +LAST specifies the number of the last item that should be created. +If 's' is the last argument, the base device is created as well. + +Example: + + $ makedevs /dev/ttyS c 4 66 2 63 + [creates ttyS2-ttyS63] + $ makedevs /dev/hda b 3 0 0 8 s + [creates hda,hda1-hda8] + ------------------------------- =item math +Usage: math expression ... + +This is a Tiny RPN calculator that understands the +following operations: +, -, /, *, and, or, not, eor. + +Example: + + $ math 2 2 add + 4 + $ math 8 8 \* 2 2 + / + 16 + $ math 0 1 and + 0 + $ math 0 1 or + 1 + ------------------------------- =item mkdir @@ -741,23 +954,49 @@ Example: =item mkfifo +Usage: mkfifo [OPTIONS] name + +Creates a named pipe (identical to 'mknod name p') + +Options: + -m create the pipe using the specified mode (default a=rw) + +------------------------------- + +=item mkfs.minix + +Usage: mkfs.minix [B<-c> | B<-l> filename] [B<-nXX>] [B<-iXX>] /dev/name [blocks] + +Make a MINIX filesystem. + +OPTIONS: + + -c Check the device for bad blocks + -n [14|30] Specify the maximum length of filenames + -i Specify the number of inodes for the filesystem + -l FILENAME Read the bad blocks list from FILENAME + -v Make a Minix version 2 filesystem + ------------------------------- =item mknod -Usage: mknod NAME TYPE MAJOR MINOR +Usage: mknod [OPTIONS] NAME TYPE MAJOR MINOR -Make block or character special files. +Create a special file (block, character, or pipe). -TYPEs include: +Options: + -m create the special file using the specified mode (default a=rw) - b: Make a block (buffered) device. - c or u: Make a character (un-buffered) device. - p: Make a named pipe. Major and minor are ignored for named pipes. +TYPEs include: + b: Make a block (buffered) device. + c or u: Make a character (un-buffered) device. + p: Make a named pipe. MAJOR and MINOR are ignored for named pipes. Example: $ mknod /dev/fd0 b 2 0 + $ mknod -m 644 /tmp/pipe p ------------------------------- @@ -778,6 +1017,21 @@ Options: =item mnc +Usage: mnc [IP] [port] + +mini-netcat opens a pipe to IP:port + +Example: + + $ mnc foobar.somedomain.com 25 + 220 foobar ESMTP Exim 3.12 #1 Sat, 15 Apr 2000 00:03:02 -0600 + help + 214-Commands supported: + 214- HELO EHLO MAIL RCPT DATA AUTH + 214 NOOP QUIT RSET HELP + quit + 221 foobar closing connection + ------------------------------- =item more @@ -830,6 +1084,10 @@ Example: =item mt +Usage: mt [-f device] opcode value + +Control magnetic tape drive operation + ------------------------------- =item mv @@ -848,9 +1106,18 @@ Example: =item nslookup -------------------------------- +Usage: nslookup [HOST] -=item poweroff +Queries the nameserver for the IP address of the given HOST + +Example: + + $ nslookup localhost + Server: default + Address: default + + Name: debian + Address: 127.0.0.1 ------------------------------- @@ -877,116 +1144,478 @@ Example: ------------------------------- +=item poweroff + +Shuts down the system, and requests that the kernel turn off power upon halting. + +------------------------------- + =item printf +Usage: printf format [argument...] + +Formats and prints the given data in a manner similar to the C printf command. + +Example: + + $ printf "Val=%d\n" 5 + Val=5 + ------------------------------- =item ps +Usage: ps + +Report process status + +This version of ps accepts no options. + +Example: + + $ ps + PID Uid Gid State Command + 1 root root S init + 2 root root S [kflushd] + 3 root root S [kupdate] + 4 root root S [kpiod] + 5 root root S [kswapd] + 742 andersen andersen S [bash] + 743 andersen andersen S -bash + 745 root root S [getty] + 2990 andersen andersen R ps + ------------------------------- =item pwd +Prints the full filename of the current working directory. + +Example: + + $ pwd + /root + ------------------------------- =item reboot +Instructs the kernel to reboot the system. + ------------------------------- =item rm +Usage: rm [OPTION]... FILE... + +Remove (unlink) the FILE(s). + +Options: + + -f remove existing destinations, never prompt + -r or -R remove the contents of directories recursively + +Example: + + $ rm -rf /tmp/foo + ------------------------------- -=item syslogd +=item rmdir + +Usage: rmdir [OPTION]... DIRECTORY... + +Remove the DIRECTORY(ies), if they are empty. + +Example: + + # rmdir /tmp/foo ------------------------------- -=item logger +=item rmmod + +Usage: rmmod [OPTION]... [MODULE]... + +Unloads the specified kernel modules from the kernel. + +Options: + + -a Try to remove all unused kernel modules. + +Example: + + $ rmmod tulip ------------------------------- -=item logname +=item sed + +Usage: sed [-n] -e script [file...] + +Allowed sed scripts come in the following form: + + 'ADDR [!] COMMAND' + + where address ADDR can be: + NUMBER Match specified line number + $ Match last line + /REGEXP/ Match specified regexp + (! inverts the meaning of the match) + + and COMMAND can be: + s/regexp/replacement/[igp] + which attempt to match regexp against the pattern space + and if successful replaces the matched portion with replacement. + + aTEXT + which appends TEXT after the pattern space + +Options: + + -e add the script to the commands to be executed + -n suppress automatic printing of pattern space + +This version of sed matches full regular expresions. + +Example: + + $ echo "foo" | sed -e 's/f[a-zA-Z]o/bar/g' + bar + +------------------------------- + +=item sh + +FIXME + +------------------------------- + +=item sfdisk + +Usage: sfdisk [options] device ... + +device: something like /dev/hda or /dev/sda + +useful options: + + -s [or --show-size]: list size of a partition + -c [or --id]: print or change partition Id + -l [or --list]: list partitions of each device + -d [or --dump]: idem, but in a format suitable for later input + -i [or --increment]: number cylinders etc. from 1 instead of from 0 + -uS, -uB, -uC, -uM: accept/report in units of sectors/blocks/cylinders/MB + -T [or --list-types]:list the known partition types + -D [or --DOS]: for DOS-compatibility: waste a little space + -R [or --re-read]: make kernel reread partition table + -N# : change only the partition with number # + -n : do not actually write to disk + -O file : save the sectors that will be overwritten to file + -I file : restore these sectors again + -v [or --version]: print version + -? [or --help]: print this message + +dangerous options: + + -g [or --show-geometry]: print the kernel's idea of the geometry + -x [or --show-extended]: also list extended partitions on output + + or expect descriptors for them on input + -L [or --Linux]: do not complain about things irrelevant for Linux + -q [or --quiet]: suppress warning messages + You can override the detected geometry using: + -C# [or --cylinders #]:set the number of cylinders to use + -H# [or --heads #]: set the number of heads to use + -S# [or --sectors #]: set the number of sectors to use + +You can disable all consistency checking with: + + -f [or --force]: do what I say, even if it is stupid + +------------------------------- + +=item sleep + +Usage: sleep N + +Pause for N seconds. + +Example: + + $ sleep 2 + [2 second delay results] + +------------------------------- + +=item sort + +Usage: sort [-n] [-r] [FILE]... + +Sorts lines of text in the specified files + +Example: + + $ echo -e "e\nf\nb\nd\nc\na" | sort + a + b + c + d + e + f + +------------------------------- + +=item sync + +Usage: sync + +Write all buffered filesystem blocks to disk. + +------------------------------- + +=item syslogd + +Usage: syslogd [OPTION]... + +Linux system and kernel (provides klogd) logging utility. +Note that this version of syslogd/klogd ignores /etc/syslog.conf. + +Options: + + -m Change the mark timestamp interval. default=20min. 0=off + -n Do not fork into the background (for when run by init) + -K Do not start up the klogd process (by default syslogd spawns klogd). + -O Specify an alternate log file. default=/var/log/messages ------------------------------- =item swapon +Usage: swapon [OPTION] [device] + +Start swapping virtual memory pages on the given device. + +Options: + + -a Start swapping on all swap devices + ------------------------------- =item swapoff +Usage: swapoff [OPTION] [device] + +Stop swapping virtual memory pages on the given device. + +Options: + + -a Stop swapping on all swap devices + ------------------------------- =item tail +Usage: tail [OPTION] [FILE]... + +Print last 10 lines of each FILE to standard output. +With more than one FILE, precede each with a header giving the +file name. With no FILE, or when FILE is -, read standard input. + +Options: + + -n NUM Print last NUM lines instead of first 10 + -f Output data as the file grows. This version + of 'tail -f' supports only one file at a time. + +Example: + + $ tail -n 1 /etc/resolv.conf + nameserver 10.0.0.1 + ------------------------------- =item tar +Usage: tar -[cxtvO] [--exclude File] [-f tarFile] [FILE] ... + +Create, extract, or list files from a tar file. Note that +this version of tar treats hard links as separate files. + +Main operation mode: + + c create + x extract + t list + +File selection: + + f name of tarfile or "-" for stdin + O extract to stdout + --exclude file to exclude + +Informative output: + + v verbosely list files processed + +Example: + + $ zcat /tmp/tarball.tar.gz | tar -xf - + $ tar -cf /tmp/tarball.tar /usr/local + ------------------------------- =item test, [ +Usage: test EXPRESSION +or [ EXPRESSION ] + +Checks file types and compares values returning an exit +code determined by the value of EXPRESSION. + +Example: + + $ test 1 -eq 2 + $ echo $? + 1 + $ test 1 -eq 1 + $ echo $? + 0 + $ [ -d /etc ] + $ echo $? + 0 + $ [ -d /junk ] + $ echo $? + 1 + ------------------------------- =item tee +Usage: tee [OPTION]... [FILE]... + +Copy standard input to each FILE, and also to standard output. + +Options: + + -a append to the given FILEs, do not overwrite + +Example: + + $ echo "Hello" | tee /tmp/foo + $ cat /tmp/foo + Hello + ------------------------------- =item touch +Usage: touch [-c] file [file ...] + +Update the last-modified date on (or create) the selected file[s]. + +Example: + + $ ls -l /tmp/foo + /bin/ls: /tmp/foo: No such file or directory + $ touch /tmp/foo + $ ls -l /tmp/foo + -rw-rw-r-- 1 andersen andersen 0 Apr 15 01:11 /tmp/foo + ------------------------------- =item tr +Usage: tr [-csu] string1 string2 + tr [-cu] -d string1 + tr [-cu] -s string1 + tr [-cu] -ds string1 string2 + +Translate, squeeze, and/or delete characters from standard +input, writing to standard output. + +Example: + + $ echo "gdkkn vnqkc" | tr [a-y] [b-z] + hello world + ------------------------------- =item true +Returns an exit code of TRUE (0) + +Example: + + $ true + $ echo $? + 0 + ------------------------------- =item tty +FIXME + ------------------------------- =item umount +FIXME + ------------------------------- =item uname -------------------------------- - -=item uptime +FIXME ------------------------------- =item uniq +FIXME + ------------------------------- =item update +FIXME + +------------------------------- + +=item uptime + +FIXME + ------------------------------- =item usleep +FIXME + ------------------------------- =item wc +FIXME + ------------------------------- =item whoami +FIXME + ------------------------------- =item yes +FIXME + ------------------------------- =item zcat +FIXME + ------------------------------- =back @@ -1046,4 +1675,4 @@ Enrique Zanardi =cut -# $Id: busybox.pod,v 1.9 2000/04/13 23:44:04 beppu Exp $ +# $Id: busybox.pod,v 1.10 2000/04/15 16:34:54 erik Exp $ diff --git a/gzip.c b/gzip.c index 55ec5bc4e..a9d34aeb1 100644 --- a/gzip.c +++ b/gzip.c @@ -41,7 +41,7 @@ static const char gzip_usage[] = "gzip [OPTION]... FILE\n\n" "Compress FILE with maximum compression.\n" - "When FILE is -, reads standard input. Implies -c.\n\n" + "When FILE is '-', reads standard input. Implies -c.\n\n" "Options:\n" "\t-c\tWrite output to standard output instead of FILE.gz\n"; diff --git a/makedevs.c b/makedevs.c index 5948bacc8..c8206e020 100644 --- a/makedevs.c +++ b/makedevs.c @@ -17,10 +17,18 @@ #include static const char makedevs_usage[] = - "makedevs 0.01 -- Create an entire range of device files\n\n" - "\tmakedevs /dev/ttyS c 4 64 0 63 (ttyS0-ttyS63)\n" - - "\tmakedevs /dev/hda b 3 0 0 8 s (hda,hda1-hda8)\n"; + "makedevs NAME TYPE MAJOR MINOR FIRST LAST [s]\n\n" + "Creates a range of block or character special files\n\n" + "TYPEs include:\n" + "\tb:\tMake a block (buffered) device.\n" + "\tc or u:\tMake a character (un-buffered) device.\n" + "\tp:\tMake a named pipe. MAJOR and MINOR are ignored for named pipes.\n\n" + "FIRST specifies the number appended to NAME to create the first device.\n" + "LAST specifies the number of the last item that should be created.\n" + "If 's' is the last argument, the base device is created as well.\n\n" + "For example:\n" + "\tmakedevs /dev/ttyS c 4 66 2 63 -> ttyS2-ttyS63\n" + "\tmakedevs /dev/hda b 3 0 0 8 s -> hda,hda1-hda8\n"; int makedevs_main(int argc, char **argv) { @@ -38,6 +46,9 @@ int makedevs_main(int argc, char **argv) char devname[255]; char buf[255]; + if (argc < 7 || *argv[1]=='-') + usage(makedevs_usage); + switch (type[0]) { case 'c': mode = S_IFCHR; diff --git a/math.c b/math.c index 75b4cdeb5..3b459f62e 100644 --- a/math.c +++ b/math.c @@ -7,7 +7,10 @@ /* Tiny RPN calculator, because "expr" didn't give me bitwise operations. */ -static const char math_usage[] = "math expression ..."; +static const char math_usage[] = "math expression ...\n\n" + "This is a Tiny RPN calculator that understands the\n" + "following operations: +, -, /, *, and, or, not, eor.\n" + "i.e. 'math 2 2 add' -> 4, and 'math 8 8 \\* 2 2 + /' -> 16\n"; static double stack[100]; static unsigned int pointer; @@ -85,14 +88,14 @@ struct op { }; static const struct op operators[] = { - {"add", add}, + {"+", add}, + {"-", sub}, + {"*", mul}, + {"/", divide}, {"and", and}, - {"div", divide}, - {"eor", eor}, - {"mul", mul}, - {"not", not}, {"or", or}, - {"sub", sub}, + {"not", not}, + {"eor", eor}, {0, 0} }; @@ -127,11 +130,13 @@ static void stack_machine(const char *argument) int math_main(int argc, char **argv) { + if (argc < 1 || *argv[1]=='-') + usage(math_usage); while (argc >= 2) { stack_machine(argv[1]); argv++; argc--; } stack_machine(0); - return 0; + exit( TRUE); } diff --git a/miscutils/makedevs.c b/miscutils/makedevs.c index 5948bacc8..c8206e020 100644 --- a/miscutils/makedevs.c +++ b/miscutils/makedevs.c @@ -17,10 +17,18 @@ #include static const char makedevs_usage[] = - "makedevs 0.01 -- Create an entire range of device files\n\n" - "\tmakedevs /dev/ttyS c 4 64 0 63 (ttyS0-ttyS63)\n" - - "\tmakedevs /dev/hda b 3 0 0 8 s (hda,hda1-hda8)\n"; + "makedevs NAME TYPE MAJOR MINOR FIRST LAST [s]\n\n" + "Creates a range of block or character special files\n\n" + "TYPEs include:\n" + "\tb:\tMake a block (buffered) device.\n" + "\tc or u:\tMake a character (un-buffered) device.\n" + "\tp:\tMake a named pipe. MAJOR and MINOR are ignored for named pipes.\n\n" + "FIRST specifies the number appended to NAME to create the first device.\n" + "LAST specifies the number of the last item that should be created.\n" + "If 's' is the last argument, the base device is created as well.\n\n" + "For example:\n" + "\tmakedevs /dev/ttyS c 4 66 2 63 -> ttyS2-ttyS63\n" + "\tmakedevs /dev/hda b 3 0 0 8 s -> hda,hda1-hda8\n"; int makedevs_main(int argc, char **argv) { @@ -38,6 +46,9 @@ int makedevs_main(int argc, char **argv) char devname[255]; char buf[255]; + if (argc < 7 || *argv[1]=='-') + usage(makedevs_usage); + switch (type[0]) { case 'c': mode = S_IFCHR; diff --git a/miscutils/mt.c b/miscutils/mt.c index 9791b64b2..cf20d1711 100644 --- a/miscutils/mt.c +++ b/miscutils/mt.c @@ -4,7 +4,8 @@ #include #include -static const char mt_usage[] = "mt [-f device] opcode value\n"; +static const char mt_usage[] = "mt [-f device] opcode value\n\n" + "Control magnetic tape drive operation\n"; struct mt_opcodes { char *name; @@ -56,6 +57,10 @@ extern int mt_main(int argc, char **argv) const struct mt_opcodes *code = opcodes; struct mtop op; int fd; + + if ((argc != 2 && argc != 3) || **(argv + 1) == '-') { + usage(mt_usage); + } if (strcmp(argv[1], "-f") == 0) { if (argc < 4) { @@ -74,7 +79,7 @@ extern int mt_main(int argc, char **argv) if (code->name == 0) { fprintf(stderr, "mt: unrecognized opcode %s.\n", argv[1]); - return (FALSE); + exit (FALSE); } op.mt_op = code->value; @@ -85,13 +90,13 @@ extern int mt_main(int argc, char **argv) if ((fd = open(file, O_RDONLY, 0)) < 0) { perror(file); - return (FALSE); + exit (FALSE); } if (ioctl(fd, MTIOCTOP, &op) != 0) { perror(file); - return (FALSE); + exit (FALSE); } - return (TRUE); + exit (TRUE); } diff --git a/mkfifo.c b/mkfifo.c index c74402d4c..b273df046 100644 --- a/mkfifo.c +++ b/mkfifo.c @@ -27,10 +27,10 @@ #include static const char mkfifo_usage[] = "mkfifo [OPTIONS] name\n\n" - "Create the named fifo\n\n" + "Creates a named pipe (identical to 'mknod name p')\n\n" "Options:\n" - "\t-m\tcreate the fifo with the specified mode; default = a=rw-umask\n"; + "\t-m\tcreate the pipe using the specified mode (default a=rw)\n"; extern int mkfifo_main(int argc, char **argv) { diff --git a/mknod.c b/mknod.c index 40f508d33..0c93df64d 100644 --- a/mknod.c +++ b/mknod.c @@ -28,23 +28,47 @@ #include #include -static const char mknod_usage[] = "mknod NAME TYPE MAJOR MINOR\n\n" - "Make block or character special files.\n\n" +static const char mknod_usage[] = "mknod [OPTIONS] NAME TYPE MAJOR MINOR\n\n" + "Create a special file (block, character, or pipe).\n\n" + "Options:\n" + "\t-m\tcreate the special file using the specified mode (default a=rw)\n\n" "TYPEs include:\n" "\tb:\tMake a block (buffered) device.\n" - "\tc or u:\tMake a character (un-buffered) device.\n" - "\tp:\tMake a named pipe. Major and minor are ignored for named pipes.\n"; + "\tp:\tMake a named pipe. MAJOR and MINOR are ignored for named pipes.\n"; int mknod_main(int argc, char **argv) { + char *thisarg; mode_t mode = 0; + mode_t perm = 0666; dev_t dev = 0; - if (argc != 5 || **(argv + 1) == '-') { + argc--; + argv++; + + /* Parse any options */ + while (argc > 1) { + if (**argv != '-') + break; + thisarg = *argv; + thisarg++; + switch (*thisarg) { + case 'm': + argc--; + argv++; + parse_mode(*argv, &perm); + break; + default: + usage(mknod_usage); + } + argc--; + argv++; + } + if (argc != 4 && argc != 2) { usage(mknod_usage); } - switch (argv[2][0]) { + switch (argv[1][0]) { case 'c': case 'u': mode = S_IFCHR; @@ -54,23 +78,22 @@ int mknod_main(int argc, char **argv) break; case 'p': mode = S_IFIFO; + if (argc!=2) { + usage(mknod_usage); + } break; default: usage(mknod_usage); } if (mode == S_IFCHR || mode == S_IFBLK) { - dev = (atoi(argv[3]) << 8) | atoi(argv[4]); - if (argc != 5) { - usage(mknod_usage); - } + dev = (atoi(argv[2]) << 8) | atoi(argv[1]); } - mode |= 0666; + mode |= perm; - if (mknod(argv[1], mode, dev) != 0) { - perror(argv[1]); - exit (FALSE); - } + if (mknod(argv[0], mode, dev) != 0) + fatalError("%s: %s\n", argv[0], strerror(errno)); exit (TRUE); } + diff --git a/mnc.c b/mnc.c index 54cfdc602..60c18a91a 100644 --- a/mnc.c +++ b/mnc.c @@ -56,11 +56,11 @@ int mnc_main(int argc, char **argv) fd_set readfds, testfds; - if (argc <= 1 || **(argv + 1) == '-') { - usage(mnc_usage); - } argc--; argv++; + if (argc < 2 || **(argv + 1) == '-') { + usage(mnc_usage); + } sfd = socket(AF_INET, SOCK_STREAM, 0); diff --git a/mt.c b/mt.c index 9791b64b2..cf20d1711 100644 --- a/mt.c +++ b/mt.c @@ -4,7 +4,8 @@ #include #include -static const char mt_usage[] = "mt [-f device] opcode value\n"; +static const char mt_usage[] = "mt [-f device] opcode value\n\n" + "Control magnetic tape drive operation\n"; struct mt_opcodes { char *name; @@ -56,6 +57,10 @@ extern int mt_main(int argc, char **argv) const struct mt_opcodes *code = opcodes; struct mtop op; int fd; + + if ((argc != 2 && argc != 3) || **(argv + 1) == '-') { + usage(mt_usage); + } if (strcmp(argv[1], "-f") == 0) { if (argc < 4) { @@ -74,7 +79,7 @@ extern int mt_main(int argc, char **argv) if (code->name == 0) { fprintf(stderr, "mt: unrecognized opcode %s.\n", argv[1]); - return (FALSE); + exit (FALSE); } op.mt_op = code->value; @@ -85,13 +90,13 @@ extern int mt_main(int argc, char **argv) if ((fd = open(file, O_RDONLY, 0)) < 0) { perror(file); - return (FALSE); + exit (FALSE); } if (ioctl(fd, MTIOCTOP, &op) != 0) { perror(file); - return (FALSE); + exit (FALSE); } - return (TRUE); + exit (TRUE); } diff --git a/networking/nslookup.c b/networking/nslookup.c index 15019e935..3223b3b63 100644 --- a/networking/nslookup.c +++ b/networking/nslookup.c @@ -41,7 +41,7 @@ | + find out how the real nslookup gets the default name server */ -static const char nslookup_usage[] = "nslookup [HOST]\n\n"; +static const char nslookup_usage[] = "nslookup [HOST]\n\nQueries the nameserver for the IP address of the given HOST\n"; /* I have to see how the real nslookup does this. @@ -50,8 +50,8 @@ static const char nslookup_usage[] = "nslookup [HOST]\n\n"; */ static void server_fprint(FILE * dst) { - fprintf(dst, "Server: %s\n", "something"); - fprintf(dst, "Address: %s\n\n", "something"); + fprintf(dst, "Server: %s\n", "default"); + fprintf(dst, "Address: %s\n\n", "default"); } /* only works for IPv4 */ @@ -96,9 +96,9 @@ static int addr_list_fprint(char **h_addr_list, FILE * dst) { int i, j; char *addr_string = (h_addr_list[1]) - ? "Addresses" : "Address"; + ? "Addresses: " : "Address: "; - fprintf(dst, "%s: ", addr_string); + fprintf(dst, "%s ", addr_string); for (i = 0, j = 0; h_addr_list[i]; i++, j++) { addr_fprint(h_addr_list[i], dst); @@ -132,7 +132,7 @@ static struct hostent *gethostbyaddr_wrapper(const char *address) static struct hostent *hostent_fprint(struct hostent *host, FILE * dst) { if (host) { - fprintf(dst, "Name: %s\n", host->h_name); + fprintf(dst, "Name: %s\n", host->h_name); addr_list_fprint(host->h_addr_list, dst); } else { fprintf(dst, "*** %s\n", hstrerror(h_errno)); @@ -159,7 +159,7 @@ int nslookup_main(int argc, char **argv) { struct hostent *host; - if (argc < 2) { + if (argc < 2 || *argv[1]=='-') { usage(nslookup_usage); } @@ -170,7 +170,7 @@ int nslookup_main(int argc, char **argv) host = gethostbyname(argv[1]); } hostent_fprint(host, stdout); - return 0; + exit( TRUE); } -/* $Id: nslookup.c,v 1.6 2000/04/13 01:18:56 erik Exp $ */ +/* $Id: nslookup.c,v 1.7 2000/04/15 16:34:54 erik Exp $ */ diff --git a/nslookup.c b/nslookup.c index 15019e935..3223b3b63 100644 --- a/nslookup.c +++ b/nslookup.c @@ -41,7 +41,7 @@ | + find out how the real nslookup gets the default name server */ -static const char nslookup_usage[] = "nslookup [HOST]\n\n"; +static const char nslookup_usage[] = "nslookup [HOST]\n\nQueries the nameserver for the IP address of the given HOST\n"; /* I have to see how the real nslookup does this. @@ -50,8 +50,8 @@ static const char nslookup_usage[] = "nslookup [HOST]\n\n"; */ static void server_fprint(FILE * dst) { - fprintf(dst, "Server: %s\n", "something"); - fprintf(dst, "Address: %s\n\n", "something"); + fprintf(dst, "Server: %s\n", "default"); + fprintf(dst, "Address: %s\n\n", "default"); } /* only works for IPv4 */ @@ -96,9 +96,9 @@ static int addr_list_fprint(char **h_addr_list, FILE * dst) { int i, j; char *addr_string = (h_addr_list[1]) - ? "Addresses" : "Address"; + ? "Addresses: " : "Address: "; - fprintf(dst, "%s: ", addr_string); + fprintf(dst, "%s ", addr_string); for (i = 0, j = 0; h_addr_list[i]; i++, j++) { addr_fprint(h_addr_list[i], dst); @@ -132,7 +132,7 @@ static struct hostent *gethostbyaddr_wrapper(const char *address) static struct hostent *hostent_fprint(struct hostent *host, FILE * dst) { if (host) { - fprintf(dst, "Name: %s\n", host->h_name); + fprintf(dst, "Name: %s\n", host->h_name); addr_list_fprint(host->h_addr_list, dst); } else { fprintf(dst, "*** %s\n", hstrerror(h_errno)); @@ -159,7 +159,7 @@ int nslookup_main(int argc, char **argv) { struct hostent *host; - if (argc < 2) { + if (argc < 2 || *argv[1]=='-') { usage(nslookup_usage); } @@ -170,7 +170,7 @@ int nslookup_main(int argc, char **argv) host = gethostbyname(argv[1]); } hostent_fprint(host, stdout); - return 0; + exit( TRUE); } -/* $Id: nslookup.c,v 1.6 2000/04/13 01:18:56 erik Exp $ */ +/* $Id: nslookup.c,v 1.7 2000/04/15 16:34:54 erik Exp $ */ diff --git a/printf.c b/printf.c index 41ab2e442..bfe408175 100644 --- a/printf.c +++ b/printf.c @@ -139,7 +139,7 @@ static void verify __P((char *s, char *end)); /* The value to return to the calling program. */ static int exit_status; -static const char printf_usage[] = "printf format [argument...]\n"; +static const char printf_usage[] = "printf format [argument...]\n\nFormats and prints the given data.\n"; int printf_main(int argc, char **argv) { diff --git a/sort.c b/sort.c index 6ee6f207e..4301f4303 100644 --- a/sort.c +++ b/sort.c @@ -33,7 +33,7 @@ static const char sort_usage[] = "sort [-n]" #ifdef BB_FEATURE_SORT_REVERSE " [-r]" #endif -" [FILE]...\n\n"; +" [FILE]...\n\nSorts lines of text in the specified files\n"; #ifdef BB_FEATURE_SORT_REVERSE #define APPLY_REVERSE(x) (reverse ? -(x) : (x)) @@ -320,4 +320,4 @@ int sort_main(int argc, char **argv) exit(0); } -/* $Id: sort.c,v 1.13 2000/04/13 01:18:56 erik Exp $ */ +/* $Id: sort.c,v 1.14 2000/04/15 16:34:54 erik Exp $ */ diff --git a/test.c b/test.c index 85d06a83a..0ed777194 100644 --- a/test.c +++ b/test.c @@ -1,6 +1,6 @@ /* vi: set sw=4 ts=4: */ /* - * echo implementation for busybox + * test implementation for busybox * * Copyright (c) by a whole pile of folks: * @@ -185,6 +185,12 @@ test_main(int argc, char** argv) fatalError("missing ]"); argv[argc] = NULL; } + if (strcmp(argv[1], "--help") == 0) { + usage("test EXPRESSION\n" + "or [ EXPRESSION ]\n\n" + "Checks file types and compares values returning an exit\n" + "code determined by the value of EXPRESSION.\n"); + } /* Implement special cases from POSIX.2, section 4.62.4 */ switch (argc) { diff --git a/tr.c b/tr.c index 3bfa48080..b631b0065 100644 --- a/tr.c +++ b/tr.c @@ -44,7 +44,7 @@ static char sccsid[] = "@(#)tr.c 8.2 (Berkeley) 5/4/95"; #endif static const char rcsid[] = - "$Id: tr.c,v 1.2 2000/03/21 22:32:57 erik Exp $"; + "$Id: tr.c,v 1.3 2000/04/15 16:34:54 erik Exp $"; #endif /* not lint */ #endif /* #if 0 */ @@ -138,12 +138,12 @@ int cflag; static void tr_usage() { - (void) fprintf(stderr, "%s\n%s\n%s\n%s\n", - "usage: tr [-csu] string1 string2", - " tr [-cu] -d string1", - " tr [-cu] -s string1", - " tr [-cu] -ds string1 string2"); - exit(1); + usage( "\ttr [-csu] string1 string2\n" + "\ttr [-cu] -d string1\n" + "\ttr [-cu] -s string1\n" + "\ttr [-cu] -ds string1 string2\n\n" + "Translate, squeeze, and/or delete characters from standard\n" + "input, writing to standard output.\n"); } -- 2.25.1