More doc updates for BusyBox, with fixes to apps for bugs revealed

while trying to write docs . :-)
 -Erik
This commit is contained in:
Erik Andersen 2000-04-13 18:49:43 +00:00
parent b4f8606c05
commit 9cf3bfa7c1
30 changed files with 680 additions and 1658 deletions

View File

@ -10,14 +10,14 @@
provides. To enable this, turn on BB_FEATURE_USE_DEVPS_PATCH and provides. To enable this, turn on BB_FEATURE_USE_DEVPS_PATCH and
patch your kernel with the devps patch in the kernel-patches/ patch your kernel with the devps patch in the kernel-patches/
directory. directory.
* Wrote basename, killall, and uptime. * Wrote basename, dirname, killall, and uptime.
* tar has been completely rewritten by me. Both tar creation and * tar has been completely rewritten by me. Both tar creation and
extraction are now well behaved. Costs 7.6k with all optional extraction are now well behaved. Costs 7.6k with all optional
tar features enabled, and 5k for just tar extraction support. tar features enabled, and 5k for just tar extraction support.
* Added freeramdisk, which will free up all memory associated * Added freeramdisk, which will free up all memory associated
with a ram disk. Contributed by Emanuele Caratti <wiz@iol.it> with a ram disk. Contributed by Emanuele Caratti <wiz@iol.it>
and then adjusted a bit by me. and then adjusted a bit by me.
* Added tr and dirname from John Lombardo <john@deltanet.com> * Added tr from John Lombardo <john@deltanet.com>
* Added echo and test (from me). * Added echo and test (from me).
* Added usleep contributed by Nicolas Pitre <nico@cam.org> * Added usleep contributed by Nicolas Pitre <nico@cam.org>
* Several fixes from Pavel Roskin <pavel_roskin@geocities.com>: * Several fixes from Pavel Roskin <pavel_roskin@geocities.com>:

View File

@ -25,7 +25,7 @@ BUILDTIME := $(shell TZ=UTC date --utc "+%Y.%m.%d-%H:%M%z")
# Set the following to `true' to make a debuggable build. # Set the following to `true' to make a debuggable build.
# Leave this set to `false' for production use. # Leave this set to `false' for production use.
# eg: `make DODEBUG=true tests' # eg: `make DODEBUG=true tests'
DODEBUG = false DODEBUG = true
# If you want a static binary, turn this on. # If you want a static binary, turn this on.
DOSTATIC = false DOSTATIC = false
@ -94,7 +94,7 @@ ifdef BB_INIT_SCRIPT
CFLAGS += -DINIT_SCRIPT='"$(BB_INIT_SCRIPT)"' CFLAGS += -DINIT_SCRIPT='"$(BB_INIT_SCRIPT)"'
endif endif
all: busybox busybox.links all: busybox busybox.links docs
.PHONY: all .PHONY: all
busybox: $(OBJECTS) busybox: $(OBJECTS)
@ -104,6 +104,9 @@ busybox: $(OBJECTS)
busybox.links: busybox.def.h busybox.links: busybox.def.h
- ./busybox.mkll | sort >$@ - ./busybox.mkll | sort >$@
docs: docs/busybox.pod
cd docs && $(MAKE) clean all
regexp.o nfsmount.o: %.o: %.h regexp.o nfsmount.o: %.o: %.h
$(OBJECTS): %.o: busybox.def.h internal.h %.c $(OBJECTS): %.o: busybox.def.h internal.h %.c
@ -128,6 +131,7 @@ install: busybox busybox.links
.PHONY: dist release .PHONY: dist release
dist release: distclean dist release: distclean
cd docs && $(MAKE) clean all
cd ..; \ cd ..; \
rm -rf busybox-$(VERSION); \ rm -rf busybox-$(VERSION); \
cp -a busybox busybox-$(VERSION); \ cp -a busybox busybox-$(VERSION); \

View File

@ -34,8 +34,10 @@ extern int basename_main(int argc, char **argv)
argv++; argv++;
s1=*argv+strlen(*argv)-1; s1=*argv+strlen(*argv)-1;
if (*s1 == '/') while (s1 && *s1 == '/') {
*s1 = '\0'; *s1 = '\0';
s1=*argv+strlen(*argv)-1;
}
s = strrchr(*argv, '/'); s = strrchr(*argv, '/');
printf("%s\n", (s)? s + 1 : *argv); printf("%s\n", (s)? s + 1 : *argv);
exit(TRUE); exit(TRUE);

View File

@ -194,7 +194,7 @@
//#define BB_FEATURE_SH_TAB_COMPLETION //#define BB_FEATURE_SH_TAB_COMPLETION
// //
//Turn on extra fbset options //Turn on extra fbset options
#define BB_FEATURE_FBSET_FANCY //#define BB_FEATURE_FBSET_FANCY
// //
// //
// End of Features List // End of Features List

View File

@ -34,8 +34,10 @@ extern int basename_main(int argc, char **argv)
argv++; argv++;
s1=*argv+strlen(*argv)-1; s1=*argv+strlen(*argv)-1;
if (*s1 == '/') while (s1 && *s1 == '/') {
*s1 = '\0'; *s1 = '\0';
s1=*argv+strlen(*argv)-1;
}
s = strrchr(*argv, '/'); s = strrchr(*argv, '/');
printf("%s\n", (s)? s + 1 : *argv); printf("%s\n", (s)? s + 1 : *argv);
exit(TRUE); exit(TRUE);

View File

@ -1,146 +1,45 @@
/* vi: set sw=4 ts=4: */ /* vi: set sw=4 ts=4: */
/* /*
* This is temporary -- needs to be rewritten to be tighter */ * Mini dirname implementation for busybox
/*
* Copyright (c) 1991, 1993, 1994
* The Regents of the University of California. All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Copyright (C) 2000 by Lineo, inc.
* modification, are permitted provided that the following conditions * Written by Erik Andersen <andersen@lineo.com>, <andersee@debian.org>
* are met: *
* 1. Redistributions of source code must retain the above copyright * This program is free software; you can redistribute it and/or modify
* notice, this list of conditions and the following disclaimer. * it under the terms of the GNU General Public License as published by
* 2. Redistributions in binary form must reproduce the above copyright * the Free Software Foundation; either version 2 of the License, or
* notice, this list of conditions and the following disclaimer in the * (at your option) any later version.
* documentation and/or other materials provided with the distribution. *
* 3. All advertising materials mentioning features or use of this software * This program is distributed in the hope that it will be useful,
* must display the following acknowledgement: * but WITHOUT ANY WARRANTY; without even the implied warranty of
* This product includes software developed by the University of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* California, Berkeley and its contributors. * General Public License for more details.
* 4. Neither the name of the University nor the names of its contributors *
* may be used to endorse or promote products derived from this software * You should have received a copy of the GNU General Public License
* without specific prior written permission. * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* *
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/ */
#if 0
#ifndef lint
static char copyright[] = "@(#) Copyright (c) 1991, 1993, 1994\n\
The Regents of the University of California. All rights reserved.\n";
#endif /* not lint */
#ifndef lint
static char sccsid[] = "@(#)dirname.c 8.4 (Berkeley) 5/4/95";
#endif /* not lint */
#endif /* #if 0 */
#include "internal.h" #include "internal.h"
#include <stdio.h> #include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
void dirname_usage() extern int dirname_main(int argc, char **argv)
{ {
char* s;
(void) fprintf(stderr, "usage: dirname path\n"); if ((argc < 2) || (**(argv + 1) == '-')) {
exit(1); usage("dirname [file ...]\n");
} }
argv++;
extern int dirname_main(argc, argv) s=*argv+strlen(*argv)-1;
int argc; while (s && *s == '/') {
char **argv; *s = '\0';
{ s=*argv+strlen(*argv)-1;
char *p;
int ch;
while ((ch = getopt(argc, argv, "")) != -1)
switch (ch) {
case '?':
default:
dirname_usage();
} }
argc -= optind; s = strrchr(*argv, '/');
argv += optind; if (s && *s)
*s = '\0';
if (argc != 1) printf("%s\n", (s)? *argv : ".");
dirname_usage(); exit(TRUE);
/*
* (1) If string is //, skip steps (2) through (5).
* (2) If string consists entirely of slash characters, string
* shall be set to a single slash character. In this case,
* skip steps (3) through (8).
*/
for (p = *argv;; ++p) {
if (!*p) {
if (p > *argv)
(void) printf("/\n");
else
(void) printf(".\n");
exit(0);
}
if (*p != '/')
break;
}
/*
* (3) If there are any trailing slash characters in string, they
* shall be removed.
*/
for (; *p; ++p);
while (*--p == '/')
continue;
*++p = '\0';
/*
* (4) If there are no slash characters remaining in string,
* string shall be set to a single period character. In this
* case skip steps (5) through (8).
*
* (5) If there are any trailing nonslash characters in string,
* they shall be removed.
*/
while (--p >= *argv)
if (*p == '/')
break;
++p;
if (p == *argv) {
(void) printf(".\n");
exit(0);
}
/*
* (6) If the remaining string is //, it is implementation defined
* whether steps (7) and (8) are skipped or processed.
*
* This case has already been handled, as part of steps (1) and (2).
*/
/*
* (7) If there are any trailing slash characters in string, they
* shall be removed.
*/
while (--p >= *argv)
if (*p != '/')
break;
++p;
/*
* (8) If the remaining string is empty, string shall be set to
* a single slash character.
*/
*p = '\0';
(void) printf("%s\n", p == *argv ? "/" : *argv);
exit(0);
} }

