0.61.pre

    Development Version



    New Applets:
	* Erik Andersen -- Merged several applets from tinylogin,
	    namely adduser, addgroup, deluser, delgroup, getty.
	* Robert Griebl <sandman@handhelds.org>
	    -- reimplemented tinylogin applets: su, login
	    -- added hwclock
	    -- added uncompress

    Other Changes:

	* Vladimir Oleynik, Manuel Novoa III, Aaron Lehmann
	    -- a whole bunch of ash size optimizations
	    -- Fix for ash leading redirections (i.e. '2>/dev/null ls rubbish')
	* Rodney Brown  <RDBrown@mira.net> 
	    -- Optimized gzip.c, shrinking it by ~1.5k
	* Matt Kraai
	    -- Fix sed s/[/]// handling (closes: #1208).
	    -- Fix `-/bin/sh' invocation (closes: #1209).
	    -- Fix ash exec (noted by Arne Bernin).
	    -- Fix tar segfault when include list is empty and exclude list is
	       not.
	    -- Fix sed s/$/@/ handling (noted by Joshua Hudson).
	    -- Fix opt type in dpkg (closes: #118975).
	* Magick
	    -- made init run inittab command's in the order they show up
		in the inittab file (FIFO instead of LIFO).
	* Vladimir Oleynik
	    -- reverse resolve network name and cache in route and ifconfig
		applets, fix print nslookup server name if compile without
		uClibc, fix route crashe 'route add', fix warnings compile
		networking and pwd_grp applets
	* Tim Riker <Tim@Rikers.org>
	    -- fix and shrink uuencode
	    -- allow tty* in inittab if exist, serial console is not the issue
	* Robert Griebl <sandman@handhelds.org>
	    -- added suid/sgid handling with 3 modes to busybox:
	       1) completly disabled
	       2) tinylogin like
	       3) runtime configureable via /etc/busybox.conf

	    -- modprobe: complete rewrite, supports modules.dep, parses 
	                 modules.conf for alias and options and can be called 
	                 from the kernel.
	    -- tar: support for -z when creating archives
	    -- wget: support for -Y|--proxy=on/off and --passive-ftp
	    -- vi: support for ":x" 
	    -- date: support for -I (ISO format)
	    -- find: support for -xdev
	    -- mount: support for -t in list mode, parsing of /etc/filesystems
	    -- ash: support for --login (bash like)
	    -- route: support for -e
	    -- netstat: support for -e and -r
	    -- head/tail: support for old style -[0-9] options
	    -- sed: support for ! and \CregexpC
	    -- pidof: support for -s
	    -- nslookup: support for user specified name server
	    
	    -- logger: fixed logging of '<' characters
	    -- ash: fixed crash when run in a rxvt window
	    
	 -Erik Andersen, --not yet released--



0.60.1

    Stable Release


    New Applets & New Features:
	none.  :)

    Known Problems (to be fixed in 0.60.2)
	* msh can segfault on constructs such as
		for i in `ls *.c` ; do echo $i ; done
	  due to a memory allocation problem.  This only seems to cause
	  problems when the backtick expands to be several k in size.


    Bugfixes:
	* Matt Kraai
	    -- Fixed msh to support underscores in variable names.
	    -- Fixed a sed problem with unsatisfied backrefs (the problem was
		noted by Martin Bene).
	    -- Removed CONFIG_SH define entirely.  Now one simply picks the shell
		or shells they want as CONFIG_<foo> in Config.h
	    -- Fixed head to use ferror(3) to check for errors, not errno.
	* Shu-Hao Chang <shuhao_chang@trend.com.tw>
	    -- Fixed sed handling of multiple -e commands
	* Magick <magick@linux-fan.com>
	    -- Fixed an init bug with AskFirst and /dev/null
	* Jaspreet Singh <jsingh@somanetworks.com>
	    -- Fixed both a segfault and cosmetic bug in route
	* Erik Andersen
	    -- Made the insmod options CONFIG_FEATURE_NEW_MODULE_INTERFACE and 
		CONFIG_FEATURE_OLD_MODULE_INTERFACE mutually exclusive
	    -- xgetcwd.c now includes sys/param.h to ensure PATH_MAX is defined
	    -- Fixed a potential segfault with lash + CONFIG_FEATURE_CLEAN_UP
	    -- Removed uint64_t from dos2unix, avoiding C lib compat. problems.
	* Glenn McGrath
	    -- Rewrite of tftp (commands match atftp, accepts -b, can use 
		non-standard ports, and is smaller).
	    -- Fixed unarchive exclude list handling
	* Manuel Novoa III
	    -- rewrite of simplify_path so it behaves itself (fixing some
		problems with mount and other applets).
	    -- Fixed ifconfig 'broadcast +' handling and disabled it by default
	* Matthias ? <matthias@corelatus.com>
	    -- Fixed syslogd to log all messages from a single connection, not
		just the first.
	 
	 
	 -Erik Andersen, 23 August 2001


0.60.0

    Note: 

	For this release I have bumped the version number to 0.60.0.  This
	reflects the fact that this release is intended to form a new stable
	BusyBox release series.  If you need to rely on a stable version of
	BusyBox, you should plan on using the stable 0.60.x series.  If bugs
	show up then I will release 0.60.1, then 0.60.2, etc...  This is also
	intended to deal with the fact that the BusyBox build system will be
	getting a major overhaul for the next release and I don't want that to
	break products that people are shipping.  To avoid that, the new build
	system will be released as part of a new BusyBox development series
	that will have some not-yet-decided-on odd version number.  Once things
	stabablize and the new build system is working for everyone, then I
	will release that as a new stable release series. 

    Critical Bugfixes:
	* Matt Kraai 
	    -- Fixed wget output file opening (wget failed in 0.52).
	    -- Fixed a memory leak in syslogd (found by Adam Slattery).
	* Vladimir Oleynik, Matt Kraai, Erik Andersen
	    -- several nasty bugs in ash and msh.  msh could not assign
		any variables and had debug code still enabled.  ash
		had several compile errors (depending on selected options)
		and variable assignment problems as well.

    New Applets:
	* David McCullough <davidm@lineo.com> -- modprobe
	* Vladimir Oleynik -- traceroute
	* Erik Andersen -- pidof

    New Scripts:
	* David Schleef, Erik Andersen, Stuart Hughes -- depmod.pl
	    This is a replacement for the depmod program from the modutils 
	    package, but is fully cross platform and is designed to run on 
	    your host system (not on the target).

    Other Changes:
	* Erik Andersen 
	    -- fixed busybox.spec so it should now work on redhat systems
	    -- fixed dos2unix and unix2dos so they should work once again
	    -- Adjustments to make busybox more uClinux friendly.  Busybox
		should now work on uClinux systems without needing and source
		code changes (applets that won't work on uClinux systems are 
		now automagicaly disabled).
	    -- various things (cleanups, libc compatibility work, etc, etc)
	* Jim Gleason <jimg@lineo.com>
	    -- Fixed for sed, where it failed to preserve whether or not the 
		line was previously altered when running a subst command.
	* Matt Kraai 
	    -- Made tar read 20 512byte blocks at a time (like GNU tar)
	    -- Allow msh.c assignments with the export and readonly commands.
	    -- Added CONFIG_FEATURE_DEVFS to enable devfs device names.
	    -- Better devfs support
	    -- Don't save/restore vi readonly flag if vi is compiled read-only.
	    -- Reworked rdate option handling (is now smaller).
	    -- Size reduction in ping
	    -- Always write dd counts to stderr
	    -- Allow multiple shells to be enabled
	* Aaron Lehmann 
	    -- slimmed down md5sum 
	    -- contributed a nice new (hand written, not lex/yacc) Posix math 
		support for ash, which is once again a full posix shell.
	* Felix von Leitner <leitner@convergence.de> -- patches to make busybox 
	    work with dietlibc.
	* David McCullough
	    -- Adjustments to make busybox more uClinux friendly
	* Glenn McGrath 
	    -- Fixed gzip so when a filename is '-' it will use stdin/stdout
	    -- dpkg rewrite.  Should now be compatable with the real dpkg, 
		but needs more testing.
	    -- Updates to archiving tools (gunzip/gzip/cpio/ar/etc) 
	    -- Rewrote uuencode, will allow base64 encoding to be used by wget
	* Vladimir Oleynik 
	    -- Fixed tr to support 'tr a-z A-Z' syntax,
	    -- Many ash corrections, optimizations, and cleanups.
	    -- optimizations for traceroute, md5sum, chown, ping
	    -- cmdedit updates and API change
	    -- Namespace cleanup (i.e. adding 'static' private function calls)
	    -- added "stopped jobs" warning to ash on exit
	* Adam Slattery
	    -- Fixed ping compile problem
	* Robert J. Osborne <rj@resourceinternational.com>
	    -- fixed a vi bug with delete and escape sequences on empty files.


	 -Erik Andersen, 31 July 2001



0.52
	
    Critical Bugfixes:
	* Glenn McGrath -- Fixed gunzip, zcat when reading from stdin
	* Marc Karasek and Kanoj (kernel serial.c maintainer) -- fixed init
	    problem on serial consoles with 2.4.3+ kernels.
	
    New Applets:
	* Laurence Anderson -- rpm2cpio applet, this obsoletes rpmunpack 
	    which has now been removed from BusyBox 
	* Laurence Anderson and Glenn McGrath -- cpio applet, currently 
	    only supports unpacking the ascii cpio format.
	* Vladimir Oleynik and Erik Andersen -- added ash, the most correct
	    busybox shell.
	* Larry Doolittle -- hush, small shell designed specifically
	    for busybox.  Quite usable but still a work in progress.
	* Erik Andersen -- msh, minix shell.  A very small but capable shell
	    that only uses vfork, so it can be used on uClinux systems.

    Other Changes:
    	* Sterling Huxley -- Several bugfixes for the vi applet.
	* Glenn McGrath -- Restructure unarchiving code to make more code
	    common to the ar, cpio, dpkg, dpkg-deb applets.
	    tar applet has not yet been assimilated...
	* Matt Kraai -- Rewrote cp, dirname, mkdir, mv, and rm.
	* Paul J.Y. Lahaie <pjlahaie@linuxcare.com> -- Fixed an endian-ness
	    bug in md5sum (in 0.51, md5sum on big endian machines was broken)
	* Mark Whitley -- rewrote cut, major updates to grep and sed. 
	* Erik Andersen -- bunches of insmod fixes.  It should now always 
	    work (no more segfault or missing symbols problems).
	* Bernhard Kuhn <kuhn@lpr.e-technik.tu-muenchen.de> and Jinux Kim
	    added uClinux/m68k insmod support.
	* Manuel Novoa III -- rewrote make_human_readable so ls, du, and df
	    should work as expected.  Eliminated use of floats.
	* Aaron Lehmann <aaronl@vitelus.com> -- Scrubbed gzip.c
	* Alan Modra <amodra@bigpond.net.au> -- fixed an hard to spot
	    bug breaking gunzip checksum checking.
	* Gennady Feldman -- Fixed 'syslog -C' 
	* Gernot Poerner <gp@it-netservice.de> -- Added mount bind support.
	* Adam Heath <doogie@debian.org>  -- wget arbitrary header support
	* John Beppu -- updated the automagical doc generator
	* Zillions of other bugfixes, optimizations, and cleanups.



	 -Erik Andersen, 7 July 2001


0.51
    Critical Bugfixes:
	* Erik Andersen -- Fixed a bug that could crash the shell in 0.50
	    when pressing <Enter> on an empty line.
	* Gennady Feldman -- Fixed a bug that could crash the shell in 0.50
	    when performing an 'export' in the shell.
	* Gennady Feldman -- fixed a syslogd bug where syslogd could cause
	    the init process to block (which can break systems badly).

    New Applets:
	* Sterling Huxley -- contributed a new vi applet!  This is a very
	    functional vi implementation in Only 22k.
	* Erik Andersen -- added env applet
	
    Other changes:
	* Erik Andersen -- Split utility.c into libbb, which provides a
	    much cleaner was for us to include shared functionality.
	* Erik Andersen -- Reorganized how and when busybox includes 
	    syscalls, aiding portability and (in this case) making the
	    busybox work on ia64 systems.
	* Erik Andersen -- dpkg.c cleanup to use the updated gunzip interface.
	* Erik Andersen -- Cleanups for libc5, glibc, and uClibc.
	* Erik Andersen and Matt Kraai -- Cleanups for the human-readable
	    output from ls, du, and df.
	* Laurence Anderson <laurence@zxmail.com> -- Fixed wget HTTP 1.1
	    support and added chunked encoding so it is now RFC compliant.
	* John Beppu -- The busybox.pod documentation is now automagically
	    generated from the source code.  This makes it _much_ simpler.  
	    Now to update the docs, just update the usage message...
	* Dirk Behme <dirk.behme@de.bosch.com> -- Adjusted MIPS insmod 
	    support a bit for Mips RS3.
	* Christophe Boyanique -- egrep invoked the "init" applet in 0.50!
	* Larry Doolittle -- Added -Wshadow and fixed a number of shadowed
	    variables
	* David Douthitt -- fixed 'find -print' 
	* Gennady Feldman -- fixes for the syslogd circular buffer code 
	* Jeff Garzik -- a number of structural cleanups, fixes for -Wshadow 
	    bugs, and similar problems.
	* Matt Kraai -- Added a new 'shutdown' action to busybox init.  Now
	    you can specify arbitrary behavior for 'ctrlaltdel' so now
	    pressing CTL-ALT-DEL can do something else (or nothing).
	* Andreas Neuhaus <andy@fasta.fh-dortmund.de> -- fix for merging
	    kernel command line environment variables into child environment
	    for init.c
	* Glenn McGrath -- Fixed problems with dpkg and dpkg-deb applets
	* Glenn McGrath -- Don't try to automount devfs 
	* Vladimir Oleynik -- optimizations for more.c
	* Vladimir Oleynik -- Added locale support to the shell, and fixed
	    locale support in several other places
	* Vladimir Oleynik -- moved struct applet from busybox.c to applets.c
	* Vladimir Oleynik -- A size optimization for rdate
	* Vladimir Oleynik -- Fixed printf applets's locale handling
	* Vladimir Oleynik -- More cmdedit updates
	* Vladimir Oleynik -- Fixed `du' applet so it continues running 
	    after permission errors.
	* Vladimir Oleynik -- Reduced stack usage in recursive_action()
	* Pierre Peiffer <pierre.peiffer@sxb.bsf.alcatel.fr> -- made
		find_pid_by_name() cope with swapped out processes.
	* Jari Ruusu <jari.ruusu@pp.inet.fi> -- updates so that setting
	    D_FILE_OFFSET_BITS=64 now works as expected. 
	* Anthony Towns <aj@azure.humbug.org.au> -- fixed a bug with 
	    sed address range handling
	* Dmitry Zakharov <dmit@crp.bank.gov.ua> -- a number of updates
	    to wget: support for ftp downloads, basic HTTP basic auth, handling
	    of http redirects, when attempting to continue an aborted download
	    but server doesn't support restarts then reopen output file in
	    write mode, bugfix: when content-length not given, wget didn't
	    download anything, if -c is not specified, it no longer default to
	    restarting an aborted download. 


	 -Erik Andersen, 10 April 2001


