More documentation updates, and minor fixes to make things sync

up with the docs.
 -Erik
This commit is contained in:
Erik Andersen 2000-04-15 16:34:54 +00:00
parent 95c1c1e05f
commit 5e1189e187
27 changed files with 968 additions and 238 deletions

5
TODO
View File

@ -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'

View File

@ -44,15 +44,15 @@ static const struct Applet applets[] = {
#ifdef BB_CAT
{"cat", cat_main, _BB_DIR_BIN},
#endif
#ifdef BB_CHMOD_CHOWN_CHGRP
{"chgrp", chmod_chown_chgrp_main, _BB_DIR_BIN},
#endif
#ifdef BB_CHMOD_CHOWN_CHGRP
{"chmod", chmod_chown_chgrp_main, _BB_DIR_BIN},
#endif
#ifdef BB_CHMOD_CHOWN_CHGRP
{"chown", chmod_chown_chgrp_main, _BB_DIR_BIN},
#endif
#ifdef BB_CHMOD_CHOWN_CHGRP
{"chgrp", chmod_chown_chgrp_main, _BB_DIR_BIN},
#endif
#ifdef BB_CHROOT
{"chroot", chroot_main, _BB_DIR_SBIN},
#endif
@ -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}
};

View File

@ -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";

View File

@ -44,15 +44,15 @@ static const struct Applet applets[] = {
#ifdef BB_CAT
{"cat", cat_main, _BB_DIR_BIN},
#endif
#ifdef BB_CHMOD_CHOWN_CHGRP
{"chgrp", chmod_chown_chgrp_main, _BB_DIR_BIN},
#endif
#ifdef BB_CHMOD_CHOWN_CHGRP
{"chmod", chmod_chown_chgrp_main, _BB_DIR_BIN},
#endif
#ifdef BB_CHMOD_CHOWN_CHGRP
{"chown", chmod_chown_chgrp_main, _BB_DIR_BIN},
#endif
#ifdef BB_CHMOD_CHOWN_CHGRP
{"chgrp", chmod_chown_chgrp_main, _BB_DIR_BIN},
#endif
#ifdef BB_CHROOT
{"chroot", chroot_main, _BB_DIR_SBIN},
#endif
@ -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}
};

View File

@ -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

View File

@ -27,10 +27,10 @@
#include <errno.h>
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)
{

View File

@ -28,23 +28,47 @@
#include <fcntl.h>
#include <unistd.h>
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);
}
switch (argv[2][0]) {
argc--;
argv++;
}
if (argc != 4 && argc != 2) {
usage(mknod_usage);
}
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);
}

View File

@ -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)
{

View File

@ -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 $ */

View File

@ -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) {

View File

@ -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");
}

View File

@ -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
@ -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:
<id>:<runlevels>:<action>:<process>
<id>:
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.
<runlevels>:
The runlevels field is completely ignored.
<action>:
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.
<process>:
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).
Options:
-m create the special file using the specified mode (default a=rw)
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.
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 rmdir
Usage: rmdir [OPTION]... DIRECTORY...
Remove the DIRECTORY(ies), if they are empty.
Example:
# rmdir /tmp/foo
-------------------------------
=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 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]...
=item logger
Linux system and kernel (provides klogd) logging utility.
Note that this version of syslogd/klogd ignores /etc/syslog.conf.
-------------------------------
Options:
=item logname
-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 <ezanardi@ull.es>
=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 $

2
gzip.c
View File

@ -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";

View File

@ -17,10 +17,18 @@
#include <sys/stat.h>
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;

21
math.c
View File

@ -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);
}

View File

@ -17,10 +17,18 @@
#include <sys/stat.h>
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;

View File

@ -4,7 +4,8 @@
#include <sys/mtio.h>
#include <sys/fcntl.h>
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;
@ -57,6 +58,10 @@ extern int mt_main(int argc, char **argv)
struct mtop op;
int fd;
if ((argc != 2 && argc != 3) || **(argv + 1) == '-') {
usage(mt_usage);
}
if (strcmp(argv[1], "-f") == 0) {
if (argc < 4) {
usage(mt_usage);
@ -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);
}

View File

@ -27,10 +27,10 @@
#include <errno.h>
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)
{

53
mknod.c
View File

@ -28,23 +28,47 @@
#include <fcntl.h>
#include <unistd.h>
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);
}
switch (argv[2][0]) {
argc--;
argv++;
}
if (argc != 4 && argc != 2) {
usage(mknod_usage);
}
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);
}

6
mnc.c
View File

@ -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);

15
mt.c
View File

@ -4,7 +4,8 @@
#include <sys/mtio.h>
#include <sys/fcntl.h>
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;
@ -57,6 +58,10 @@ extern int mt_main(int argc, char **argv)
struct mtop op;
int fd;
if ((argc != 2 && argc != 3) || **(argv + 1) == '-') {
usage(mt_usage);
}
if (strcmp(argv[1], "-f") == 0) {
if (argc < 4) {
usage(mt_usage);
@ -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);
}

View File

@ -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);
@ -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 $ */

View File

@ -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);
@ -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 $ */

View File

@ -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)
{

4
sort.c
View File

@ -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 $ */

8
test.c
View File

@ -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) {

14
tr.c
View File

@ -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");
}