View File

@ -25,6 +25,14 @@
#include "internal.h" #include "internal.h"
#include <stdio.h> #include <stdio.h>
static const char uname_usage[] =
"echo [-neE] [ARG ...]\n\n"
"Prints the specified ARGs to stdout\n\n"
"Options:\n"
"\t-n\tsuppress trailing newline\n"
"\t-e\tinterpret backslash-escaped characters (i.e. \\t=tab etc)\n"
"\t-E\tdisable interpretation of backslash-escaped characters\n";
extern int extern int
echo_main(int argc, char** argv) echo_main(int argc, char** argv)
{ {
@ -45,6 +53,9 @@ echo_main(int argc, char** argv)
} else if (strcmp(p, "-E")==0) { } else if (strcmp(p, "-E")==0) {
eflag = 0; eflag = 0;
} }
else if (strncmp(p, "--", 2)==0) {
usage( uname_usage);
}
else break; else break;
ap++; ap++;
} }

View File

@ -88,7 +88,6 @@
#define DISP_FULLTIME 32 /* show extended time display */ #define DISP_FULLTIME 32 /* show extended time display */
#define DIR_NOLIST 64 /* show directory as itself, not contents */ #define DIR_NOLIST 64 /* show directory as itself, not contents */
#define DISP_DIRNAME 128 /* show directory name (for internal use) */ #define DISP_DIRNAME 128 /* show directory name (for internal use) */
#define DIR_RECURSE 256 /* -R (not yet implemented) */
#ifndef MAJOR #ifndef MAJOR
#define MAJOR(dev) (((dev)>>8)&0xff) #define MAJOR(dev) (((dev)>>8)&0xff)
@ -450,10 +449,33 @@ static const char ls_usage[] = "ls [-1a"
#ifdef BB_FEATURE_LS_FILETYPES #ifdef BB_FEATURE_LS_FILETYPES
"F" "F"
#endif #endif
#ifdef FEATURE_RECURSIVE "] [filenames...]\n\n"
"R" "Options:\n"
"\t-a\tdo not hide entries starting with .\n"
#ifdef BB_FEATURE_LS_TIMESTAMPS
"\t-c\twith -l: show ctime (the time of last\n"
"\t\tmodification of file status information)\n"
#endif #endif
"] [filenames...]\n"; "\t-d\tlist directory entries instead of contents\n"
#ifdef BB_FEATURE_LS_TIMESTAMPS
"\t-e\tlist both full date and full time\n"
#endif
"\t-l\tuse a long listing format\n"
"\t-n\tlist numeric UIDs and GIDs instead of names\n"
#ifdef BB_FEATURE_LS_FILETYPES
"\t-p\tappend indicator (one of /=@|) to entries\n"
#endif
#ifdef BB_FEATURE_LS_TIMESTAMPS
"\t-u\twith -l: show access time (the time of last\n"
"\t\taccess of the file)\n"
#endif
"\t-x\tlist entries by lines instead of by columns\n"
"\t-A\tdo not list implied . and ..\n"
"\t-C\tlist entries by columns\n"
#ifdef BB_FEATURE_LS_FILETYPES
"\t-F\tappend indicator (one of */=@|) to entries\n"
#endif
;
extern int ls_main(int argc, char **argv) extern int ls_main(int argc, char **argv)
{ {
@ -508,11 +530,6 @@ extern int ls_main(int argc, char **argv)
case 'd': case 'd':
opts |= DIR_NOLIST; opts |= DIR_NOLIST;
break; break;
#ifdef FEATURE_RECURSIVE
case 'R':
opts |= DIR_RECURSE;
break;
#endif
#ifdef BB_FEATURE_LS_TIMESTAMPS #ifdef BB_FEATURE_LS_TIMESTAMPS
case 'u': case 'u':
time_fmt = TIME_ACCESS; time_fmt = TIME_ACCESS;

View File

@ -70,7 +70,7 @@ int mknod_main(int argc, char **argv)
if (mknod(argv[1], mode, dev) != 0) { if (mknod(argv[1], mode, dev) != 0) {
perror(argv[1]); perror(argv[1]);
return (FALSE); exit (FALSE);
} }
return (TRUE); exit (TRUE);
} }

163
dirname.c
View File