0.50
	* Erik Andersen -- added ifconfig interface status reporting 
	* Erik Andersen -- Debian packaging updates
	* Erik Andersen -- lash environment variable expansion rewritten,
	    with lots of help/fixes/testing from Larry Doolittle.
	* Erik Andersen -- Fix use of busybox with dmalloc debugging lib
	* Erik Andersen -- fixed ls behavior for broken or very narrow terminals
	* Erik Andersen -- stub umount2 and pivot_root if they are not available
	* Erik Andersen -- libc5 fixes
	* Erik Andersen -- make init work with devfsd
	* Erik Andersen -- fixed df for nfs and dos where blksize = 512
	* Erik Andersen -- Make sure libpwd.a is linked _last_ so it 
	    overrides the system pwd/grp 
	* Christophe Boyanique -- added an optional egrep alias for grep.
	* Christophe Boyanique -- added optional 'rm -i' support.
	* Kenneth Chalmers and Erik Andersen -- fixed ln so it
	    behaves when given no arguments (prints usage) and when
	    given just one arg (tries to make a link in the cwd).
	* Magnus Damm -- added a tftp applet  
	* Magnus Damm -- powerpc support for busybox insmod.
	* David Douthitt -- fixed a build error in df.c when 
	    CONFIG_FEATURE_HUMAN_READABLE was disabled
	* John Beppu -- wrote autodocifier.pl, which will be used to auto-
	    generate the documentation from the source code, making life
	    much simpler for all.
	* Magnus Damm <damm@opensource.se> -- Fixed an 'inner scope var
	    masking outer scope var with same name' bug that prevented 
	    the loopback device from being unmounted if mount() failed.
	* Larry Doolittle -- rewrote ifconfig to make it smaller 
	* Larry Doolittle and Erik Andersen -- cleanups to pristine source
	* Larry Doolittle -- many bugfixes resulting from regression testing
	* Gennady Feldman -- split syslogd.c into syslogd and klogd
	* Gennady Feldman -- make syslogd single threaded -- no more forking
	* Jeff Garzik -- getopt-ified rmmod.
	* Jeff Garzik -- glibc 2.2 warning cleanups
	* Jeff Garzik -- namespace pollution cleanup (staticified variables).
	* Erik Gustavsson <cyrano@algonet.se> -- allow env variables set on the
	    kernel command line to be inherited into init and its children.
	* Erik Habbinga -- fixed an uninitialized substitution delimiter in sed.
	* Chris Jaeger -- Makefile cleanup to make option setting less error-prone
	* Chris Jaeger <cjaeger@ensim.com> -- Carefully check NFS_MOUNT_VERSION
	    depending on what kernel is being used.
	* Quinn Jensen <jensenq@lineo.com> -- MIPS support for busybox insmod.
	* Evin Robertson -- new pivot_root applet 
	* Kent Robotti -- usage message cleanups
	* Kent Robotti -- reworked dos2unix/unix2dos
	* Evin Robertson and Manuel Novoa III -- reworked how usage messages 
	    are stored to save several k of space.
	* Matt Kraai -- Keep trying if an NFS mount fails 
	* Matt Kraai -- fixed insmod so it won't try to insmod directories.
	* Matt Kraai -- added nc listening support
	* Matt Kraai and David Douthitt -- reworked fine to support -type, 
	    -perm, -mtime, and other improvements.
	* Matt Kraai -- added find_applet_by_name and saved some memory thereby
	* Matt Kraai -- added chomp to reduce redundant code elsewhere
	* Matt Kraai -- Removed trailing \n chars from error_msg{,_and_die} messages. 
	* John Lombardo -- fixed OOM in insmod.
	* Glenn McGrath -- bypass /proc in mount, now uses sysfs. 
	* Glenn McGrath -- several updates to dpkg and dpkg-deb. 
	* Manuel Novoa III -- several size optimizations: parse_mode, 
	    process_escape_sequence, format, and get_kernel_revision. 
	* Manuel Novoa III -- rewrote ifconfig again to make it smaller still 
	* Manuel Novoa III -- added ifconfig -a, updated interface reporting
	* Vladimir N. Oleynik -- Fixed a bug where init set PATH incorrectly 
	* Vladimir N. Oleynik -- cleanups to route, cmdedit, mkdir, 
	    mkfs_minix, mkswap, chmod_chown_chgrp and utility.c
	* Vladimir N. Oleynik -- many fixes to cmdedit. so tab completion
	    is now working and general editing is much improved, and to
	    improve complex prompt handling.
	* Vladimir N. Oleynik -- added route status reporting.
	* Vladimir N. Oleynik -- fixed wget to use xfopen
	* Vladimir N. Oleynik -- new stty applet 
	* Vladimir N. Oleynik -- fixed find, it used to stop on perm errors.
	* Vladimir N. Oleynik -- locale forced to posix for scripts 
	* Vladimir N. Oleynik -- saved 128 bytes by moving error checking 
	    for several my_* functions into utility.c
	* Bjorn Wesen -- new ifconfig and route applet (taken from 
	    work done by Axis Communications).
	* Mark Whitley -- Added a 'How to contribute to Busybox' doc
	    and updated the style guide.
	* Mark Whitley -- implemented grep -A, -B, and -C
	* Mark Whitley -- overhauled the test suite.


	 -Erik Andersen, 15 March 2001
	
