Major build system updates...

-Erik
This commit is contained in:
Erik Andersen 2000-03-16 08:09:09 +00:00
parent a967e3c8f0
commit d75af99529
13 changed files with 2111 additions and 1891 deletions

View File

@ -1,4 +1,8 @@
0.43
* Busybox now includes a shell! It currently costs 7.5 k (plus an
additional 2.5 k if you compile in command line editing). Handles
job control, has the usual set of builtins, and does everything
except for handling programming statements (if, while, etc...)
* Busybox can now work perfectly when /proc is disabled, thereby
saving a bunch of memory (kernel /proc support is not thin). This
is done by making use of some nice kernel patches I wrote up to
@ -11,6 +15,7 @@
with a ram disk. Contributed by Emanuele Caratti <wiz@iol.it>
and then adjusted a bit by me.
* Added tr and dirname from John Lombardo <john@deltanet.com>
* Added echo and test (from me).
* tar wouldn't create directory entries that don't end in '/',
now it does (thanks to Avery Pennarun <apenwarr@worldvisions.ca>)
* Several fixes from Pavel Roskin <pavel_roskin@geocities.com>:

View File

@ -34,282 +34,304 @@ int atexit(void (*__func) (void))
void *__libc_stack_end;
#endif
static const struct Applet applets[] = {
#ifdef BB_BASENAME //usr/bin/basename
{"basename", basename_main},
{"basename", basename_main, _BB_DIR_USR_BIN},
#endif
#ifdef BB_BUSYBOX //bin
{"busybox", busybox_main},
{"busybox", busybox_main, _BB_DIR_BIN},
#endif
#ifdef BB_BLOCK_DEVICE //sbin
{"block_device", block_device_main},
{"block_device", block_device_main, _BB_DIR_SBIN},
#endif
#ifdef BB_CAT //bin
{"cat", cat_main},
{"cat", cat_main, _BB_DIR_BIN},
#endif
#ifdef BB_CHMOD_CHOWN_CHGRP //bin
{"chmod", chmod_chown_chgrp_main},
{"chown", chmod_chown_chgrp_main},
{"chgrp", chmod_chown_chgrp_main},
{"chmod", chmod_chown_chgrp_main, _BB_DIR_BIN},
#endif
#ifdef BB_CHMOD_CHOWN_CHGRP //bin
{"chown", chmod_chown_chgrp_main, _BB_DIR_BIN},
#endif
#ifdef BB_CHMOD_CHOWN_CHGRP //bin
{"chgrp", chmod_chown_chgrp_main, _BB_DIR_BIN},
#endif
#ifdef BB_CHROOT //sbin
{"chroot", chroot_main},
{"chroot", chroot_main, _BB_DIR_SBIN},
#endif
#ifdef BB_CLEAR //usr/bin
{"clear", clear_main},
{"clear", clear_main, _BB_DIR_USR_BIN},
#endif
#ifdef BB_CHVT //usr/bin
{"chvt", chvt_main},
{"chvt", chvt_main, _BB_DIR_USR_BIN},
#endif
#ifdef BB_CP_MV //bin
{"cp", cp_mv_main},
{"mv", cp_mv_main},
{"cp", cp_mv_main, _BB_DIR_BIN},
#endif
#ifdef BB_CP_MV //bin
{"mv", cp_mv_main, _BB_DIR_BIN},
#endif
#ifdef BB_DATE //bin
{"date", date_main},
{"date", date_main, _BB_DIR_BIN},
#endif
#ifdef BB_DD //bin
{"dd", dd_main},
{"dd", dd_main, _BB_DIR_BIN},
#endif
#ifdef BB_DF //bin
{"df", df_main},
{"df", df_main, _BB_DIR_BIN},
#endif
#ifdef BB_DIRNAME //usr/bin
{"dirname", dirname_main},
{"dirname", dirname_main, _BB_DIR_USR_BIN},
#endif
#ifdef BB_DMESG //bin
{"dmesg", dmesg_main},
{"dmesg", dmesg_main, _BB_DIR_BIN},
#endif
#ifdef BB_DU //bin
{"du", du_main},
{"du", du_main, _BB_DIR_BIN},
#endif
#ifdef BB_DUTMP //usr/sbin
{"dutmp", dutmp_main},
{"dutmp", dutmp_main, _BB_DIR_USR_SBIN},
#endif
#ifdef BB_ECHO //bin
{"echo", echo_main, _BB_DIR_BIN},
#endif
#ifdef BB_FBSET //usr/sbin
{"fbset", fbset_main},
{"fbset", fbset_main, _BB_DIR_USR_SBIN},
#endif
#ifdef BB_FDFLUSH //bin
{"fdflush", fdflush_main},
{"fdflush", fdflush_main, _BB_DIR_BIN},
#endif
#ifdef BB_FIND //usr/bin
{"find", find_main},
{"find", find_main, _BB_DIR_USR_BIN},
#endif
#ifdef BB_FREE //usr/bin
{"free", free_main},
{"free", free_main, _BB_DIR_USR_BIN},
#endif
#ifdef BB_FREERAMDISK //sbin
{"freeramdisk", freeramdisk_main},
{"freeramdisk", freeramdisk_main, _BB_DIR_SBIN},
#endif
#ifdef BB_DEALLOCVT //usr/bin
{"deallocvt", deallocvt_main},
{"deallocvt", deallocvt_main, _BB_DIR_USR_BIN},
#endif
#ifdef BB_FSCK_MINIX //sbin
{"fsck.minix", fsck_minix_main},
{"fsck.minix", fsck_minix_main, _BB_DIR_SBIN},
#endif
#ifdef BB_MKFS_MINIX //sbin
{"mkfs.minix", mkfs_minix_main},
{"mkfs.minix", mkfs_minix_main, _BB_DIR_SBIN},
#endif
#ifdef BB_GREP //bin
{"grep", grep_main},
{"grep", grep_main, _BB_DIR_BIN},
#endif
#ifdef BB_HALT //sbin
{"halt", halt_main},
{"halt", halt_main, _BB_DIR_SBIN},
#endif
#ifdef BB_HEAD //bin
{"head", head_main},
{"head", head_main, _BB_DIR_BIN},
#endif
#ifdef BB_HOSTID //usr/bin
{"hostid", hostid_main},
{"hostid", hostid_main, _BB_DIR_USR_BIN},
#endif
#ifdef BB_HOSTNAME //bin
{"hostname", hostname_main},
{"hostname", hostname_main, _BB_DIR_BIN},
#endif
#ifdef BB_INIT //sbin
{"init", init_main},
{"init", init_main, _BB_DIR_SBIN},
#endif
#ifdef BB_INSMOD //sbin
{"insmod", insmod_main},
{"insmod", insmod_main, _BB_DIR_SBIN},
#endif
#ifdef BB_FEATURE_LINUXRC //
{"linuxrc", init_main},
{"linuxrc", init_main, _BB_DIR_ROOT},
#endif
#ifdef BB_KILL //bin
{"kill", kill_main},
{"kill", kill_main, _BB_DIR_BIN},
#endif
#ifdef BB_KILLALL //usr/bin
{"killall", kill_main},
{"killall", kill_main, _BB_DIR_USR_BIN},
#endif
#ifdef BB_LENGTH //usr/bin
{"length", length_main},
{"length", length_main, _BB_DIR_USR_BIN},
#endif
#ifdef BB_LN //bin
{"ln", ln_main},
{"ln", ln_main, _BB_DIR_BIN},
#endif
#ifdef BB_LOADACM //usr/bin
{"loadacm", loadacm_main},
{"loadacm", loadacm_main, _BB_DIR_USR_BIN},
#endif
#ifdef BB_LOADFONT //usr/bin
{"loadfont", loadfont_main},
{"loadfont", loadfont_main, _BB_DIR_USR_BIN},
#endif
#ifdef BB_LOADKMAP //sbin
{"loadkmap", loadkmap_main},
{"loadkmap", loadkmap_main, _BB_DIR_SBIN},
#endif
#ifdef BB_LS //bin
{"ls", ls_main},
{"ls", ls_main, _BB_DIR_BIN},
#endif
#ifdef BB_LSMOD //sbin
{"lsmod", lsmod_main},
{"lsmod", lsmod_main, _BB_DIR_SBIN},
#endif
#ifdef BB_MAKEDEVS //sbin
{"makedevs", makedevs_main},
{"makedevs", makedevs_main, _BB_DIR_SBIN},
#endif
#ifdef BB_MATH //usr/bin
{"math", math_main},
{"math", math_main, _BB_DIR_USR_BIN},
#endif
#ifdef BB_MKDIR //bin
{"mkdir", mkdir_main},
{"mkdir", mkdir_main, _BB_DIR_BIN},
#endif
#ifdef BB_MKFIFO //usr/bin
{"mkfifo", mkfifo_main},
{"mkfifo", mkfifo_main, _BB_DIR_USR_BIN},
#endif
#ifdef BB_MKNOD //bin
{"mknod", mknod_main},
{"mknod", mknod_main, _BB_DIR_BIN},
#endif
#ifdef BB_MKSWAP //sbin
{"mkswap", mkswap_main},
{"mkswap", mkswap_main, _BB_DIR_SBIN},
#endif
#ifdef BB_MNC //usr/bin
{"mnc", mnc_main},
{"mnc", mnc_main, _BB_DIR_USR_BIN},
#endif
#ifdef BB_MORE //bin
{"more", more_main},
{"more", more_main, _BB_DIR_BIN},
#endif
#ifdef BB_MOUNT //bin
{"mount", mount_main},
{"mount", mount_main, _BB_DIR_BIN},
#endif
#ifdef BB_MT //bin
{"mt", mt_main},
{"mt", mt_main, _BB_DIR_BIN},
#endif
#ifdef BB_NSLOOKUP //usr/bin
{"nslookup", nslookup_main},
{"nslookup", nslookup_main, _BB_DIR_USR_BIN},
#endif
#ifdef BB_PING //bin
{"ping", ping_main},
{"ping", ping_main, _BB_DIR_BIN},
#endif
#ifdef BB_POWEROFF //sbin
{"poweroff", poweroff_main},
{"poweroff", poweroff_main, _BB_DIR_SBIN},
#endif
#ifdef BB_PRINTF //usr/bin
{"printf", printf_main},
{"printf", printf_main, _BB_DIR_USR_BIN},
#endif
#ifdef BB_PS //bin
{"ps", ps_main},
{"ps", ps_main, _BB_DIR_BIN},
#endif
#ifdef BB_PWD //bin
{"pwd", pwd_main},
{"pwd", pwd_main, _BB_DIR_BIN},
#endif
#ifdef BB_REBOOT //sbin
{"reboot", reboot_main},
{"reboot", reboot_main, _BB_DIR_SBIN},
#endif
#ifdef BB_RM //bin
{"rm", rm_main},
{"rm", rm_main, _BB_DIR_BIN},
#endif
#ifdef BB_RMDIR //bin
{"rmdir", rmdir_main},
{"rmdir", rmdir_main, _BB_DIR_BIN},
#endif
#ifdef BB_RMMOD //sbin
{"rmmod", rmmod_main},
{"rmmod", rmmod_main, _BB_DIR_SBIN},
#endif
#ifdef BB_SED //bin
{"sed", sed_main},
{"sed", sed_main, _BB_DIR_BIN},
#endif
#ifdef BB_SH //bin
{"sh", shell_main},
{"sh", shell_main, _BB_DIR_BIN},
#endif
#ifdef BB_SFDISK //sbin
{"fdisk", sfdisk_main},
{"sfdisk", sfdisk_main},
{"fdisk", sfdisk_main, _BB_DIR_SBIN},
#ifdef BB_SFDISK //sbin
#endif
{"sfdisk", sfdisk_main, _BB_DIR_SBIN},
#endif
#ifdef BB_SLEEP //bin
{"sleep", sleep_main},
{"sleep", sleep_main, _BB_DIR_BIN},
#endif
#ifdef BB_SORT //bin
{"sort", sort_main},
{"sort", sort_main, _BB_DIR_BIN},
#endif
#ifdef BB_SYNC //bin
{"sync", sync_main},
{"sync", sync_main, _BB_DIR_BIN},
#endif
#ifdef BB_SYSLOGD //sbin
{"syslogd", syslogd_main},
{"syslogd", syslogd_main, _BB_DIR_SBIN},
#endif
#ifdef BB_LOGGER //usr/bin
{"logger", logger_main},
{"logger", logger_main, _BB_DIR_USR_BIN},
#endif
#ifdef BB_LOGNAME //usr/bin
{"logname", logname_main},
{"logname", logname_main, _BB_DIR_USR_BIN},
#endif
#ifdef BB_SWAPONOFF //sbin
{"swapon", swap_on_off_main},
{"swapoff", swap_on_off_main},
{"swapon", swap_on_off_main, _BB_DIR_SBIN},
#endif
#ifdef BB_SWAPONOFF //sbin
{"swapoff", swap_on_off_main, _BB_DIR_SBIN},
#endif
#ifdef BB_TAIL //usr/bin
{"tail", tail_main},
{"tail", tail_main, _BB_DIR_USR_BIN},
#endif
#ifdef BB_TAR //bin
{"tar", tar_main},
{"tar", tar_main, _BB_DIR_BIN},
#endif
#ifdef BB_TELNET //usr/bin
{"telnet", telnet_main},
{"telnet", telnet_main, _BB_DIR_USR_BIN},
#endif
#ifdef BB_TEST //usr/bin
{"[", test_main, _BB_DIR_USR_BIN},
#endif
#ifdef BB_TEST //usr/bin
{"test", test_main, _BB_DIR_USR_BIN},
#endif
#ifdef BB_TEE //bin
{"tee", tee_main},
{"tee", tee_main, _BB_DIR_BIN},
#endif
#ifdef BB_TOUCH //usr/bin
{"touch", touch_main},
{"touch", touch_main, _BB_DIR_USR_BIN},
#endif
#ifdef BB_TR //usr/bin
{"tr", tr_main},
{"tr", tr_main, _BB_DIR_USR_BIN},
#endif
#ifdef BB_TRUE_FALSE //bin
{"true", true_main},
{"false", false_main},
{"true", true_main, _BB_DIR_BIN},
#endif
#ifdef BB_TRUE_FALSE //bin
{"false", false_main, _BB_DIR_BIN},
#endif
#ifdef BB_TTY //usr/bin
{"tty", tty_main},
{"tty", tty_main, _BB_DIR_USR_BIN},
#endif
#ifdef BB_UMOUNT //bin
{"umount", umount_main},
{"umount", umount_main, _BB_DIR_BIN},
#endif
#ifdef BB_UNAME //bin
{"uname", uname_main},
{"uname", uname_main, _BB_DIR_BIN},
#endif
#ifdef BB_UPTIME //usr/bin
{"uptime", uptime_main},
{"uptime", uptime_main, _BB_DIR_USR_BIN},
#endif
#ifdef BB_UNIQ //bin
{"uniq", uniq_main},
{"uniq", uniq_main, _BB_DIR_BIN},
#endif
#ifdef BB_UPDATE //sbin
{"update", update_main},
{"update", update_main, _BB_DIR_SBIN},
#endif
#ifdef BB_WC //usr/bin
{"wc", wc_main},
{"wc", wc_main, _BB_DIR_USR_BIN},
#endif
#ifdef BB_WHOAMI //usr/bin
{"whoami", whoami_main},
{"whoami", whoami_main, _BB_DIR_USR_BIN},
#endif
#ifdef BB_YES //usr/bin
{"yes", yes_main},
{"yes", yes_main, _BB_DIR_USR_BIN},
#endif
#ifdef BB_GUNZIP //bin
{"zcat", gunzip_main},
{"gunzip", gunzip_main},
{"zcat", gunzip_main, _BB_DIR_BIN},
#endif
#ifdef BB_GUNZIP //bin
{"gunzip", gunzip_main, _BB_DIR_BIN},
#endif
#ifdef BB_GZIP //bin
{"gzip", gzip_main},
{"gzip", gzip_main, _BB_DIR_BIN},
#endif
{0}
};
@ -318,11 +340,11 @@ static const struct Applet applets[] = {
int main(int argc, char **argv)
{
char *s = argv[0];
char *name = argv[0];
char *s;
char *name;
const struct Applet *a = applets;
while (*s != '\0') {
for (s = name = argv[0]; *s != '\0';) {
if (*s++ == '/')
name = s;
}

View File

@ -4,12 +4,16 @@
DF="busybox.def.h"
MF="busybox.c"
LIST="$(sed -n '/^#define/{s/^#define //p;}' $DF)"
LIST="$(sed -n '/^#define/{s/^#define BB_FEATURE_.*//g;s/^#define //p;}' $DF)"
for def in ${LIST}; do
i=`sed -n 's/^#ifdef \<'$def'\>.*\/\/\(.*$\)/\/\1\//gp' $MF`
j=`sed -n '/^#ifdef \<'$def'\>.*/,/^#endif/{ s/.*\"\(.*\)\".*/\1/gp; }' $MF`
for k in $j; do
echo $i$k
done
i=`sed -n '/^#ifdef \<'$def'\>.*/,/^#endif/{ s/.*\"\(.*\)\".*\(_BB_DIR_[A-Z_]*\).*$/\2\/\1/gp; }' $MF`
for j in $i; do
if [ -z $j ] ; then
continue;
fi;
echo $j | sed -e 's/_BB_DIR_ROOT//g;s/_BB_DIR_BIN/\/bin/g;' \
-e 's/_BB_DIR_SBIN/\/sbin/g;s/_BB_DIR_USR_BIN/\/usr\/bin/g;' \
-e 's/_BB_DIR_USR_SBIN/\/usr\/sbin/g;'
done;
done

View File

@ -1,4 +1,3 @@
#!/bin/sh
ls -1 `sed -n '/^#define/{s/.*BB_// ; s/$/.c/p; }' busybox.def.h | \
tr [:upper:] [:lower:]` 2> /dev/null | sed -e 's/\.c$/\.o/g'
sed -n -e 's/^#define.*BB_FEATURE.*$//g;y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/;' \
-e '/^#define/{s/.*bb_//;s/$/.o/p;}' busybox.def.h

222
busybox.c
View File

@ -34,282 +34,304 @@ int atexit(void (*__func) (void))
void *__libc_stack_end;
#endif
static const struct Applet applets[] = {
#ifdef BB_BASENAME //usr/bin/basename
{"basename", basename_main},
{"basename", basename_main, _BB_DIR_USR_BIN},
#endif
#ifdef BB_BUSYBOX //bin
{"busybox", busybox_main},
{"busybox", busybox_main, _BB_DIR_BIN},
#endif
#ifdef BB_BLOCK_DEVICE //sbin
{"block_device", block_device_main},
{"block_device", block_device_main, _BB_DIR_SBIN},
#endif
#ifdef BB_CAT //bin
{"cat", cat_main},
{"cat", cat_main, _BB_DIR_BIN},
#endif
#ifdef BB_CHMOD_CHOWN_CHGRP //bin
{"chmod", chmod_chown_chgrp_main},
{"chown", chmod_chown_chgrp_main},
{"chgrp", chmod_chown_chgrp_main},
{"chmod", chmod_chown_chgrp_main, _BB_DIR_BIN},
#endif
#ifdef BB_CHMOD_CHOWN_CHGRP //bin
{"chown", chmod_chown_chgrp_main, _BB_DIR_BIN},
#endif
#ifdef BB_CHMOD_CHOWN_CHGRP //bin
{"chgrp", chmod_chown_chgrp_main, _BB_DIR_BIN},
#endif
#ifdef BB_CHROOT //sbin
{"chroot", chroot_main},
{"chroot", chroot_main, _BB_DIR_SBIN},
#endif
#ifdef BB_CLEAR //usr/bin
{"clear", clear_main},
{"clear", clear_main, _BB_DIR_USR_BIN},
#endif
#ifdef BB_CHVT //usr/bin
{"chvt", chvt_main},
{"chvt", chvt_main, _BB_DIR_USR_BIN},
#endif
#ifdef BB_CP_MV //bin
{"cp", cp_mv_main},
{"mv", cp_mv_main},
{"cp", cp_mv_main, _BB_DIR_BIN},
#endif
#ifdef BB_CP_MV //bin
{"mv", cp_mv_main, _BB_DIR_BIN},
#endif
#ifdef BB_DATE //bin
{"date", date_main},
{"date", date_main, _BB_DIR_BIN},
#endif
#ifdef BB_DD //bin
{"dd", dd_main},
{"dd", dd_main, _BB_DIR_BIN},
#endif
#ifdef BB_DF //bin
{"df", df_main},
{"df", df_main, _BB_DIR_BIN},
#endif
#ifdef BB_DIRNAME //usr/bin
{"dirname", dirname_main},
{"dirname", dirname_main, _BB_DIR_USR_BIN},
#endif
#ifdef BB_DMESG //bin
{"dmesg", dmesg_main},
{"dmesg", dmesg_main, _BB_DIR_BIN},
#endif
#ifdef BB_DU //bin
{"du", du_main},
{"du", du_main, _BB_DIR_BIN},
#endif
#ifdef BB_DUTMP //usr/sbin
{"dutmp", dutmp_main},
{"dutmp", dutmp_main, _BB_DIR_USR_SBIN},
#endif
#ifdef BB_ECHO //bin
{"echo", echo_main, _BB_DIR_BIN},
#endif
#ifdef BB_FBSET //usr/sbin
{"fbset", fbset_main},
{"fbset", fbset_main, _BB_DIR_USR_SBIN},
#endif
#ifdef BB_FDFLUSH //bin
{"fdflush", fdflush_main},
{"fdflush", fdflush_main, _BB_DIR_BIN},
#endif
#ifdef BB_FIND //usr/bin
{"find", find_main},
{"find", find_main, _BB_DIR_USR_BIN},
#endif
#ifdef BB_FREE //usr/bin
{"free", free_main},
{"free", free_main, _BB_DIR_USR_BIN},
#endif
#ifdef BB_FREERAMDISK //sbin
{"freeramdisk", freeramdisk_main},
{"freeramdisk", freeramdisk_main, _BB_DIR_SBIN},
#endif
#ifdef BB_DEALLOCVT //usr/bin
{"deallocvt", deallocvt_main},
{"deallocvt", deallocvt_main, _BB_DIR_USR_BIN},
#endif
#ifdef BB_FSCK_MINIX //sbin
{"fsck.minix", fsck_minix_main},
{"fsck.minix", fsck_minix_main, _BB_DIR_SBIN},
#endif
#ifdef BB_MKFS_MINIX //sbin
{"mkfs.minix", mkfs_minix_main},
{"mkfs.minix", mkfs_minix_main, _BB_DIR_SBIN},
#endif
#ifdef BB_GREP //bin
{"grep", grep_main},
{"grep", grep_main, _BB_DIR_BIN},
#endif
#ifdef BB_HALT //sbin
{"halt", halt_main},
{"halt", halt_main, _BB_DIR_SBIN},
#endif
#ifdef BB_HEAD //bin
{"head", head_main},
{"head", head_main, _BB_DIR_BIN},
#endif
#ifdef BB_HOSTID //usr/bin
{"hostid", hostid_main},
{"hostid", hostid_main, _BB_DIR_USR_BIN},
#endif
#ifdef BB_HOSTNAME //bin
{"hostname", hostname_main},
{"hostname", hostname_main, _BB_DIR_BIN},
#endif
#ifdef BB_INIT //sbin
{"init", init_main},
{"init", init_main, _BB_DIR_SBIN},
#endif
#ifdef BB_INSMOD //sbin
{"insmod", insmod_main},
{"insmod", insmod_main, _BB_DIR_SBIN},
#endif
#ifdef BB_FEATURE_LINUXRC //
{"linuxrc", init_main},
{"linuxrc", init_main, _BB_DIR_ROOT},
#endif
#ifdef BB_KILL //bin
{"kill", kill_main},
{"kill", kill_main, _BB_DIR_BIN},
#endif
#ifdef BB_KILLALL //usr/bin
{"killall", kill_main},
{"killall", kill_main, _BB_DIR_USR_BIN},
#endif
#ifdef BB_LENGTH //usr/bin
{"length", length_main},
{"length", length_main, _BB_DIR_USR_BIN},
#endif
#ifdef BB_LN //bin
{"ln", ln_main},
{"ln", ln_main, _BB_DIR_BIN},
#endif
#ifdef BB_LOADACM //usr/bin
{"loadacm", loadacm_main},
{"loadacm", loadacm_main, _BB_DIR_USR_BIN},
#endif
#ifdef BB_LOADFONT //usr/bin
{"loadfont", loadfont_main},
{"loadfont", loadfont_main, _BB_DIR_USR_BIN},
#endif
#ifdef BB_LOADKMAP //sbin
{"loadkmap", loadkmap_main},
{"loadkmap", loadkmap_main, _BB_DIR_SBIN},
#endif
#ifdef BB_LS //bin
{"ls", ls_main},
{"ls", ls_main, _BB_DIR_BIN},
#endif
#ifdef BB_LSMOD //sbin
{"lsmod", lsmod_main},
{"lsmod", lsmod_main, _BB_DIR_SBIN},
#endif
#ifdef BB_MAKEDEVS //sbin
{"makedevs", makedevs_main},
{"makedevs", makedevs_main, _BB_DIR_SBIN},
#endif
#ifdef BB_MATH //usr/bin
{"math", math_main},
{"math", math_main, _BB_DIR_USR_BIN},
#endif
#ifdef BB_MKDIR //bin
{"mkdir", mkdir_main},
{"mkdir", mkdir_main, _BB_DIR_BIN},
#endif
#ifdef BB_MKFIFO //usr/bin
{"mkfifo", mkfifo_main},
{"mkfifo", mkfifo_main, _BB_DIR_USR_BIN},
#endif
#ifdef BB_MKNOD //bin
{"mknod", mknod_main},
{"mknod", mknod_main, _BB_DIR_BIN},
#endif
#ifdef BB_MKSWAP //sbin
{"mkswap", mkswap_main},
{"mkswap", mkswap_main, _BB_DIR_SBIN},
#endif
#ifdef BB_MNC //usr/bin
{"mnc", mnc_main},
{"mnc", mnc_main, _BB_DIR_USR_BIN},
#endif
#ifdef BB_MORE //bin
{"more", more_main},
{"more", more_main, _BB_DIR_BIN},
#endif
#ifdef BB_MOUNT //bin
{"mount", mount_main},
{"mount", mount_main, _BB_DIR_BIN},
#endif
#ifdef BB_MT //bin
{"mt", mt_main},
{"mt", mt_main, _BB_DIR_BIN},
#endif
#ifdef BB_NSLOOKUP //usr/bin
{"nslookup", nslookup_main},
{"nslookup", nslookup_main, _BB_DIR_USR_BIN},
#endif
#ifdef BB_PING //bin
{"ping", ping_main},
{"ping", ping_main, _BB_DIR_BIN},
#endif
#ifdef BB_POWEROFF //sbin
{"poweroff", poweroff_main},
{"poweroff", poweroff_main, _BB_DIR_SBIN},
#endif
#ifdef BB_PRINTF //usr/bin
{"printf", printf_main},
{"printf", printf_main, _BB_DIR_USR_BIN},
#endif
#ifdef BB_PS //bin
{"ps", ps_main},
{"ps", ps_main, _BB_DIR_BIN},
#endif
#ifdef BB_PWD //bin
{"pwd", pwd_main},
{"pwd", pwd_main, _BB_DIR_BIN},
#endif
#ifdef BB_REBOOT //sbin
{"reboot", reboot_main},
{"reboot", reboot_main, _BB_DIR_SBIN},
#endif
#ifdef BB_RM //bin
{"rm", rm_main},
{"rm", rm_main, _BB_DIR_BIN},
#endif
#ifdef BB_RMDIR //bin
{"rmdir", rmdir_main},
{"rmdir", rmdir_main, _BB_DIR_BIN},
#endif
#ifdef BB_RMMOD //sbin
{"rmmod", rmmod_main},
{"rmmod", rmmod_main, _BB_DIR_SBIN},
#endif
#ifdef BB_SED //bin
{"sed", sed_main},
{"sed", sed_main, _BB_DIR_BIN},
#endif
#ifdef BB_SH //bin
{"sh", shell_main},
{"sh", shell_main, _BB_DIR_BIN},
#endif
#ifdef BB_SFDISK //sbin
{"fdisk", sfdisk_main},
{"sfdisk", sfdisk_main},
{"fdisk", sfdisk_main, _BB_DIR_SBIN},
#ifdef BB_SFDISK //sbin
#endif
{"sfdisk", sfdisk_main, _BB_DIR_SBIN},
#endif
#ifdef BB_SLEEP //bin
{"sleep", sleep_main},
{"sleep", sleep_main, _BB_DIR_BIN},
#endif
#ifdef BB_SORT //bin
{"sort", sort_main},
{"sort", sort_main, _BB_DIR_BIN},
#endif
#ifdef BB_SYNC //bin
{"sync", sync_main},
{"sync", sync_main, _BB_DIR_BIN},
#endif
#ifdef BB_SYSLOGD //sbin
{"syslogd", syslogd_main},
{"syslogd", syslogd_main, _BB_DIR_SBIN},
#endif
#ifdef BB_LOGGER //usr/bin
{"logger", logger_main},
{"logger", logger_main, _BB_DIR_USR_BIN},
#endif
#ifdef BB_LOGNAME //usr/bin
{"logname", logname_main},
{"logname", logname_main, _BB_DIR_USR_BIN},
#endif
#ifdef BB_SWAPONOFF //sbin
{"swapon", swap_on_off_main},
{"swapoff", swap_on_off_main},
{"swapon", swap_on_off_main, _BB_DIR_SBIN},
#endif
#ifdef BB_SWAPONOFF //sbin
{"swapoff", swap_on_off_main, _BB_DIR_SBIN},
#endif
#ifdef BB_TAIL //usr/bin
{"tail", tail_main},
{"tail", tail_main, _BB_DIR_USR_BIN},
#endif
#ifdef BB_TAR //bin
{"tar", tar_main},
{"tar", tar_main, _BB_DIR_BIN},
#endif
#ifdef BB_TELNET //usr/bin
{"telnet", telnet_main},
{"telnet", telnet_main, _BB_DIR_USR_BIN},
#endif
#ifdef BB_TEST //usr/bin
{"[", test_main, _BB_DIR_USR_BIN},
#endif
#ifdef BB_TEST //usr/bin
{"test", test_main, _BB_DIR_USR_BIN},
#endif
#ifdef BB_TEE //bin
{"tee", tee_main},
{"tee", tee_main, _BB_DIR_BIN},
#endif
#ifdef BB_TOUCH //usr/bin
{"touch", touch_main},
{"touch", touch_main, _BB_DIR_USR_BIN},
#endif
#ifdef BB_TR //usr/bin
{"tr", tr_main},
{"tr", tr_main, _BB_DIR_USR_BIN},
#endif
#ifdef BB_TRUE_FALSE //bin
{"true", true_main},
{"false", false_main},
{"true", true_main, _BB_DIR_BIN},
#endif
#ifdef BB_TRUE_FALSE //bin
{"false", false_main, _BB_DIR_BIN},
#endif
#ifdef BB_TTY //usr/bin
{"tty", tty_main},
{"tty", tty_main, _BB_DIR_USR_BIN},
#endif
#ifdef BB_UMOUNT //bin
{"umount", umount_main},
{"umount", umount_main, _BB_DIR_BIN},
#endif
#ifdef BB_UNAME //bin
{"uname", uname_main},
{"uname", uname_main, _BB_DIR_BIN},
#endif
#ifdef BB_UPTIME //usr/bin
{"uptime", uptime_main},
{"uptime", uptime_main, _BB_DIR_USR_BIN},
#endif
#ifdef BB_UNIQ //bin
{"uniq", uniq_main},
{"uniq", uniq_main, _BB_DIR_BIN},
#endif
#ifdef BB_UPDATE //sbin
{"update", update_main},
{"update", update_main, _BB_DIR_SBIN},
#endif
#ifdef BB_WC //usr/bin
{"wc", wc_main},
{"wc", wc_main, _BB_DIR_USR_BIN},
#endif
#ifdef BB_WHOAMI //usr/bin
{"whoami", whoami_main},
{"whoami", whoami_main, _BB_DIR_USR_BIN},
#endif
#ifdef BB_YES //usr/bin
{"yes", yes_main},
{"yes", yes_main, _BB_DIR_USR_BIN},
#endif
#ifdef BB_GUNZIP //bin
{"zcat", gunzip_main},
{"gunzip", gunzip_main},
{"zcat", gunzip_main, _BB_DIR_BIN},
#endif
#ifdef BB_GUNZIP //bin
{"gunzip", gunzip_main, _BB_DIR_BIN},
#endif
#ifdef BB_GZIP //bin
{"gzip", gzip_main},
{"gzip", gzip_main, _BB_DIR_BIN},
#endif
{0}
};
@ -318,11 +340,11 @@ static const struct Applet applets[] = {
int main(int argc, char **argv)
{
char *s = argv[0];
char *name = argv[0];
char *s;
char *name;
const struct Applet *a = applets;
while (*s != '\0') {
for (s = name = argv[0]; *s != '\0';) {
if (*s++ == '/')
name = s;
}

View File

@ -22,13 +22,14 @@
#define BB_DMESG
//#define BB_DUTMP
#define BB_DU
#define BB_FBSET
#define BB_ECHO
//#define BB_FBSET
//#define BB_FDFLUSH
#define BB_FIND
#define BB_FREE
#define BB_FREERAMDISK
#define BB_FSCK_MINIX
#define BB_GREP
//#define BB_FREERAMDISK
//#define BB_FSCK_MINIX
//#define BB_GREP
#define BB_GUNZIP
#define BB_GZIP
//#define BB_HALT
@ -36,12 +37,9 @@
//#define BB_HOSTID
#define BB_HOSTNAME
#define BB_INIT
// Don't turn BB_INSMOD on. It doesn't work.
// Don't bother turning BB_INSMOD on. It doesn't work.
//#define BB_INSMOD
#define BB_KILL
#ifdef BB_KILL
#define BB_KILLALL
#endif
#define BB_KLOGD
//#define BB_LENGTH
#define BB_LN
@ -53,7 +51,7 @@
#define BB_LS
//#define BB_LSMOD
//#define BB_MAKEDEVS
#define BB_MKFS_MINIX
//#define BB_MKFS_MINIX
//#define BB_MATH
#define BB_MKDIR
//#define BB_MKFIFO
@ -62,7 +60,7 @@
//#define BB_MNC
#define BB_MORE
#define BB_MOUNT
#define BB_NFSMOUNT
//#define BB_NFSMOUNT
//#define BB_MT
#define BB_NSLOOKUP
#define BB_PING
@ -71,7 +69,6 @@
#define BB_PS
#define BB_PWD
#define BB_REBOOT
#define BB_REGEXP
#define BB_RM
#define BB_RMDIR
//#define BB_RMMOD
@ -86,6 +83,7 @@
#define BB_TAIL
#define BB_TAR
#define BB_TEE
#define BB_TEST
// Don't turn BB_TELNET on. It doesn't work.
#define BB_TELNET
#define BB_TOUCH
@ -104,7 +102,7 @@
//
//
//
//
// ---------------------------------------------------------
// This is where feature definitions go. Generally speaking,
// turning this stuff off makes things a bit smaller (and less
// pretty/useful).
@ -117,10 +115,10 @@
// You can't use this and USE_PROCFS at the same time...
//#define BB_FEATURE_USE_DEVPS_PATCH
//
//
// enable features that use the /proc filesystem (apps that
// break without this will tell you on compile)...
// You can't use this and DEVPS_N_DEVMTAB at the same time...
// You can't use this and BB_FEATURE_USE_DEVPS_PATCH
// at the same time...
#define BB_FEATURE_USE_PROCFS
//
// Use termios to manipulate the screen ('more' is prettier with this on)
@ -130,24 +128,23 @@
#define BB_FEATURE_AUTOWIDTH
//
// show username/groupnames (bypasses libc6 NSS) for ls
#define BB_FEATURE_LS_USERNAME
#define BB_FEATURE_LS_USERNAME
//
// show file timestamps in ls
#define BB_FEATURE_LS_TIMESTAMPS
//
// enable ls -p and -F
#define BB_FEATURE_LS_FILETYPES
#define BB_FEATURE_LS_FILETYPES
//
// Change ping implementation -- simplified, featureless, but really small.
//#define BB_SIMPLE_PING
////
//
// Make init use a simplified /etc/inittab file (recommended).
#define BB_FEATURE_USE_INITTAB
//
//Enable init being called as /linuxrc
//#define BB_FEATURE_LINUXRC
//
//
//Simple tail implementation (2k vs 6k for the full one). Still
//provides 'tail -f' support -- but for only one file at a time.
#define BB_FEATURE_SIMPLE_TAIL
@ -156,9 +153,7 @@
#define BB_FEATURE_MOUNT_LOOP
//
// Enable support for a real /etc/mtab file instead of /proc/mounts
#ifdef BB_MOUNT
//#define BB_MTAB
#endif
//#define BB_FEATURE_MOUNT_MTAB_SUPPORT
//
//
// Enable support for remounting filesystems
@ -173,10 +168,41 @@
// Allow init to permenently chroot, and umount the old root fs
// just like an initrd does. Requires a kernel patch by Werner Almesberger.
// ftp://icaftp.epfl.ch/pub/people/almesber/misc/umount-root-*.tar.gz
#ifdef BB_MOUNT
//#define BB_FEATURE_INIT_CHROOT
#endif
//
//Make sure nothing is printed to the console on boot
#define BB_FEATURE_EXTRA_QUIET
//
// Enable full regular expressions. This adds about
// 4k. When this is off, things that would normally
// use regualr expressions (like grep) will just use
// normal strings.
#define BB_FEATURE_FULL_REGULAR_EXPRESSIONS
//
//
// Enable command line editing in the shell
#define BB_FEATURE_SH_COMMAND_EDITING
//
//
// End of Features List
//
//
//
//
//
//
//---------------------------------------------------
// Nothing beyond this point should ever be touched by
// mere mortals so leave this stuff alone.
#ifdef BB_FEATURE_MOUNT_MTAB_SUPPORT
#define BB_MTAB
#endif
//
#ifdef BB_FEATURE_FULL_REGULAR_EXPRESSIONS
#define BB_REGEXP
#endif
//
#ifdef BB_FEATURE_SH_COMMAND_EDITING
#define BB_CMDEDIT
#endif
//

View File

@ -4,12 +4,16 @@
DF="busybox.def.h"
MF="busybox.c"
LIST="$(sed -n '/^#define/{s/^#define //p;}' $DF)"
LIST="$(sed -n '/^#define/{s/^#define BB_FEATURE_.*//g;s/^#define //p;}' $DF)"
for def in ${LIST}; do
i=`sed -n 's/^#ifdef \<'$def'\>.*\/\/\(.*$\)/\/\1\//gp' $MF`
j=`sed -n '/^#ifdef \<'$def'\>.*/,/^#endif/{ s/.*\"\(.*\)\".*/\1/gp; }' $MF`
for k in $j; do
echo $i$k
done
i=`sed -n '/^#ifdef \<'$def'\>.*/,/^#endif/{ s/.*\"\(.*\)\".*\(_BB_DIR_[A-Z_]*\).*$/\2\/\1/gp; }' $MF`
for j in $i; do
if [ -z $j ] ; then
continue;
fi;
echo $j | sed -e 's/_BB_DIR_ROOT//g;s/_BB_DIR_BIN/\/bin/g;' \
-e 's/_BB_DIR_SBIN/\/sbin/g;s/_BB_DIR_USR_BIN/\/usr\/bin/g;' \
-e 's/_BB_DIR_USR_SBIN/\/usr\/sbin/g;'
done;
done

View File

@ -1,4 +1,3 @@
#!/bin/sh
ls -1 `sed -n '/^#define/{s/.*BB_// ; s/$/.c/p; }' busybox.def.h | \
tr [:upper:] [:lower:]` 2> /dev/null | sed -e 's/\.c$/\.o/g'
sed -n -e 's/^#define.*BB_FEATURE.*$//g;y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/;' \
-e '/^#define/{s/.*bb_//;s/$/.o/p;}' busybox.def.h

View File

@ -51,10 +51,18 @@
#define isOctal(ch) (((ch) >= '0') && ((ch) <= '7'))
#define isWildCard(ch) (((ch) == '*') || ((ch) == '?') || ((ch) == '['))
enum Location {
_BB_DIR_ROOT = 0,
_BB_DIR_BIN,
_BB_DIR_SBIN,
_BB_DIR_USR_BIN,
_BB_DIR_USR_SBIN
};
struct Applet {
const char* name;
int (*main)(int argc, char** argv);
enum Location location;
};
extern int basename_main(int argc, char **argv);
@ -74,6 +82,7 @@ extern int df_main(int argc, char** argv);
extern int dmesg_main(int argc, char** argv);
extern int du_main(int argc, char** argv);
extern int dutmp_main(int argc, char** argv);
extern int echo_main(int argc, char** argv);
extern int false_main(int argc, char** argv);
extern int fbset_main(int argc, char** argv);
extern int fdisk_main(int argc, char** argv);
@ -134,6 +143,7 @@ extern int syslogd_main(int argc, char **argv);
extern int tail_main(int argc, char** argv);
extern int tar_main(int argc, char** argv);
extern int tee_main(int argc, char** argv);
extern int test_main(int argc, char** argv);
extern int telnet_main(int argc, char** argv);
extern int touch_main(int argc, char** argv);
extern int tr_main(int argc, char** argv);

1141
lash.c

File diff suppressed because it is too large Load Diff

1141
sh.c

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1247,7 +1247,7 @@ extern int device_open(char *device, int mode)
#endif /* BB_INIT BB_SYSLOGD */
#if defined BB_KILLALL || defined BB_FEATURE_LINUXRC && ( defined BB_HALT || defined BB_REBOOT || defined BB_POWEROFF )
#if defined BB_FEATURE_LINUXRC && ( defined BB_HALT || defined BB_REBOOT || defined BB_POWEROFF )
#ifdef BB_FEATURE_USE_DEVPS_PATCH
#include <linux/devps.h>
@ -1363,7 +1363,7 @@ extern pid_t findPidByName( char* pidName)
return 0;
}
#endif /* BB_FEATURE_USE_DEVPS_PATCH */
#endif /* BB_INIT || BB_HALT || BB_REBOOT || BB_KILLALL || BB_POWEROFF */
#endif /* BB_INIT || BB_HALT || BB_REBOOT || BB_POWEROFF */
#if defined BB_GUNZIP \
|| defined BB_GZIP \