@ -1,146 +1,45 @@
/* vi: set sw=4 ts=4: */ /* vi: set sw=4 ts=4: */
/* /*
* This is temporary -- needs to be rewritten to be tighter */ * Mini dirname implementation for busybox
/*
* Copyright (c) 1991, 1993, 1994
* The Regents of the University of California. All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Copyright (C) 2000 by Lineo, inc.
* modification, are permitted provided that the following conditions * Written by Erik Andersen <andersen@lineo.com>, <andersee@debian.org>
* are met: *
* 1. Redistributions of source code must retain the above copyright * This program is free software; you can redistribute it and/or modify
* notice, this list of conditions and the following disclaimer. * it under the terms of the GNU General Public License as published by
* 2. Redistributions in binary form must reproduce the above copyright * the Free Software Foundation; either version 2 of the License, or
* notice, this list of conditions and the following disclaimer in the * (at your option) any later version.
* documentation and/or other materials provided with the distribution. *
* 3. All advertising materials mentioning features or use of this software * This program is distributed in the hope that it will be useful,
* must display the following acknowledgement: * but WITHOUT ANY WARRANTY; without even the implied warranty of
* This product includes software developed by the University of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* California, Berkeley and its contributors. * General Public License for more details.
* 4. Neither the name of the University nor the names of its contributors *
* may be used to endorse or promote products derived from this software * You should have received a copy of the GNU General Public License
* without specific prior written permission. * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* *
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/ */
#if 0
#ifndef lint
static char copyright[] = "@(#) Copyright (c) 1991, 1993, 1994\n\
The Regents of the University of California. All rights reserved.\n";
#endif /* not lint */
#ifndef lint
static char sccsid[] = "@(#)dirname.c 8.4 (Berkeley) 5/4/95";
#endif /* not lint */
#endif /* #if 0 */
#include "internal.h" #include "internal.h"
#include <stdio.h> #include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
void dirname_usage() extern int dirname_main(int argc, char **argv)
{ {
char* s;
(void) fprintf(stderr, "usage: dirname path\n"); if ((argc < 2) || (**(argv + 1) == '-')) {
exit(1); usage("dirname [file ...]\n");
} }
argv++;
extern int dirname_main(argc, argv) s=*argv+strlen(*argv)-1;
int argc; while (s && *s == '/') {
char **argv; *s = '\0';
{ s=*argv+strlen(*argv)-1;
char *p;
int ch;
while ((ch = getopt(argc, argv, "")) != -1)
switch (ch) {
case '?':
default:
dirname_usage();
} }
argc -= optind; s = strrchr(*argv, '/');
argv += optind; if (s && *s)
*s = '\0';
if (argc != 1) printf("%s\n", (s)? *argv : ".");
dirname_usage(); exit(TRUE);
/*
* (1) If string is //, skip steps (2) through (5).
* (2) If string consists entirely of slash characters, string
* shall be set to a single slash character. In this case,
* skip steps (3) through (8).
*/
for (p = *argv;; ++p) {
if (!*p) {
if (p > *argv)
(void) printf("/\n");
else
(void) printf(".\n");
exit(0);
}
if (*p != '/')
break;
}
/*
* (3) If there are any trailing slash characters in string, they
* shall be removed.
*/
for (; *p; ++p);
while (*--p == '/')
continue;
*++p = '\0';
/*
* (4) If there are no slash characters remaining in string,
* string shall be set to a single period character. In this
* case skip steps (5) through (8).
*
* (5) If there are any trailing nonslash characters in string,
* they shall be removed.
*/
while (--p >= *argv)
if (*p == '/')
break;
++p;
if (p == *argv) {
(void) printf(".\n");
exit(0);
}
/*
* (6) If the remaining string is //, it is implementation defined
* whether steps (7) and (8) are skipped or processed.
*
* This case has already been handled, as part of steps (1) and (2).
*/
/*
* (7) If there are any trailing slash characters in string, they
* shall be removed.
*/
while (--p >= *argv)
if (*p != '/')
break;
++p;
/*
* (8) If the remaining string is empty, string shall be set to
* a single slash character.
*/
*p = '\0';
(void) printf("%s\n", p == *argv ? "/" : *argv);
exit(0);
} }

File diff suppressed because it is too large Load Diff

22
docs/Makefile Normal file
View File

@ -0,0 +1,22 @@
# busybox/docs/Makefile - Create the documentation
# ------------------------
# Copyright (C) 2000 Erik Andersen <andersee@debian.org> GPL
all:: clean doc
doc:
@echo
@echo BusyBox Documentation
@echo
pod2html busybox.pod > ../BusyBox.html
@rm pod2html-*
pod2man --center=BusyBox --release="version $(VERSION)" busybox.pod > ../BusyBox.1
pod2text busybox.pod > ../BusyBox.txt
clean::
@rm -f ../BusyBox.html ../BusyBox.1 ../BusyBox.txt pod2html*
distclean: clean
.PHONY: all clean distclean doc

View File