0.49

	* Matt Kraai -- new sort.c
	* Matt Kraai -- new tail.c
	* Glenn McGrath -- new 'dpkg-deb' applet
	* Glenn McGrath -- new ar code
	* spoon -- new watchdog applet
	* Vladimir N. Oleynik <dzo@simtreas.ru> -- fixed cmdedit.c so now 
	    scrolling and tab completion in lash work properly.  Also several
	    byte saving optimizations.
	* Erik Andersen -- disabled many less commonly used applets by default
	* Mark Whitley -- more thrashing about to get clean perror_msg usage
	* Matt Kraai -- new command line munging
	* Larry Doolittle -- keep some locales from messing up busybox.sh
	* Matt Kraai -- cleaned up dd and tail with new parse_number routine
	* Mark Whitley -- remove debugging messages from deallocvt
	* Matt Kraai and Mark Whitley -- new document "How to Add a New Applet 
	    to BusyBox"
	* David Douthitt -- fixed "grep -qv" bug
	* Larry Doolittle -- fixed insmod bug with old kernels
	* Matt Kraai -- logger remixed to use getopt, selection of stdin made 
	    util-linux compatible
	* Erik Andersen -- many more internal symbols classified static to 
	    avoid namespace pollution
	* Matt Kraai -- nc listening support
	* Erik Andersen -- made sed understand arbitrary regexp delimiters
	* Matt Kraai et al. -- more tar improvements and bug fixes, now 
	    handles regexp file exclusion
	* Larry Doolittle -- new script (multibuild.pl) to automate build rule
	    checking
	* Matt Kraai -- update/cleanup of the docs on how to use init
	* Erik Andersen -- renamed all sh.c symbols per the style guide, 
	    better if-then-else-fi handling
	* Erik Andersen -- cleaner division of labor between cmdedit.c and sh.c
	* Larry Doolittle -- shell data structure cleanup, fixed buglets
	    in read, exec, and piped builtins
	* Erik Andersen -- md5sum was broken in 0.48.  Now fixed (and doesn't 
	    use getline, shrinking static compiles (since nothing else used it).
	* ?? -- squashed memory leak in shell prompt handling
	* Mark Whitley -- Updates to style guide
	* Mark Whitley -- Big cleanup in utility.c: style guide compliance,
	    de-macro-ifying some variables and functions
	* Erik Andersen -- ls now honors CONFIG_FEATURE_AUTOWIDTH so it can find
	    the width and height of the console.
	* Erik Andersen -- insmod now ignores -L and accepts the -o option.
	* Erik Andersen -- updates so you can now select from the Makefile
	    whether or not to use the system's passwd and group functions.
	    Since most systems use GNU libc, this can save you from having to
	    install the /etc/nsswitch.conf configuration file and the required
	    libnss_* libraries.  Adds 1.5k.  You can now, also, disable this, 
	    causing busybox to use the system's pwd.h and grp.h functions.


	 -Erik Andersen, 27 January 2001

0.48

	* Glenn McGrath -- tar now supports uncompressing tar files,
	    define CONFIG_FEATURE_TAR_GZIP to use the -z option.
	* Matt Kraai -- fix all usage of TRUE and FALSE so all apps now
	    return EXIT_SUCCESS or EXIT_FAILURE to the system.
	    Now TRUE and FALSE are set to the C standard where TRUE=1.
	* me -- Fixed uname problem causing the kernel version to be
	    mis-detected (causing problems with poweroff, init,
	    and other things).  
	* Alcove, Julien Gaulmin <julien.gaulmin@alcove.fr> and 
	    Nicolas Ferre <nicolas.ferre@alcove.fr> -- insmod support on ARM 
	    and StrongArm, and suport for lsmod on older 2.0.x kernels.
	* Kent Robotti -- Renamed unrpm to original rpmunpack, so you can use 
	    an included shell script called unrpm as a front end to it.  There's
	    also a shell script called undeb included for debian packages.  
	* Matt Kraai -- fix an infinite loop with ls -aR
	* Larry Doolittle -- Shaved off about 100 bytes and 200 bytes heap 
	    from date.c.  Also document the "-d" option in the usage message.
	* Gennady Feldman -- fixed dd to use blocksize when reading/writing, 
	    (it was reading the whole thing and then writing it out).  Also 
	    updated usage information (was missing conv=notrunc) and added 
	    conv=sync feature.
	* Larry Doolittle (in collaboration with Matt Kraai) -- allow for a 
	    pristine source directory -- where all the .o files and such are 
	    not placed into the source tree.  Thanks Larry!
	* Larry Doolittle -- use the applet definitions in applets.h 
	    to autogenerate the applet function and usage prototypes.
	* Sebastien Huet, Arne Bernin, and Kent Robotti -- Add in tar -X and
	    fixed a bug breaking tar --exclude.  
	* Jonas Holmberg -- echo option handling made GNU-echo compatible
	* Aleksey Demidov <asd@ixcelerator.com> -- date option handling made 
	    GNU-date compatible
	* me -- Progress meter (optional) in wget
	* Doolittle/me -- programs invoked by full path name take
	    precedence over applets unless CONFIG_FEATURE_SH_BUILTINS_ALWAYS_WIN
	* Gaute B Strokkenes <gs234@cam.ac.uk> -- applets found using a
	    binary search instead of linear search.  Much faster!
	* new applets: cmp readlink
	* Mark Whitley -- Removed advertising clause of Berkeley license
	    according to decision by the Regents of the University of
	    California; included reference
	* tail's confusing special treatment of single digit options removed;
	    people should use -n instead
	* Larry Doolittle -- \r handled now in echo and tr
	* Matt Kraai -- rewrite of uniq
	* Mark Whitley -- remix of xargs
	* Jim Gleason <jimg@lineo.com> -- fixed tar so it no longer breaks 
	    hard links.
	* Matt Kraai -- logger now logs all arguments, not just the first
	* Gennady Feldman -- syslogd no longer logs to localhost if compiled
	    for remote logging...
	* Richard June <rjune@ims1.imagestream-is.com> -- support for 'gzip -d'
	* various artists -- Other good stuff that I forgot to document.


	 -Erik Andersen, 13 December 2000

0.47

	* A bug in syslogd was fixed that allowed it to potentially fork-bomb
	    your system.  Anyone using 0.46 syslogd should upgrade.
	* Renamed busybox.defs.h to the more sensible "Config.h"
	* Improved portability between different libcs.
	* Many apps ported to use getopt()
	* Common handling of '--help'
	* All usage messages centralized.
	* Added a bunch of new commands:
	    * 'rdate' contributed by Sterling Huxley <sterling@europa.com>
	    * 'wget' contributed by Chip Rosenthal <chip@unicom.com>, 
		    <crosenth@covad.com> and Covad Communications
	    * 'getopt' from "Alfred M. Szmidt" <ams@trillian.itslinux.org>
	    * dos2unix, unix2dos, reset, and unrpm.c (and lots of help
		debugging) thanks to Kent Robotti <robotti@metconnect.com>.
	    * 'renice' command, thanks to Dave Cinege <dcinege@psychosis.com>
	    * 'xargs' (written by me)
	    * 'expr' contributed by Edward Betts <edward@debian.org>, based
		on GNY expr
	* lsmod now uses the query_module syscall, rather then /proc (me)
	* syslogd can now log messages to remote hosts -- patch thanks
	    to Gyepi Sam <gyepi@praxis-sw.com>
	* chroot can now call the builtin shell - Pavel Roskin <proski@gnu.org>
	* 'make install' now creates relative symlinks, and added a new
	    'make install-hardlinks' target to (tada) install hardlinks.
	* Rewrite of 'tail' to make it simpler, smaller, and more robust.  
	    It now weighs only 2.25k (3k when full featured).  The code is
	    cleaner too, thanks to Allen Soard <esp-software@mail.hypermart.net>
	* Add optional ls file sorting, thanks to a patch from 
	    Sterling Huxley <sterling@europa.com>
	* Fixed chmod option parsing so things like 'chmod -r /tmp/file'
	    now work (previously it thought -r was an option).  Doh!
	* Fixed tar handling of stdin and stdout
	* Renamed "internal.h" to the more sensible "busybox.h"
	* Preliminary support for GNU HURD.
	* Updated my devps and devmtab kernel patches for the latest 2.2.x
	    kernel, for those wanting to go proc-less.
	* Tons of other bugfixes.


	 -Erik Andersen, 25 September 2000


0.46

	* Better portability.  Now should compile cleanly with libc5, 
	    GNU libc 2.0 and 2.1, and various Linux kernels including 
	    2.0.x, 2.2.x, and to 2.4.0-test*. (patch for 2.4.x kernels
	    to make /proc/mounts behave included in the kernel-patches dir). 
	* Fixed a _horrible_ bug where 'tar -tvf' could unlink
	    local files that matched tarball contents!!!  Fix thanks 
	    to Marius Groeger <mgroeger@sysgo.de>
	* Fixed a nasty bug in tar when could mess up saved symlinks.
	* Fixed tar creation support when reading from stdin ('tar -cf - . ') 
	    thanks to Daniel Quinlan <quinlan@transmeta.com>
	* Updates to handle Linux 2.4.0 kernels (kludged around the
	    "none" entries in /proc/mounts, added a hack to make sysinfo
	    work with both old and new kernels).
	* Fixed insmod module option parsing for options lacking an '='.
	    Fix thanks to Marc Nijdam <marc_nijdam@hp.com>
	* Fixed segfault with 'cut -f 1 -d:' and added 'cut -s' suport.
	    Fix thanks to Arne Bernin <arne@matrix.loopback.org>
	* Several fixes from Marius Groeger <mag@sysgo.de>
	    - Added support for "sh -c command args..."
	    - Fixed globbing, i.e. 'echo * *' and 'echo "******"' now work.
	    - Added shell environment variable substitution 
	    - Added the "read" shell builtin.
	* Fixed cursor editing in cmdedit.c. The following keyboard sequence 
	    used to create an infinite loop: ls, cursor up, left, down.
	* Added support for being a login shell, so things like
	    '-su' or '-sh' (stuff where argv[0][0]=='-') will now always 
	    invoke the shell.  Now you can use BusyBox as a login shell.
	* ls.c now ignores '-g', since some ftp clients like that sort 
	    of thing.  Patch thanks to David Vrabel <dvrabel@arcom.co.uk>
	* Fix to init.c from Stuart Menefy <Stuart.Menefy@st.com> so that
	    it always sets the controlling terminal before running any programs
	* Several fixes from Matt Kraai <kraai@alumni.carnegiemellon.edu>
	    - Fixed tr so it recognizes standard escape sequences.  
		Merged common escape seq. code from tr and echo into utility.c.
	    - Major work in updating/cleaning up the docs, and getting the
		new SGML based docs into shape.
	    - cleanup of ar.c
	    - BusyBox should now poweroff when asked to do so.
	    - Fixed 'ln -n' and 'ln -s' so they both work properly.
	* Reorganized signal names in kill.c for better architecture support 
	    -- patch thanks to simon wood <simon@mungewell.uklinux.net>
	* In 0.43, backspace and delete worked properly, but with 0.45, 
	    it just echoed a ^? for backspace, and ^H for control-h.  This
	    was due to a broken macro in init.c, that is now fixed.
	* Removed sfdisk from BusyBox.  It was buggy, fat, and we really
	    couldn't maintain it very well, so including it was not really
	    very appropriate.  Those wanting an fdisk are invited to
	    grab a copy from util-linux.
	* Added 'dumpkmap' to allow people to dump a binary keymap, which can 
	    then be loaded in by 'loadkmap' -- submitted by
	    Arne Bernin <arne@matrix.loopback.org>
	* Fixed NFS so it supports 2.4.x kernels and NFSv3.
	* Brand, new versions of grep and sed which use libc regex routines,
	    thanks to Mark Whitley <markw@lineo.com>.  The hand-tooled 
	    "regexp.[ch]" files have been removed. Much help on these from 
	    Matt Kraai as well.


	 -Erik Andersen, 11 July 2000


0.45
	* Now compiles vs libc5 (which can save lots of space for 
	    embedded systems).
	* Added CONFIG_FEATURE_TRIVIAL_HELP which compiles out most all of the
	    help messages (i.e --help).  Saves 17k over a full compile.
	* Added cut and tr from minix, since due to the license change, 
	    we can now use minix code.  Minix tr saves 4k. 
	* insmod now works.  It costs 29k, but imagine an initrd with a 
	    staticly linked busybox containing only insmod and sh, a few /dev 
	    entries, and a kernel module or two...  It doesn't get smaller
	    then this folks (I pity the fool that writes insmod in asm ;-).
	    Many kudos go to Ron Alder <alder@lineo.com> for finishing this off!
	* Added a mini ar archive utility, especially written for BusyBox by 
	    Glenn McGrath <bug1@netconnect.com.au>
	* Added mktemp, contributed by Daniel Jacobowitz <dan@debian.org>
	* Added setkeycodes, for those that have wierd keyboard buttons.
	* Added md5sum, uuencode and uudecode -- thanks to Alfred M. Szmidt 
	    <ams@trillian.itslinux.org> for contributing these.
        * Added 'grep -v' option (inverted search) and updated 
	    docs accordingly.  -beppu
	* Wrote which
	* Replaced the telnet implementation with one written by 
	    Tomi Ollila <too@iki.fi> It works great and costs 3k.
	* BusyBox sh (lash) now supports being used as a standalone shell.  When
	    CONFIG_FEATURE_SH_STANDALONE_SHELL is defined, all the busybox commands may
	    be invoked as shell internals.  Best used when compiling staticly 
	    (i.e. DOSTATIC=true)
	* BusyBox sh (lash) internals now behave as expected wrt pipes 
	    and redirects. 
	* Fixed ping warnings -- fix from Sascha Ziemann <szi@aibon.ping.de>
	* Fixed update segfault
	* Fixed mknod -- minor number was always 0
	* Fixed tar option parsing, so both "tar xvf foo.tar" and 
	    "tar -xvf foo.tar" now work (i.e. no "-" before options) 
	    (this was very broken in 0.43).
	* Several contributions from Randolph Chung <tausq@debian.org>.
	    * cp/mv now accepts the -f flag
	    * tail can now accept -<num> commands (e.g. -10) for better 
		compatibility with the standard tail command
	    * added a simple id implementation; doesn't support sup. groups yet
	* logname used getlogin(3) which uses utmp.  Now it doesn't. 
	* whoami used getpwuid(3) which uses libc NSS.  Now it behaves. 
	* Add support for "noatime" and "nodiratime" mount flags to mount.
	* Changed 'umount -f' to mean force, and actually use umount2.
	* Changed 'umount -l' to mean "Do not free loop device".
	* Fixed basename to support stripping of suffixes.  Patch thanks
	    to xiong jianxin <jxiong@uiuc.edu>
	* cp -fa now works as expected for symlinks (it didn't before)
	* zcat now works (wasn't working since option parsing was broken)
	* Renamed "mnc" to the more correct "nc" (for netcat).
	* Makefile intelligence updates
	* Changed the way init parses /etc/inittab entries to avoid problems
	    with commands that contain colons in them.  Fix thanks to 
	    Pavel Roskin <proski@gnu.org>
	* Fixed a warning in utility.c due to char being unsigned on Linux/PPC, 
	    Fix thanks to Pavel Roskin <proski@gnu.org>
	* Made "killall" complain (not error and exit) about processes that it 
	    cannot find by name -- Pavel Roskin <proski@gnu.org> 
	* Fixed more and ps to have sensible terminal width defaults, thanks 
	    to Pavel Roskin.
	* Fixed all fatalError() calls lacking a "\n", thanks to Pavel Roskin.
	* Fixed a segfault in yes when no args were given -- Pavel Roskin.
	* Simplified freeramdisk and added argument checking -- Pavel Roskin. 
	* Fixed segfault caused by "touch -c"
	* Fixed segfault caused by "rm -f"
	* Fixed segfault caused by "ln -s -s" and similar abuses. Further fixes
	    and "--" support from Pavel Roskin.
	* Fixed segfault caused by "cp -a -a" and similar abuses.
	* Implemented "rm -- <foo>". Implementation fixed by Pavel Roskin.
	* "which" rewritten to use stat(). Fixes to improve its compatability
	    with traditional implementations -- Pavel Roskin.
	* "mount" now reports errors from nfsmount() and assumes NFS mount
	    if ':' is present in the device name - Pavel Roskin
	* Fixed exit status for killall - Pavel Roskin
	* Fixed 'swapon -a' and 'swapoff -a', which were broken.
	* Fixed 'mount -a' so it works as expected.
	* Implemented 'ls -R' (enabled by enabling CONFIG_FEATURE_LS_RECURSIVE)
	* Implemented "ping -s", fixed error messages and argument parsing -
	    Pavel Roskin
	* Syslogd will not go to background if "-n" is given. Better help
	    and argument checking -- Pavel Roskin
	* Fixed a small bug that could cause tar to emit warning messages
	    and not extract the first file in a directory in some cases
	    of nested directories.  Thanks to Kevin Traas <kevin@netmaster.com>
	    for helping track this one down.
	* More doc updates
	* Fixed grep "Line too long" problem -- John Beppu
	* Fixed 'grep -q -i B some_file' so it works
	* math takes input from stdin if no args are given.  -- John Beppu
	* math was renamed to dc.  Although it deviates from dc's behaviour,
	    this will probably be remedied in the future.  -- John Beppu


	 -Erik Andersen, June 21, 2000


0.44
	Previously, an erronous announcement of BusyBox 0.44 was made, so to 
	avoid possible confusion, we are skipping straight to 0.45, and calling
	it good.

	 -Erik Andersen


0.43
	* Major update to the provided documentation.
	* 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
	    support the features that busybox requires and that /proc usually
	    provides.  To enable this, turn on CONFIG_FEATURE_USE_DEVPS_PATCH and
	    patch your kernel with the devps patch in the kernel-patches/
	    directory. 
	* Wrote basename, dirname, killall, and uptime.
	* tar has been completely rewritten by me.  Both tar creation and 
	    extraction are now well behaved.  Costs 7.6k with all optional
	    tar features enabled, and 5k for just tar extraction support. 
	* Added freeramdisk, which will free up all memory associated
	    with a ram disk.  Contributed by Emanuele Caratti <wiz@iol.it>
	    and then adjusted a bit by me.
	* Added tr from John Lombardo <john@deltanet.com> 
	* Added echo and test (from me).
	* Added usleep contributed by Nicolas Pitre <nico@cam.org>
	* BusyBox's bss size has been majorly reduced (was 384668, is now 28740).
	* Several fixes from Pavel Roskin <proski@gnu.org>:
	    - When `tail' fails to open a file it now exits.
	    - When `syslogd' is given the `-n' option it should still use 
		fork() for running klogd.
	* nslookup types are now changed to u_int32_t (instead of uint32_t)
	    changed per a patch from Pascal Bellard <pascal.bellard@ascend.com>
	* Fixed "du" so it gives the same answers as GNU "du" (busybox du used 
	    to count hard-linked files more then once).  Many thanks to 
	    Friedrich Vedder <fwv@myrtle.lahn.de> for the fix.
	* Removed /proc dependancies for init and free (while maintaining 
	    exactly the same functionality).  /proc takes up 90k of kernel 
	    space, so it is nice to avoid using it at all costs.
	* init no longer tries to mount /proc (unless there is less the 1 meg 
	    free).  Use of /proc (or not) is policy that should be set up in 
	    /etc/fstab (or in hardcoded scripts), not in init.
	* Fixed rebooting when init runs as an initrd.
	* Fixes and updates from Karl M. Hegbloom  <karlheg@debian.org>
	    - update.c rewritten to look more like update-2.11
	    - moveed the inode hash out of du.c and into utility.c to make 
		it a common resource that can be used by other apps.
	    - cp_mv.c now checks inodes to see if a source and dest are
		the same, and prints an error (instead of endlessly looping).
	    - mv now attempts to do a rename, and will fall back to doing
		a copy only if the rename fails.
	    - Syslogd now supports multiple concurrent connections
	* Several fixes from Pavel Roskin <proski@gnu.org>:
	    - Fixes to sort.  Removed "-g", fixed and added "-r"
	    - Fixes to the makefile for handling "strip"
	* An initial telnet implementation was added by 
	    Randolph Chung <tausq@debian.org>.
	* Fixed a bug where "sed 's/foo/bar/g'" (i.e. a script w/o a "-e")
	* ps now supports CONFIG_FEATURE_AUTOWIDTH, and can adjust its width
	    to match the terminal (defaults to width=79 when this is off).
	* ps now accepts (and ignores) all options except for "--help" (which
		as would be expected displays help).
	* Fixed mount'ing loop devices when the filesystem type was not 
	    specified.  It used to revert to non-loop after the first try.
	* all mallocs now use xmalloc (and so are OOM error safe), and
	    the common error handling saves a few bytes.  Thanks to 
	    Bob Tinsley <bob@earthrise.demon.co.uk> for the patch.
	* Fix "+" parsing bug in date, from "Merle F. McClelland" <mfm@cts.com>.
	* Fix symlink following bug in chmod -R and friends.  
	* Now allows SYSV style 'chown foo:bar' in addition to 'chown foo.bar'
	* Fixed a bug in the busybox globbing routine such that 'find /dir -name [i]' 
	    no longer segfaults.


	-Erik Andersen


0.42

        * Fairly massive restructuring of umount.c to deal with remounting 
	  busy devices read-only. Adds a -r option to control that; it is 
	  optionally compiled in with CONFIG_FEATURE_REMOUNT
	* Added a bunch of functions to mtab.c to interact with the
	  {get,set,end}mntent interface; as it turns out, those functions do
	  not appear to be re-entrant, and that causes a lot of problems with
	  the way umount was originally written.
	* Makes init send TERM and KILL (instead of HUP and KILL) on reboot
	  to be more consistent with sysvinit
	* Changes to init.c to use the new -r option to umount. Also increased
	  the sleep time between the time the TERM and KILL signals are sent

        - Randolph Chung


	* cp.c, mv.c: removed, replaced by cp_mv.c which has been
	    extensively rewritten from the original cp.c.
	* Fixed cp and mv so if the source and destination are a the
	    same directory it will print an error and continue.
	* Also added a warning message to the `mv' usage string saying that
	    this is not GNU mv, and it will break hard links. cp also breaks
	    hard links.
	* ln.c: implemented `-n' switch, no-deref symlinks.
	* include<sys/param.h>: and use PATH_MAX everywhere.  busybox: File
	* name buffer overrun guards to prevent future crashes.
	    - Always check exit status.
	    - Purge all use of `creat()', replace with `open()'.
	* utility.c 
	    - recursiveAction was overriding the value of followLinks thus
	      ignoring it.
	    - isDirectory now takes a followLinks boolean, updated all callers
	    - copyFile had the followLinks logic reversed.
	* messages.c: New file. Put common error message strings all in
	    one place in an attempt to shrink the binary a little.

	-Karl M. Hegbloom


	* changed fsck_minix.c to reduce its .bss size significantly
	  -beppu -piptigger
	* Made tar creation support in busybox tar optional.  You no longer
	* _have_ to put a "-" in front of tar options.  Tar could inadvertently
	* change permissions and ownership on
	    certain directories pointed to by symlinks.
	* Made grep and grep -h do the right thing wrt printing
	    the file name (it failed to print files names in many cases).
	* Fix a namespace aliasing problem wereby if du was built in, the 
	    symlink for both du and dutmp would be installed, or then rm was
	    built in, the symlinks for both rm and rmmod would be installed.
	* Added a closelog() to init.c after loging -- fix thanks to 
	    Taketoshi Sano <kgh12351@nifty.ne.jp>
	* Rewrote and simplified logger.  Added the "-t" option, and made it
	    behave itself a bit better.
	* Optional support contributed by Ben Collins <bcollins@debian.org> 
	    for the kernel init chroot patch by Werner Almesberger, which
	    allows init to chroot to a new device, and umount the old one.
	* Fixed bug that wouldn't let one chown a symlink -- it would
	    always dereference before.  -beppu
	* Fixed a bug where init could have reference already freed memory.
	    Found and fixed by Taketoshi Sano <kgh12351@nifty.ne.jp>
	* Several contributions from Friedrich Vedder <fwv@myrtle.lahn.de>
	* Added (and documented) "-n" option for head
	* Cleanup for a number of usage messages -- also 
	    contributed Friedrich Vedder <fwv@myrtle.lahn.de>
	* Cosmetic fix to busybox.c (Don't print a comma at the
	    end of line if there are no more application names).
	* Fixed a stupid bug in "head" option handling ("head -n" 
	    would segfault).
	* Moved commonly used functions "xmalloc()" and "exit()"
	    to utility.c (with proper #ifdef's).
	* Created a tiny tail implementation, removing -c, -q, -v, and making
	    tail -f work only with a single file.  This reduced tail from 6k to
	    2.4k.  The bigger/more featured tail can still be had by disabling
	    CONFIG_FEATURE_SIMPLE_TAIL in busybox.defs.h
	* Ping now falls back to doing the right thing if /etc/protocols
	    turns up missing.
	* Fixed mount and umount.  Previously they could leak loop device 
	    allocations, causing the system to quickly run out.  Fix for umount
	    by Ben Collins <bcollins@debian.org>, and mount was fixed by me.
	* ls formatting on eight charactor user names fixed by 
	    Randolph Chung <tausq@debian.org>.
	* cp could, when copying symlinks, change permissions of the
	    files pointed to by the symlinks.
	* Several fixes from Pavel Roskin <proski@gnu.org>:
	    - `chown' with 1 argument displayed the error incorrectly
	    - `fdflush', `length' and `printf' crashed if run without arguments
	    - `fdflush' tried to flush itself using *argv
	    - added "skip" and "seek" to dd.
	    - ls no longer messus up output when combining files and
	      directories on the command line 
	* swapoff -a was not working.  Now it is.  
	* init did not cleanly unmount filesystems on reboot.  Now it does.  
	* "sed -ne s/foo/bar/" worked but "sed -n -e s/foo/bar/" didn't.
	    Now both work.
	* Some architectures (PowerPc) assume chars are unsigned, so they could
	    not distinguish between EOF and '\0xFF' in sed.  Sed now uses ints.
	* Began converting error handling to use some common routines
	    in utility.c
	* syslogd now has better message handling and ignores SIGHUP.
	* install.sh had a bug preventing installation to the specified
	    target directory.  Fix from Gilbert Coville <gilbert@mvista.com>
	* You can now spefify alternative strip commands -- change 
	    also from Gilbert Coville.


	-Erik Andersen

0.41
	* New Apps: wc, hostid, logname, tty, whoami, yes -- all contributed 
	    by Edward Betts <edward@debian.org>
	* Fixed a bug in both cp and mv preventing 'cp foo/README bar'
	    type commands (file in a directory to another directory) from
	    working.
	* Fixed a logger bug that caused garbage to be written to the syslog 
	    (unless you used busybox syslog, which hid the bug).  Thanks to
	    Alex Holden <alex@linuxhacker.org> for the fix.
	* /bin/true and /bin/false were echoing a blank line when run.  
	    Now fixed.
	* mkdir -p would print an error when asked to mkdir an existing dir
	    with no interveining subdirectories.
	* Fixed "syslogd -O" so that it works.  Added -o loop option for mount,
	* and support in umount for loop
	  devices. Support is toggled by MOUNT_LOOP feature -- Ben Collins
	  <bcollins@debian.org>
	* Several fixes from Marco Pantaleoni <panta@prosa.it> compile in
	* fullWrite() not only if CONFIG_TAR is defined, but also
		if CONFIG_CP or CONFIG_MV are (fullWrite() is referenced by copyFile())
	    * add some compiler optimizations to further reduce executable size
		(as a side note, on my machines the largest code is generated
		by gcc 2.95.2 with -Os ! The smallest by plain gcc 2.7.2.3 with
		-O2 -m386 ...)
	    * Compile now won't fail if busybox.def.h defines 
		CONFIG_FEATURE_INITRD but not CONFIG_INIT.  (init_main used to be
		referenced, but not compiled)
	* Fixed a bug in setting TERM for serial console support.  TERM now
	    defaults to "ansi" for serial consoles.
	* Fixed a bug in handling the CONSOLE env. variable for serial
	* consoles.

	-Erik Andersen, Jan 15, 2000

0.40
	* New Apps: sort, uniq. -beppu New Apps: lsmod, rmmod -erik New Apps:
	* fbset contributed by Randolph Chung <tausq@debian.org>.  New App::
	* loadacm contributed by Peter Novodvorsky <petya@logic.ru>
	    for loading application character maps for Unicode fonts.
	* Major init re-work.  init now supports inittab (slightly different
	    but similar to sysvinit), allowing me to get all the policy out of
	    init and into the conf file.  It works just fine without inittab
	    being present, but if you dont like the default behavior you can
	    now do something about it.  Init is much cleaner as a result.
	* Fixed an bug in syslogd causing it to stop after 20 minutes. -erik
	* Fixed an embarrasing segfault in head	-beppu Fixed the embarrasing
	* failure of 'logger -p'. -erik Added the -s option to du -beppu
	* Re-worked the source tree a bit so it will compile under glibc 2.0.7 
	    with the 2.0.x Linux kernel.
	* Added 'grep -q' thanks to a patch from "Konstantin Boldyshev" 
	    <konst@voshod.com>.
	* Grep -i previously failed on UPPER CASE patterns due to a silly 
	    regexp implementation bug that is now fixed.
	* Fixed a bug where tar would set, and then clear SGID and SUID bits.
	* Fixed a bug where tar would not set the user and group on device
	    special files.
	* Fixed a bug where tar would not restore the time to files.  Fixed a
	* major security problem with tar -- it changed ownership 
	    of any file pointed to by a symlink to 777 (like say libc....)
	    Ouch!!!
	* cp and mv were very broken when moving directories.  I have rewritten 
	    them so they should now work as expected. 
	* sed now supports addresses (numeric or regexp, with negation) and 
	    has an append command, thanks to Marco Pantaleoni <panta@prosa.it>
	* Fixed dmesg.  It wasn't parsing its options (-n or -s) properly.
	* Some cosmetic fixes to ls output formatting to make it behave more
	    like GNU ls.
	* Fixed a stupid segfault in kill.  Several fixes from Friedrich Vedder
	* <fwv@myrtle.lahn.de>:
	    - Added gunzip -t, removed gunzip.c dead code,
	    - fixed several typos
	    - Glibc 2.0.7 and libc5 compile fixes
	* Fixed a bug where 'mknod --help' would segfault.
	    

	-Erik Andersen, Jan 07, 2000

0.39 
	* New Apps: ping, hostname, and mkfifo contributed by Randolph Chung
	    <tausq@debian.org>.  3 items off the TODO list!
	* I wrote free (just calls "cat /proc/meminfo").  Added tail, based on
	* tail from GNU textutils-1.19, but adjusted
	    to suit my evil purposes.  Costs 6k.  I'll make it smaller
	    sometime.
	* on reboot, init called 'umount -a -n', which caused errors
	    when CONFIG_MTAB was not enabled.  Changed to 'umount -a', which does
	    the right thing.
	* init will now try to run /sbin/getty if it is present (for easy
	    integration with the about-to-be-released tinylogin.)
	* kill now behaves itself properly, added 'kill -l' to list signals 'ls
	* -l' was failing on long directories, since my_getid was leaking 
	    one file descriptor per file.  Oops.
	* Fixed rebooting from init.  I'd accidently left some debugging code
	* in
	    which blocked reboots.
	* Fixed reboot, halt (and added poweroff) such that they handle it when
	    init is not at PID 1 (like when running in an initrd).
	* Added a prelinary du implementation.  Some parameter parsing
	    stuff still needs to be added. -beppu (John Beppu
	    <beppu@lineo.com>)
	* Implemented tee.  -beppu Implemented head. -beppu

	-Erik Andersen, Dec 10, 1999

0.38
	* Fixed a segfault in 'umount -a' when a badly formed /etc/fstab
	    file existed.
	* df will not exit on error, but will stat all mounted filesystems.
	* Fixed tar so uid/gid/permissions on extracted tarballs will be 
	    correct.
	* Fixed find -name so it properly uses shell wildcard patterns 
	    (i.e. `*', `?', and `[]') instead of regular expressions, which
	    was causing some confusing and unexpected behavior.
	* Added klogd to syslogd, so now the log will contain both system and
	    kernel messages.
	* syslogd now creates the /dev/log socket to make sure it is there, and
	    is actually a socket with the right permissions.
	* I've taken a first step to making busybox not need the /proc 
	    filesystem.  Most apps don't need it.  Those that _require_ it, 
	    will complain if you enable them when you disable 
	    CONFIG_FEATURE_USE_PROCFS.
	   
	-Erik Andersen, Dec 5, 1999

0.37
	* Wrote a micro syslogd, and a logger util (to log things to the syslog
	    from the command line or scripts)  With both compiled in, costs 4k.
	* Fixed 'make install' so symlinks are installed in their proper
	* locations.  Changed the build system slightly so that features can
	* now be enabled
	    or disabled from the busybox.defs.h header file, without trying to
	    compile in a source file named after that featue (unless that file
	    exists).
	* Several options are now moved into busybox.defs.h Now 'rm -R' and 'rm
	* -r' both work.  dd now properly handles input beyond 1 block from
	* stdin.  Fixed a bug where tar unpacked everything a directories.
	* Moved some code 
	    from createPath into mkdir where it belonged, thereby making tar
	    work properly.
	* Fixed an off-by-one bug in cat.  Given a list of file it wouldn't cat
	* out the
	    last file in the list.
	* Fixed 'ls -ln' so numeric group/uid are presented properly, and fixed
	* 'ls -l' 
	    so when uid/gid is not in /etc/{passwd,group} the numeric group/uid
	    are presented properly.  
	* Also added a TODO.


	-Erik Andersen, Nov 25, 1999

0.36
	* fixed dd so it properly defaults to stdin and stdout when no 
	    if= and of= are set (fix thanks to Eric Delaunay).
	* Don't try to close the file descriptor of a pipein tar. (fix also
	* from
	    Eric Delaunay).
	* Made createPath be quiet (again thanks to Eric Delaunay).  If
	* CONFIG_CONSOLE_CMD_IF_RC_SCRIPT_EXITS is defined, then whatever
	    command you define it as will be run if the init script exits.
	* Updated install.sh to make it more robust (thanks to Adam Di Carlo)
	* NFS support added to mount by Eric Delaunay.  It costs 10k when
	* compiled
	    in, but that is still a big win for those that use NFS.
	* Made 'rm -f' be silent for non-existant files (thanks to Eric
	* Delaunay).  changed zcat.c to gunzip.c.  It now obeys the principle
	* of least surprise 
	    and acts as god intended gunzip and zcat to act.  They answer
	    --help and obey the '-c' flag.
	* Fixed a bug in mv which caused it to not move files when the
	* destination
	    was a directory.
	* Fixed a decimal-instead-of-octal bug causing mkdir to make
	* directories
	    with very wrong permissions.
	* chmod would overwrite file permissions instead of modifying them.
	    Now it properly modifies permissions.
	* Init now sends warnings destined for the console to /dev/console to
	* ensure
	    they show up on whatever the active console it.  Otherwise
	    important messages (for example that the system is rebooting) were
	    not seen when switched to a different VT.

	-Erik Andersen, Nov 17, 1999
	
0.35
	* gzip now obeys the principle of least surprise and acts like god
	* intended 
	    (i.e. it accepts a file name, answers --help, and obeys the '-c'
	    flag and only then outputs to stdout).
	* Fixed more.c to compile autowidth on sparc and set initial winsize 
	    to 0,0 in case the TIOCGWINSZ ioctl fails.  Fix thanks to Eric
	    Delaunay.
	* Fixed tar so it now works as expected (it had TRUE/FALSE backwards)
	* tar now accepts --help chmod, chown, and chgrp usage now works
	* General usage (i.e. --help) cleanups for most apps umount now parses
	* options correctly tar can now unpack tarballs containing device
	* special files, 
	    sockets, and fifos (though it can't pack them up) thanks to Matt
	    Porter.  Creating archives containing these is still left to the
	    interested student.
	* fixed up the license in more.c to properly point to Bruce Perens.

	-Erik Andersen, Nov  11, 1999

0.34
	* ls -l now displays link names outside the current directory,
	    Patch thanks to Eric Delaunay
	* init now properly handles sparc serial consoles and does a
	    better job of finding the real console device rather than using
	    /dev/console which doesn't support job control. Patch also thanks
	    to Eric Delaunay.
	* more started to read from stdin after the last file was finished, and 
	    options were not parsed correctly (fix thanks to Eric Delaunay).
	* more will now use the terminal size if CONFIG_FEATURE_AUTOWIDTH is on.
	* rm wouldn't remove a symlink unless the symlink was valid.  This was
	    a side effect of the busybox 0.32 recursiveAction() fix.  Things
	    should now work correctly.
	* grep wouldn't grep stdin.  Now it does.  sed wouldn't sed stdin.  Now
	* it does.  sed was appending a \n to the end of lines with
	* replacements.
	    Now it doesn't do that.
	* ls -l now bypasses libc6 nss when displaying user/group names.
	    Now uses my_getpwuid and my_getgrgid.

	 -Erik Andersen, Nov  8, 1999

0.33
	* Fixed a bug where init could hang instead of rebooting.
	* Removed some debugging noise from init.c
	* Fixed ln so it works now (it was very broken).
	* Fixed df so it won't segfault when there is no /etc/fstab,
	* If CONFIG_MTAB is not defined, df and mount will whine if /etc/fstab
	    is not installed (since they cannot fixup "/dev/root" to 
	    state the real root device name)
	* merged some redundant code from mtab.c/df.c into utility.c

	 -Erik Andersen, Nov  5, 1999

0.32
	* More changes -- If you have any problems please let me know ASAP at
	    andersee@debian.org
	* usage() now prints the BusyBox version.  This will help folks
	    realize that they are not in Kansas anymore.
	* Fixed mkdir -m option so that it works.  kill segfaulted w/o any
	* arguments.  Now it doesn't do that.  kill wasn't properly accepting
	* signal names.  It does now.  Added new apps chvt and deallocvt (I
	* should probably add open) Major rewrite of init.c.  Code is now
	* readable by mere mortals IMHO.  Wrote sed -- weighs only 1.8k (5.8k
	* with full regular expressions!).  Fixed a stupid seg-fault in sync
	* Fixed mount -- mount -a failed to parse and apply mount options Fixed
	* umount -n (patch thanks to Matthew Grant <grantma@anathoth.gen.nz>)
	* umount -a no longer umounts /proc Added CONFIG_MTAB, allowing (at the
	* cost of ~1.5k and the need for a rw /etc)
	    folks to use a real /etc/mtab file instead of a symlink to
	    /proc/mounts.  mount, and umount will add/remove entries and df
	    will now use /etc/mtab if CONFIG_MTAB is defined. 
	* Fixed a nice bug in recursiveAction() which caused it to infinitely
	    hunt through /proc/../fd/* creating new file descriptors if it
	    followed the /dev/fd link over to /proc.  recursiveAction() now
	    lstat's the file when followLinks==FALSE so it won't follow links
	    as the name suggests.  Fix thanks to Matt Porter
	    <porter@debian.org>.


	 -Erik Andersen, Nov  4, 1999

0.31
	* I added a changelog for version 0.30.  adjusted find internals to
	* make it smaller, and removed 
	    some redundancy.
	* Fixed a segfault in ps when /etc/passwd or /etc/group 
	    are absent.  Now will warn you and carry on.
	* Added in optional _real_ regular expression support (to be
	    the basis for a future sed utility).  When compiled in it adds
	    3.9k, but makes grep much more capable.
	* Checked out using nftw(3) for recursive stuff, but unfortunatly
	    it wasn't supported before GNU libc 2.1, and some folks use glibc
	    2.0.7 since it is much smaller than that latest and greatest.

	 -Erik Andersen, Oct 21, 1999

0.30
	Major changes -- lots of stuff rewritten.  If you have any problems 
	with busybox, or notice any bugs -- please let me know so I can fix 
	it.  These changes include:

	Core Changes:
	    * busybox can now invoke apps in two ways: via symlinks to the
		busybox binary, and as 'busybox [function] [arguments]...'
	    * When invoked as busybox, the list of currently compiled in 
		functions is printed out (no this is not bloat -- the list has
		to be there anyway to map invocation name to function).
	    * busybox no longer parses command lines for apps or displays their
		usage info.  Each app gets to handle (or not handle) this for
		itself.
	    * Eliminated monadic, dyadic, descend, block_device, and 
		postprocess.  It was cumbersome to have so many programs
		cobbled together in this way.  Without them, the app is much
		more granular.
	    * All shared code now lives in utility.c, and is properly
		ifdef'ed to be only included for those apps requiring it.
	    * Eliminated struct FileInfo (the basis of monadic, dyadic, etc)
		so now each app has the function prototype of (da-dum): extern
		int foo_main(int argc, char** argv); which speeds integration
		of new apps.
	    * Adjusted the Makefile to make it easier to 
		{en|dis}able debugging.
	    * Changed default compiler optimization to -Os 
		(optimize for smaller binaries).

	App Changes:
	    * To cope with the new app function prototype and the removal of
		monadic, dyadic, etc, the following apps were re-written:
		    * cat - Works same as always.  chgrp, chmod, chown -
		    * rewrite.  Combined into a single 
			source file.  Absorbed patches from Enrique Zanardi
			<ezanard@debian.org> that removes the dependency on
			libc6 libnss* libraries.
		    * cp - Can now do 'cp -a' can can copy devices,
			pipes, symlinks, as well as recursive or non-recursive
			dir copies.
		    * fdflush - adjusted to remove dependancy on struct
		    * FileInfo.  find - Now includes some basic regexp matching 
			which will be the basic of a future mini-sed.
		    * ln - Same functionality.  mkdir - Added -p flag to
		    * feature set.  mv - rewrite.  rm - Added -f flag to
		    * feature set.  rmdir - Same functionality.  swapon,
		    * swapoff - Combined into a single binary. No longer
			uses /etc/swaps.  swap{on|off} -a uses /etc/fstab
			instead.
		    * touch - Same functionality.  date - adjusted with a patch
		    * from Matthew Grant <grantma@anathoth.gen.nz>
		to accomodate glibc timezone support.  I then ripped out GNU
		getopt.
	    * mkswap -- new version merged from util-linux.  Can now make 
			>128Meg swaps.  
		* Replaced the old and star, unstar, and tarcat with the tar 
			implementation from sash.   Now tar behaves as god intended it
			to (i.e. tar -xvf <file> and tar -cf <file> <dir> work).
	    * dd -- rewritten.  Can with with files, stdin, stdout.  Added the
	    * following new apps: loadfont -- added from debian boot floppies
	    * chroot -- added based on a patch from Paolo Molaro
	    * <lupus@lettere.unipd.it> grep -- I just wrote it.  Only matches
	    * simple strings ps -- I just wrote it.  Has _no_ options at all,
	    * but works.  fsck_minix, mkfs_minix -- added from util-linux, but
	    * I ripped out
			internationalization and such to make them smaller.
		    * sfdisk -- Added from util-linux (minus
		    * internationalization and such).  Probably some other
		    * changes that I forgot to document...

	 -Erik Andersen, Oct 20, 1999

0.29	
	This version was a messy pre-alpha.  stay away or it will bite you.
	 -Erik Andersen, Sep 24, 1999
	
0.28	
	mini-netcat (mnc) rewritten.
	
0.27
	Mount now supports -a, and -t auto.
	Mount now updates mtab correctly for 'ro'.
	More checks screen rows size, outputs bytes percentage.
	Printf added as module.
0.26
	Touch now creates files. -c option for no create.
	