@ -1,4 +1,4 @@
# pod2man --center=Lineo --release="version 0.43" busybox.pod > busybox.1 # vi: set sw=4 ts=4:
=head1 NAME =head1 NAME
@ -36,20 +36,18 @@ tries to make itself useful to small systems with limited resources.
Currently defined functions include: Currently defined functions include:
basename, cat, chmod, chown, chgrp, chroot, clear, chvt, cp, mv, date, basename, cat, chmod, chown, chgrp, chroot, clear, chvt, cp, date,
dd, df, dirname, dmesg, du, dutmp, echo, fbset, fdflush, find, free, dd, df, dirname, dmesg, du, dutmp, echo, false, fbset, fdflush, find, free,
freeramdisk, deallocvt, fsck.minix, mkfs.minix, grep, gunzip, gzip, freeramdisk, deallocvt, fsck.minix, mkfs.minix, grep, gunzip, gzip,
halt, head, hostid, hostname, init, kill, killall, length, ln, loadacm, halt, head, hostid, hostname, init, kill, killall, length, ln, loadacm,
loadfont, loadkmap, ls, lsmod, makedevs, math, mkdir, mkfifo, mknod, loadfont, loadkmap, ls, lsmod, makedevs, math, mkdir, mkfifo, mknod,
mkswap, mnc, more, mount, mt, nslookup, poweroff, ping, printf, ps, mkswap, mnc, more, mount, mt, mv, nslookup, poweroff, ping, printf, ps,
pwd, reboot, rm, rmdir, rmmod, sed, sh, fdisk, sfdisk, sleep, sort, pwd, reboot, rm, rmdir, rmmod, sed, sh, fdisk, sfdisk, sleep, sort,
sync, syslogd, logger, logname, swapon, swapoff, tail, tar, [, test, sync, syslogd, logger, logname, swapon, swapoff, tail, tar, [, test,
tee, touch, tr, true, false, tty, umount, uname, uptime, uniq, update, tee, touch, tr, true, tty, umount, uname, uptime, uniq, update,
usleep, wc, whoami, yes, zcat usleep, wc, whoami, yes, zcat
=head1 OPTIONS =head1 COMMON OPTIONS
Common Options:
Most BusyBox commands support the B<--help> option to provide a Most BusyBox commands support the B<--help> option to provide a
terse runtime description of their behavior. terse runtime description of their behavior.
@ -69,6 +67,8 @@ Example:
$ basename /usr/local/bin/ $ basename /usr/local/bin/
bin bin
-------------------------------
=item cat =item cat
Usage: cat [file ...] Usage: cat [file ...]
@ -80,6 +80,8 @@ Example:
$ cat /proc/uptime $ cat /proc/uptime
110716.72 17.67 110716.72 17.67
-------------------------------
=item chmod =item chmod
Usage: chmod [B<-R>] MODE[,MODE]... FILE... Usage: chmod [B<-R>] MODE[,MODE]... FILE...
@ -138,6 +140,8 @@ Example:
$ ls -l /tmp/foo $ ls -l /tmp/foo
-r--r--r-- 1 root root 0 Apr 12 18:25 /tmp/foo -r--r--r-- 1 root root 0 Apr 12 18:25 /tmp/foo
-------------------------------
=item chown =item chown
Usage: chown [OPTION]... OWNER[.[GROUP] FILE... Usage: chown [OPTION]... OWNER[.[GROUP] FILE...
@ -159,6 +163,8 @@ Example:
ls -l /tmp/foo ls -l /tmp/foo
-r--r--r-- 1 root root 0 Apr 12 18:25 /tmp/foo -r--r--r-- 1 root root 0 Apr 12 18:25 /tmp/foo
-------------------------------
=item chgrp =item chgrp
Usage: chgrp [OPTION]... GROUP FILE... Usage: chgrp [OPTION]... GROUP FILE...
@ -177,31 +183,38 @@ Example:
$ ls -l /tmp/foo $ ls -l /tmp/foo
-r--r--r-- 1 andersen root 0 Apr 12 18:25 /tmp/foo -r--r--r-- 1 andersen root 0 Apr 12 18:25 /tmp/foo
-------------------------------
=item chroot =item chroot
Usage: chroot NEWROOT [COMMAND...] Usage: chroot NEWROOT [COMMAND...]
Run COMMAND with root directory set to NEWROOT. Run COMMAND with root directory set to NEWROOT.
Exmaple: Example:
$ ls -l /bin/ls $ ls -l /bin/ls
lrwxrwxrwx 1 root root 12 Apr 13 00:46 /bin/ls -> /bin/busybox lrwxrwxrwx 1 root root 12 Apr 13 00:46 /bin/ls -> /busybox
$ mount /dev/hdc1 /mnt -t minix $ mount /dev/hdc1 /mnt -t minix
$ chroot /mnt $ chroot /mnt
$ ls -l /bin/ls $ ls -l /bin/ls
-rwxr-xr-x 1 root root 40816 Feb 5 07:45 /bin/ls* -rwxr-xr-x 1 root root 40816 Feb 5 07:45 /bin/ls*
-------------------------------
=item clear =item clear
Clears the screen. Clears the screen.
-------------------------------
=item chvt =item chvt
Usage: chvt N Usage: chvt N
Change foreground virtual terminal to /dev/ttyN Change foreground virtual terminal to /dev/ttyN
-------------------------------
=item cp =item cp
@ -216,6 +229,8 @@ Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY.
-p preserve file attributes if possable -p preserve file attributes if possable
-R copy directories recursively -R copy directories recursively
-------------------------------
=item date =item date
Usage: date [OPTION]... [+FORMAT] Usage: date [OPTION]... [+FORMAT]
@ -235,6 +250,8 @@ Example:
$ date $ date
Wed Apr 12 18:52:41 MDT 2000 Wed Apr 12 18:52:41 MDT 2000
-------------------------------
=item dd =item dd
Usage: dd [if=name] [of=name] [bs=n] [count=n] [skip=n] [seek=n] Usage: dd [if=name] [of=name] [bs=n] [count=n] [skip=n] [seek=n]
@ -250,20 +267,21 @@ Copy a file, converting and formatting according to options
Numbers may be suffixed by w (x2), k (x1024), b (x512), or M (x1024^2) Numbers may be suffixed by w (x2), k (x1024), b (x512), or M (x1024^2)
Example: Example:
$ dd if=/dev/zero of=/dev/ram1 bs=1M count=4 $ dd if=/dev/zero of=/dev/ram1 bs=1M count=4
4+0 records in 4+0 records in
4+0 records out 4+0 records out
-------------------------------
=item df =item df
Usage: df [filesystem ...] Usage: df [filesystem ...]
Prints the filesystem space used and space available. Prints the filesystem space used and space available.
Exmaple: Example:
$ df $ df
Filesystem 1k-blocks Used Available Use% Mounted on Filesystem 1k-blocks Used Available Use% Mounted on
@ -273,12 +291,31 @@ Exmaple:
Filesystem 1k-blocks Used Available Use% Mounted on Filesystem 1k-blocks Used Available Use% Mounted on
/dev/sda3 8690864 8553540 137324 98% / /dev/sda3 8690864 8553540 137324 98% /
-------------------------------
=item dirname
Usage: dirname NAME
Strip non-directory suffix from file name
Example:
$ dirname /tmp/foo
/tmp
$ dirname /tmp/foo/
/tmp
-------------------------------
=item dmesg =item dmesg
Usage: dmesg [B<-c>] [B<-n> level] [B<-s> bufsize] Usage: dmesg [B<-c>] [B<-n> level] [B<-s> bufsize]
Print or controls the kernel ring buffer. Print or controls the kernel ring buffer.
-------------------------------
=item du =item du
Usage: du [OPTION]... [FILE]... Usage: du [OPTION]... [FILE]...
@ -305,6 +342,56 @@ Example:
104 ./docs 104 ./docs
2417 . 2417 .
-------------------------------
=item dutmp
Usage: dutmp [FILE]
Dump utmp file format (pipe delimited) from FILE
or stdin to stdout.
Example:
$ dutmp /var/run/utmp
8|7||si|||0|0|0|955637625|760097|0
2|0|~|~~|reboot||0|0|0|955637625|782235|0
1|20020|~|~~|runlevel||0|0|0|955637625|800089|0
8|125||l4|||0|0|0|955637629|998367|0
6|245|tty1|1|LOGIN||0|0|0|955637630|998974|0
6|246|tty2|2|LOGIN||0|0|0|955637630|999498|0
7|336|pts/0|vt00andersen|andersen|:0.0|0|0|0|955637763|0|0
-------------------------------
=item echo
Usage: echo [-neE] [ARG ...]
Prints the specified ARGs to stdout
Options:
-n suppress trailing newline
-e interpret backslash-escaped characters (i.e. \t=tab etc)
-E disable interpretation of backslash-escaped characters
Example:
$ echo "Erik is cool"
Erik is cool
$ echo -e "Erik\nis\ncool"
Erik
is
cool
$ echo "Erik\nis\ncool"
Erik\nis\ncool
-------------------------------
=item false
-------------------------------
=item fbset =item fbset
@ -327,6 +414,26 @@ Options:
-laced -laced
-double -double
Example:
$ fbset
mode "1024x768-76"
# D: 78.653 MHz, H: 59.949 kHz, V: 75.694 Hz
geometry 1024 768 1024 768 16
timings 12714 128 32 16 4 128 4
accel false
rgba 5/11,6/5,5/0,0/0
endmode
-------------------------------
=item fdflush
Usage: fdflush device
Force floppy disk drive to detect disk change
-------------------------------
=item find =item find
@ -337,18 +444,18 @@ the current directory; default EXPRESSION is '-print'
EXPRESSION may consist of: EXPRESSION may consist of:
-follow
Dereference symbolic links. -follow Dereference symbolic links.
-name PATTERN -name PATTERN File name (leading directories removed) matches PATTERN.
File name (with leading directories removed) matches PATTERN. -print print the full file name followed by a newline to stdout.
-print
print the full file name followed by a newline to stdout.
Example: Example:
$ find / -name /etc/passwd $ find / -name /etc/passwd
/etc/passwd /etc/passwd
-------------------------------
=item free =item free
Usage: free Usage: free
@ -363,6 +470,19 @@ Example:
Swap: 128516 8404 120112 Swap: 128516 8404 120112
Total: 386144 257128 129016 Total: 386144 257128 129016
-------------------------------
=item freeramdisk
Usage: freeramdisk DEVICE
Free all memory used by the specified ramdisk.
Example:
$ freeramdisk /dev/ram2
-------------------------------
=item deallocvt =item deallocvt
@ -370,6 +490,7 @@ Usage: deallocvt N
Deallocates unused virtual terminal /dev/ttyN Deallocates unused virtual terminal /dev/ttyN
-------------------------------
=item fsck.minix =item fsck.minix
@ -387,6 +508,7 @@ OPTIONS:
-m Activates MINIX-like "mode not cleared" warnings -m Activates MINIX-like "mode not cleared" warnings
-f Force file system check. -f Force file system check.
-------------------------------
=item mkfs.minix =item mkfs.minix
@ -402,6 +524,7 @@ OPTIONS:
-l FILENAME Read the bad blocks list from FILENAME -l FILENAME Read the bad blocks list from FILENAME
-v Make a Minix version 2 filesystem -v Make a Minix version 2 filesystem
-------------------------------
=item grep =item grep
@ -418,7 +541,6 @@ OPTIONS:
This version of grep matches full regular expresions. This version of grep matches full regular expresions.
Example: Example:
$ grep root /etc/passwd $ grep root /etc/passwd
@ -426,6 +548,23 @@ Example:
$ grep ^[rR]oo. /etc/passwd $ grep ^[rR]oo. /etc/passwd
root:x:0:0:root:/root:/bin/bash root:x:0:0:root:/root:/bin/bash
-------------------------------
=item gunzip
-------------------------------
=item gzip
-------------------------------
=item halt
-------------------------------
=item head =item head
Usage: head [OPTION] [FILE]... Usage: head [OPTION] [FILE]...
@ -444,6 +583,13 @@ Example:
root:x:0:0:root:/root:/bin/bash root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh daemon:x:1:1:daemon:/usr/sbin:/bin/sh
-------------------------------
=item hostid
-------------------------------
=item hostname =item hostname
Usage: hostname [OPTION] {hostname | B<-F> file} Usage: hostname [OPTION] {hostname | B<-F> file}
@ -463,6 +609,13 @@ Example:
$ hostname $ hostname
slag slag
-------------------------------
=item init
-------------------------------
=item kill =item kill
Usage: kill [B<-signal>] process-id [process-id ...] Usage: kill [B<-signal>] process-id [process-id ...]
@ -484,6 +637,17 @@ Example:
267 www-data www-data S [apache] 267 www-data www-data S [apache]
$ kill 252 $ kill 252
-------------------------------
=item killall
-------------------------------
=item length
-------------------------------
=item ln =item ln
Usage: ln [OPTION] TARGET... LINK_NAME|DIRECTORY Usage: ln [OPTION] TARGET... LINK_NAME|DIRECTORY
@ -494,30 +658,95 @@ Options:
-s make symbolic links instead of hard links -s make symbolic links instead of hard links
-f remove existing destination files -f remove existing destination files
Example:
$ ln -s busybox /tmp/ls
[andersen@debian busybox]$ ls -l /tmp/ls
lrwxrwxrwx 1 root root 7 Apr 12 18:39 ls -> busybox*
-------------------------------
=item loadacm
-------------------------------
=item loadfont
-------------------------------
=item loadkmap
-------------------------------
=item ls =item ls
Usage: ls [B<-1acdelnpuxACF>] [filenames...] Usage: ls [B<-1acdelnpuxACF>] [filenames...]
Options:
-a do not hide entries starting with .
-c with -l: show ctime (the time of last
modification of file status information)
-d list directory entries instead of contents
-e list both full date and full time
-l use a long listing format
-n list numeric UIDs and GIDs instead of names
-p append indicator (one of /=@|) to entries
-u with -l: show access time (the time of last
access of the file)
-x list entries by lines instead of by columns
-A do not list implied . and ..
-C list entries by columns
-F append indicator (one of */=@|) to entries
-------------------------------
=item lsmod =item lsmod
Usage: lsmod
Shows information about all loaded modules.
-------------------------------
=item makedevs
-------------------------------
=item math
-------------------------------
=item mkdir =item mkdir
Usage: Usage: mkdir [OPTION] DIRECTORY... Usage: mkdir [OPTION] DIRECTORY...
Create the DIRECTORY(ies), if they do not already exist Create the DIRECTORY(ies), if they do not already exist
Options: Options:
-m set permission mode (as in chmod), not rwxrwxrwx - umask -m set permission mode (as in chmod), not rwxrwxrwx - umask
-p no error if existing, make parent directories as needed -p no error if dir exists, make parent directories as needed
Example:
$ mkdir /tmp/foo
$ mkdir /tmp/foo
/tmp/foo: File exists
$ mkdir /tmp/foo/bar/baz
/tmp/foo/bar/baz: No such file or directory
$ mkdir -p /tmp/foo/bar/baz
-------------------------------
=item mkfifo
-------------------------------
=item mknod =item mknod
Usage: mknod NAME TYPE MAJOR MINOR Usage: mknod NAME TYPE MAJOR MINOR
Make block or character special files. Make block or character special files.
TYPEs include: TYPEs include:
@ -526,10 +755,16 @@ TYPEs include:
c or u: Make a character (un-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
-------------------------------
=item mkswap =item mkswap
Usage: mkswap [B<-c>] [-v0|-v1] device [block-count] Usage: mkswap [B<-c>] [B<-v0>|B<-v1>] device [block-count]
Prepare a disk partition to be used as a swap partition. Prepare a disk partition to be used as a swap partition.
Options: Options:
@ -539,25 +774,39 @@ Options:
-v1 Make version 1 swap [big!] (default for kernels > 2.1.117). -v1 Make version 1 swap [big!] (default for kernels > 2.1.117).
block-count Number of block to use (default is entire partition). block-count Number of block to use (default is entire partition).
-------------------------------
=item mnc
-------------------------------
=item more =item more
Usage: more [file ...] Usage: more [file ...]
More is a filter for paging through text one screenful at a time.
Example:
$ dmesg | more
-------------------------------
=item mount =item mount
Usage: mount [flags] Usage: mount [flags]
mount [flags] device directory [B<-o> options,more-options] mount [flags] device directory [B<-o> options,more-options]
Flags: Flags:
-a: Mount all file systems in fstab. -a: Mount all file systems in fstab.
-o option: One of many filesystem options, listed below. -o option: One of many filesystem options, listed below.
-r: Mount the filesystem read-only. -r: Mount the filesystem read-only.
-t filesystem-type: Specify the filesystem type. -t filesystem-type: Specify the filesystem type.
-w: Mount for reading and writing (default). -w: Mount for reading and writing (default).
Options for use with the "-o" flag:
Options for use with the "B<-o>" flag:
async / sync: Writes are asynchronous / synchronous. async / sync: Writes are asynchronous / synchronous.
dev / nodev: Allow use of special device files / disallow them. dev / nodev: Allow use of special device files / disallow them.
exec / noexec: Allow use of executable files / disallow them. exec / noexec: Allow use of executable files / disallow them.
@ -565,10 +814,23 @@ mount [flags] device directory [B<-o> options,more-options]
suid / nosuid: Allow set-user-id-root programs / disallow them. suid / nosuid: Allow set-user-id-root programs / disallow them.
remount: Re-mount a currently-mounted filesystem, changing its flags. remount: Re-mount a currently-mounted filesystem, changing its flags.
ro / rw: Mount for read-only / read-write. ro / rw: Mount for read-only / read-write.
There are EVEN MORE flags that are specific to each filesystem. There are EVEN MORE flags that are specific to each filesystem.
You'll have to see the written documentation for those. You'll have to see the written documentation for those.
Example:
$ mount
/dev/hda3 on / type minix (rw)
proc on /proc type proc (rw)
devpts on /dev/pts type devpts (rw)
$ mount /dev/fd0 /mnt -t msdos -o ro
$ mount /tmp/diskimage /opt -t ext2 -o loop
-------------------------------
=item mt
-------------------------------
=item mv =item mv
@ -578,245 +840,154 @@ or: mv SOURCE... DIRECTORY
Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY. Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY.
Example:
=item ping $ mv /tmp/foo /bin/bar
-------------------------------
=item nslookup
-------------------------------
=item poweroff =item poweroff
-------------------------------
=item ping
Usage: ping [OPTION]... host
Send ICMP ECHO_REQUEST packets to network hosts.
Options:
-c COUNT Send only COUNT pings.
-q Quiet mode, only displays output at start
and when finished.
Example:
$ ping localhost
PING slag (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=255 time=20.1 ms
--- debian ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 20.1/20.1/20.1 ms
-------------------------------
=item printf
-------------------------------
=item ps =item ps
Usage: ps -------------------------------
Report process status.
This version of ps accepts no options.
=item pwd =item pwd
-------------------------------
=item reboot =item reboot
-------------------------------
=item rm =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
=item rmdir
Usage: rmdir [OPTION]... DIRECTORY...
Remove the DIRECTORY(ies), if they are empty.
=item sed
Usage: sed [B<-n>] B<-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.
=item sleep
Usage: sleep N
Pause for N seconds.
=item sort
Usage: Usage: sort [OPTION]... [FILE]...
=item sync
Usage: sync
Write all buffered filesystem blocks to disk.
=item syslogd =item syslogd
Usage: syslogd [OPTION]... -------------------------------
Linux system and kernel (provides klogd) logging utility. =item logger
Note that this version of syslogd/klogd ignores /etc/syslog.conf.
Options: -------------------------------
-m Change the mark timestamp interval. default=20min. 0=off =item logname
-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 =item swapon
Usage: swapon device -------------------------------
Start swapping virtual memory pages on the given device.
=item swapoff =item swapoff
Usage: swapoff device -------------------------------
Stop swapping virtual memory pages on the given device.
=item tail =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.
-c=N[kbm] output the last N bytes
-f output appended data as the file grows
-n=N output the last N lines, instead of last 10
-q never output headers giving file names
-v always output headers giving file names
--help display this help and exit
If the first character of N (bytes or lines) is a `+', output begins with
the Nth item from the start of each file, otherwise, print the last N items
in the file. N bytes may be suffixed by k (x1024), b (x512), or m (1024^2).
=item tar =item tar
-------------------------------
=item test, [
-------------------------------
=item tee =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
=item touch =item touch
Usage: touch [B<-c>] file [file ...] -------------------------------
Update the last-modified date on the given file[s].
=item tr
-------------------------------
=item true =item true
-------------------------------
=item tty
=item false -------------------------------
=item uname
Usage: uname [OPTION]...
Print certain system information. With no OPTION, same as B<-s>.
Options:
-a print all information
-m the machine (hardware) type
-n print the machine's network node hostname
-r print the operating system release
-s print the operating system name
-p print the host processor type
-v print the operating system version
=item umount =item umount
Usage: Usage: umount [flags] filesystem|directory -------------------------------
Flags: =item uname
-a: Unmount all file systems -------------------------------
=item uptime
-------------------------------
=item uniq =item uniq
Usage: Usage: uniq [OPTION]... [INPUT [OUTPUT]] -------------------------------
Discard all but one of successive identical lines from INPUT (or =item update
standard input), writing to OUTPUT (or standard output).
-h display this help and exit -------------------------------
A field is a run of whitespace, then non-whitespace characters. =item usleep
Fields are skipped before chars.
-------------------------------
=item wc
-------------------------------
=item whoami
-------------------------------
=item yes
-------------------------------
=item zcat =item zcat
Usage: gunzip [OPTION]... FILE -------------------------------
Uncompress FILE (or standard input if FILE is '-').
Options:
-c Write output to standard output
-t Test compressed file integrity
=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
=item gzip
Usage: gzip [OPTION]... FILE
Compress FILE with maximum compression.
When FILE is -, reads standard input. Implies B<-c>.
Options:
-c Write output to standard output instead of FILE.gz
=back =back
@ -869,5 +1040,9 @@ Enrique Zanardi <ezanardi@ull.es>
=for html <br> =for html <br>
Karl M. Hegbloom <karlheg@debian.org>
=for html <br>
=cut =cut

View File

@ -19,10 +19,9 @@
#define bb_need_io_error #define bb_need_io_error
#include "messages.c" #include "messages.c"
static const char dutmp_usage[] = "dutmp\n" static const char dutmp_usage[] = "dutmp [FILE]\n\n"
"\n" "Dump utmp file format (pipe delimited) from FILE\n"
"\tDump file or stdin utmp file format to stdout, pipe delimited.\n" "or stdin to stdout. (i.e. 'dutmp /var/run/utmp')\n";
"\tdutmp /var/run/utmp\n";
extern int dutmp_main(int argc, char **argv) extern int dutmp_main(int argc, char **argv)
{ {

11
echo.c
View File

@ -25,6 +25,14 @@
#include "internal.h" #include "internal.h"
#include <stdio.h> #include <stdio.h>
static const char uname_usage[] =
"echo [-neE] [ARG ...]\n\n"
"Prints the specified ARGs to stdout\n\n"
"Options:\n"
"\t-n\tsuppress trailing newline\n"
"\t-e\tinterpret backslash-escaped characters (i.e. \\t=tab etc)\n"
"\t-E\tdisable interpretation of backslash-escaped characters\n";
extern int extern int
echo_main(int argc, char** argv) echo_main(int argc, char** argv)
{ {
@ -45,6 +53,9 @@ echo_main(int argc, char** argv)
} else if (strcmp(p, "-E")==0) { } else if (strcmp(p, "-E")==0) {
eflag = 0; eflag = 0;
} }
else if (strncmp(p, "--", 2)==0) {
usage( uname_usage);
}
else break; else break;
ap++; ap++;
} }

View File

@ -104,9 +104,9 @@ struct cmdoptions_t {
"-hsync", 1, CMD_HSYNC}, { "-hsync", 1, CMD_HSYNC}, {
"-vsync", 1, CMD_VSYNC}, { "-vsync", 1, CMD_VSYNC}, {
"-laced", 1, CMD_LACED}, { "-laced", 1, CMD_LACED}, {
"-double", 1, CMD_DOUBLE}, "-double", 1, CMD_DOUBLE}, {
"--help", 0, CMD_HELP}, {
#ifdef BB_FEATURE_FBSET_FANCY #ifdef BB_FEATURE_FBSET_FANCY
{
"--help", 0, CMD_HELP}, { "--help", 0, CMD_HELP}, {
"-all", 0, CMD_ALL}, { "-all", 0, CMD_ALL}, {
"-xres", 1, CMD_XRES}, { "-xres", 1, CMD_XRES}, {
@ -130,9 +130,8 @@ struct cmdoptions_t {
"-bcast", 1, CMD_BCAST}, { "-bcast", 1, CMD_BCAST}, {
"-rgba", 1, CMD_RGBA}, { "-rgba", 1, CMD_RGBA}, {
"-step", 1, CMD_STEP}, { "-step", 1, CMD_STEP}, {
"-move", 1, CMD_MOVE}, "-move", 1, CMD_MOVE}, {
#endif #endif
{
0, 0, 0} 0, 0, 0}
}; };
@ -217,7 +216,7 @@ static void showmode(struct fb_var_screeninfo *v)
printf("\trgba %u/%u,%u/%u,%u/%u,%u/%u\n", v->red.length, printf("\trgba %u/%u,%u/%u,%u/%u,%u/%u\n", v->red.length,
v->red.offset, v->green.length, v->green.offset, v->blue.length, v->red.offset, v->green.length, v->green.offset, v->blue.length,
v->blue.offset, v->transp.length, v->transp.offset); v->blue.offset, v->transp.length, v->transp.offset);
printf("endmode\n"); printf("endmode\n\n");
} }
static void fbset_usage(void) static void fbset_usage(void)

View File

@ -33,8 +33,8 @@ extern int fdflush_main(int argc, char **argv)
int value; int value;
int fd; int fd;
if (argc <= 1 || **(argv++) == '-') { if (argc <= 1 || **(++argv) == '-') {
usage("fdflush device\n"); usage("fdflush device\n\nForce floppy disk drive to detect disk change\n");
} }
fd = open(*argv, 0); fd = open(*argv, 0);

6
find.c
View File

@ -37,9 +37,9 @@ static const char find_usage[] = "find [PATH...] [EXPRESSION]\n\n"
"Search for files in a directory hierarchy. The default PATH is\n" "Search for files in a directory hierarchy. The default PATH is\n"
"the current directory; default EXPRESSION is '-print'\n\n" "the current directory; default EXPRESSION is '-print'\n\n"
"\nEXPRESSION may consist of:\n" "\nEXPRESSION may consist of:\n"
"\t-follow\n\t\tDereference symbolic links.\n" "\t-follow\t\tDereference symbolic links.\n"
"\t-name PATTERN\n\t\tFile name (with leading directories removed) matches PATTERN.\n" "\t-name PATTERN\tFile name (leading directories removed) matches PATTERN.\n"
"\t-print\n\t\tprint the full file name followed by a newline to stdout.\n"; "\t-print\t\tprint the full file name followed by a newline to stdout.\n";
static int fileAction(const char *fileName, struct stat *statbuf, void* junk) static int fileAction(const char *fileName, struct stat *statbuf, void* junk)

View File

@ -37,9 +37,9 @@ static const char find_usage[] = "find [PATH...] [EXPRESSION]\n\n"
"Search for files in a directory hierarchy. The default PATH is\n" "Search for files in a directory hierarchy. The default PATH is\n"
"the current directory; default EXPRESSION is '-print'\n\n" "the current directory; default EXPRESSION is '-print'\n\n"
"\nEXPRESSION may consist of:\n" "\nEXPRESSION may consist of:\n"
"\t-follow\n\t\tDereference symbolic links.\n" "\t-follow\t\tDereference symbolic links.\n"
"\t-name PATTERN\n\t\tFile name (with leading directories removed) matches PATTERN.\n" "\t-name PATTERN\tFile name (leading directories removed) matches PATTERN.\n"
"\t-print\n\t\tprint the full file name followed by a newline to stdout.\n"; "\t-print\t\tprint the full file name followed by a newline to stdout.\n";
static int fileAction(const char *fileName, struct stat *statbuf, void* junk) static int fileAction(const char *fileName, struct stat *statbuf, void* junk)

View File

@ -34,7 +34,7 @@
static const char freeramdisk_usage[] = static const char freeramdisk_usage[] =
"freeramdisk DEVICE\n\n" "freeramdisk DEVICE\n\n"
"Frees all memory used by the specified ramdisk.\n"; "Free all memory used by the specified ramdisk.\n";
extern int extern int
freeramdisk_main(int argc, char **argv) freeramdisk_main(int argc, char **argv)
@ -42,7 +42,7 @@ freeramdisk_main(int argc, char **argv)
char rname[256] = "/dev/ram"; char rname[256] = "/dev/ram";
int f; int f;
if (argc > 2 || ( argv[1] && *argv[1] == '-')) { if (argc < 2 || ( argv[1] && *argv[1] == '-')) {
usage(freeramdisk_usage); usage(freeramdisk_usage);
} }
@ -50,10 +50,10 @@ freeramdisk_main(int argc, char **argv)
strcpy(rname, argv[1]); strcpy(rname, argv[1]);
if ((f = open(rname, O_RDWR)) == -1) { if ((f = open(rname, O_RDWR)) == -1) {
fatalError( "freeramdisk: cannot open %s: %s", rname, strerror(errno)); fatalError( "freeramdisk: cannot open %s: %s\n", rname, strerror(errno));
} }
if (ioctl(f, BLKFLSBUF) < 0) { if (ioctl(f, BLKFLSBUF) < 0) {
fatalError( "freeramdisk: failed ioctl on %s: %s", rname, strerror(errno)); fatalError( "freeramdisk: failed ioctl on %s: %s\n", rname, strerror(errno));
} }
/* Don't bother closing. Exit does /* Don't bother closing. Exit does
* that, so we can save a few bytes */ * that, so we can save a few bytes */

35
ls.c
View File

@ -88,7 +88,6 @@
#define DISP_FULLTIME 32 /* show extended time display */ #define DISP_FULLTIME 32 /* show extended time display */
#define DIR_NOLIST 64 /* show directory as itself, not contents */ #define DIR_NOLIST 64 /* show directory as itself, not contents */
#define DISP_DIRNAME 128 /* show directory name (for internal use) */ #define DISP_DIRNAME 128 /* show directory name (for internal use) */
#define DIR_RECURSE 256 /* -R (not yet implemented) */
#ifndef MAJOR #ifndef MAJOR
#define MAJOR(dev) (((dev)>>8)&0xff) #define MAJOR(dev) (((dev)>>8)&0xff)
@ -450,10 +449,33 @@ static const char ls_usage[] = "ls [-1a"
#ifdef BB_FEATURE_LS_FILETYPES #ifdef BB_FEATURE_LS_FILETYPES
"F" "F"
#endif #endif
#ifdef FEATURE_RECURSIVE "] [filenames...]\n\n"
"R" "Options:\n"
"\t-a\tdo not hide entries starting with .\n"
#ifdef BB_FEATURE_LS_TIMESTAMPS
"\t-c\twith -l: show ctime (the time of last\n"
"\t\tmodification of file status information)\n"
#endif #endif
"] [filenames...]\n"; "\t-d\tlist directory entries instead of contents\n"
#ifdef BB_FEATURE_LS_TIMESTAMPS
"\t-e\tlist both full date and full time\n"
#endif
"\t-l\tuse a long listing format\n"
"\t-n\tlist numeric UIDs and GIDs instead of names\n"
#ifdef BB_FEATURE_LS_FILETYPES
"\t-p\tappend indicator (one of /=@|) to entries\n"
#endif
#ifdef BB_FEATURE_LS_TIMESTAMPS
"\t-u\twith -l: show access time (the time of last\n"
"\t\taccess of the file)\n"
#endif
"\t-x\tlist entries by lines instead of by columns\n"
"\t-A\tdo not list implied . and ..\n"
"\t-C\tlist entries by columns\n"
#ifdef BB_FEATURE_LS_FILETYPES
"\t-F\tappend indicator (one of */=@|) to entries\n"
#endif
;
extern int ls_main(int argc, char **argv) extern int ls_main(int argc, char **argv)
{ {
@ -508,11 +530,6 @@ extern int ls_main(int argc, char **argv)
case 'd': case 'd':
opts |= DIR_NOLIST; opts |= DIR_NOLIST;
break; break;
#ifdef FEATURE_RECURSIVE
case 'R':
opts |= DIR_RECURSE;
break;
#endif
#ifdef BB_FEATURE_LS_TIMESTAMPS #ifdef BB_FEATURE_LS_TIMESTAMPS
case 'u': case 'u':
time_fmt = TIME_ACCESS; time_fmt = TIME_ACCESS;

View File

@ -19,10 +19,9 @@
#define bb_need_io_error #define bb_need_io_error
#include "messages.c" #include "messages.c"
static const char dutmp_usage[] = "dutmp\n" static const char dutmp_usage[] = "dutmp [FILE]\n\n"
"\n" "Dump utmp file format (pipe delimited) from FILE\n"
"\tDump file or stdin utmp file format to stdout, pipe delimited.\n" "or stdin to stdout. (i.e. 'dutmp /var/run/utmp')\n";
"\tdutmp /var/run/utmp\n";
extern int dutmp_main(int argc, char **argv) extern int dutmp_main(int argc, char **argv)
{ {

View File

@ -70,7 +70,7 @@ int mknod_main(int argc, char **argv)
if (mknod(argv[1], mode, dev) != 0) { if (mknod(argv[1], mode, dev) != 0) {
perror(argv[1]); perror(argv[1]);
return (FALSE); exit (FALSE);
} }
return (TRUE); exit (TRUE);
} }

View File

@ -83,8 +83,6 @@ static const char mount_usage[] = "\tmount [flags]\n"
"\tsuid / nosuid:\tAllow set-user-id-root programs / disallow them.\n" "\tsuid / nosuid:\tAllow set-user-id-root programs / disallow them.\n"
"\tremount: Re-mount a currently-mounted filesystem, changing its flags.\n" "\tremount: Re-mount a currently-mounted filesystem, changing its flags.\n"
"\tro / rw: Mount for read-only / read-write.\n" "\tro / rw: Mount for read-only / read-write.\n"
"\t"
"There are EVEN MORE flags that are specific to each filesystem.\n" "There are EVEN MORE flags that are specific to each filesystem.\n"
"You'll have to see the written documentation for those.\n"; "You'll have to see the written documentation for those.\n";

View File

@ -1,6 +1,6 @@
/* vi: set sw=4 ts=4: */ /* vi: set sw=4 ts=4: */
/* /*
* $Id: ping.c,v 1.11 2000/02/08 19:58:47 erik Exp $ * $Id: ping.c,v 1.12 2000/04/13 18:49:43 erik Exp $
* Mini ping implementation for busybox * Mini ping implementation for busybox
* *
* Copyright (C) 1999 by Randolph Chung <tausq@debian.org> * Copyright (C) 1999 by Randolph Chung <tausq@debian.org>
@ -182,9 +182,9 @@ extern int ping_main(int argc, char **argv)
static const char *ping_usage = "ping [OPTION]... host\n\n" static const char *ping_usage = "ping [OPTION]... host\n\n"
"Send ICMP ECHO_REQUEST packets to network hosts.\n\n" "Send ICMP ECHO_REQUEST packets to network hosts.\n\n"
"Options:\n" "Options:\n"
"\t-q\t\tQuiet mode, only displays output at start" "\t-c COUNT\tSend only COUNT pings.\n"
"\t-q\t\tQuiet mode, only displays output at start\n"
"\t\t\tand when finished.\n" "\t-c COUNT\tSend only COUNT pings.\n"; "\t\t\tand when finished.\n";
static char *hostname = NULL; static char *hostname = NULL;
static struct sockaddr_in pingaddr; static struct sockaddr_in pingaddr;
@ -418,9 +418,7 @@ extern int ping_main(int argc, char **argv)
argv++; argv++;
options = 0; options = 0;
/* Parse any options */ /* Parse any options */
while (argc > 1) { while (argc >= 1 && **argv == '-') {
if (**argv != '-')
usage(ping_usage);
thisarg = *argv; thisarg = *argv;
thisarg++; thisarg++;
switch (*thisarg) { switch (*thisarg) {

12
ping.c
View File

@ -1,6 +1,6 @@
/* vi: set sw=4 ts=4: */ /* vi: set sw=4 ts=4: */
/* /*
* $Id: ping.c,v 1.11 2000/02/08 19:58:47 erik Exp $ * $Id: ping.c,v 1.12 2000/04/13 18:49:43 erik Exp $
* Mini ping implementation for busybox * Mini ping implementation for busybox
* *
* Copyright (C) 1999 by Randolph Chung <tausq@debian.org> * Copyright (C) 1999 by Randolph Chung <tausq@debian.org>
@ -182,9 +182,9 @@ extern int ping_main(int argc, char **argv)
static const char *ping_usage = "ping [OPTION]... host\n\n" static const char *ping_usage = "ping [OPTION]... host\n\n"
"Send ICMP ECHO_REQUEST packets to network hosts.\n\n" "Send ICMP ECHO_REQUEST packets to network hosts.\n\n"
"Options:\n" "Options:\n"
"\t-q\t\tQuiet mode, only displays output at start" "\t-c COUNT\tSend only COUNT pings.\n"
"\t-q\t\tQuiet mode, only displays output at start\n"
"\t\t\tand when finished.\n" "\t-c COUNT\tSend only COUNT pings.\n"; "\t\t\tand when finished.\n";
static char *hostname = NULL; static char *hostname = NULL;
static struct sockaddr_in pingaddr; static struct sockaddr_in pingaddr;
@ -418,9 +418,7 @@ extern int ping_main(int argc, char **argv)
argv++; argv++;
options = 0; options = 0;
/* Parse any options */ /* Parse any options */
while (argc > 1) { while (argc >= 1 && **argv == '-') {
if (**argv != '-')
usage(ping_usage);
thisarg = *argv; thisarg = *argv;
thisarg++; thisarg++;
switch (*thisarg) { switch (*thisarg) {

View File

@ -104,9 +104,9 @@ struct cmdoptions_t {
"-hsync", 1, CMD_HSYNC}, { "-hsync", 1, CMD_HSYNC}, {
"-vsync", 1, CMD_VSYNC}, { "-vsync", 1, CMD_VSYNC}, {
"-laced", 1, CMD_LACED}, { "-laced", 1, CMD_LACED}, {
"-double", 1, CMD_DOUBLE}, "-double", 1, CMD_DOUBLE}, {
"--help", 0, CMD_HELP}, {
#ifdef BB_FEATURE_FBSET_FANCY #ifdef BB_FEATURE_FBSET_FANCY
{
"--help", 0, CMD_HELP}, { "--help", 0, CMD_HELP}, {
"-all", 0, CMD_ALL}, { "-all", 0, CMD_ALL}, {
"-xres", 1, CMD_XRES}, { "-xres", 1, CMD_XRES}, {
@ -130,9 +130,8 @@ struct cmdoptions_t {
"-bcast", 1, CMD_BCAST}, { "-bcast", 1, CMD_BCAST}, {
"-rgba", 1, CMD_RGBA}, { "-rgba", 1, CMD_RGBA}, {
"-step", 1, CMD_STEP}, { "-step", 1, CMD_STEP}, {
"-move", 1, CMD_MOVE}, "-move", 1, CMD_MOVE}, {
#endif #endif
{
0, 0, 0} 0, 0, 0}
}; };
@ -217,7 +216,7 @@ static void showmode(struct fb_var_screeninfo *v)
printf("\trgba %u/%u,%u/%u,%u/%u,%u/%u\n", v->red.length, printf("\trgba %u/%u,%u/%u,%u/%u,%u/%u\n", v->red.length,
v->red.offset, v->green.length, v->green.offset, v->blue.length, v->red.offset, v->green.length, v->green.offset, v->blue.length,
v->blue.offset, v->transp.length, v->transp.offset); v->blue.offset, v->transp.length, v->transp.offset);
printf("endmode\n"); printf("endmode\n\n");
} }
static void fbset_usage(void) static void fbset_usage(void)

View File

@ -33,8 +33,8 @@ extern int fdflush_main(int argc, char **argv)
int value; int value;
int fd; int fd;
if (argc <= 1 || **(argv++) == '-') { if (argc <= 1 || **(++argv) == '-') {
usage("fdflush device\n"); usage("fdflush device\n\nForce floppy disk drive to detect disk change\n");
} }
fd = open(*argv, 0); fd = open(*argv, 0);

View File

@ -34,7 +34,7 @@
static const char freeramdisk_usage[] = static const char freeramdisk_usage[] =
"freeramdisk DEVICE\n\n" "freeramdisk DEVICE\n\n"
"Frees all memory used by the specified ramdisk.\n"; "Free all memory used by the specified ramdisk.\n";
extern int extern int
freeramdisk_main(int argc, char **argv) freeramdisk_main(int argc, char **argv)
@ -42,7 +42,7 @@ freeramdisk_main(int argc, char **argv)
char rname[256] = "/dev/ram"; char rname[256] = "/dev/ram";
int f; int f;
if (argc > 2 || ( argv[1] && *argv[1] == '-')) { if (argc < 2 || ( argv[1] && *argv[1] == '-')) {
usage(freeramdisk_usage); usage(freeramdisk_usage);
} }
@ -50,10 +50,10 @@ freeramdisk_main(int argc, char **argv)
strcpy(rname, argv[1]); strcpy(rname, argv[1]);
if ((f = open(rname, O_RDWR)) == -1) { if ((f = open(rname, O_RDWR)) == -1) {
fatalError( "freeramdisk: cannot open %s: %s", rname, strerror(errno)); fatalError( "freeramdisk: cannot open %s: %s\n", rname, strerror(errno));
} }
if (ioctl(f, BLKFLSBUF) < 0) { if (ioctl(f, BLKFLSBUF) < 0) {
fatalError( "freeramdisk: failed ioctl on %s: %s", rname, strerror(errno)); fatalError( "freeramdisk: failed ioctl on %s: %s\n", rname, strerror(errno));
} }
/* Don't bother closing. Exit does /* Don't bother closing. Exit does
* that, so we can save a few bytes */ * that, so we can save a few bytes */

View File

@ -83,8 +83,6 @@ static const char mount_usage[] = "\tmount [flags]\n"
"\tsuid / nosuid:\tAllow set-user-id-root programs / disallow them.\n" "\tsuid / nosuid:\tAllow set-user-id-root programs / disallow them.\n"
"\tremount: Re-mount a currently-mounted filesystem, changing its flags.\n" "\tremount: Re-mount a currently-mounted filesystem, changing its flags.\n"
"\tro / rw: Mount for read-only / read-write.\n" "\tro / rw: Mount for read-only / read-write.\n"
"\t"
"There are EVEN MORE flags that are specific to each filesystem.\n" "There are EVEN MORE flags that are specific to each filesystem.\n"
"You'll have to see the written documentation for those.\n"; "You'll have to see the written documentation for those.\n";