Ver código fonte

upgrade busybox to v1.11.1 and add current upstream fixes

SVN-Revision: 12348
Imre Kaloz 17 anos atrás
pai
commit
1e82faaa5e
58 arquivos alterados com 2187 adições e 1220 exclusões
  1. 2 2
      package/busybox/Makefile
  2. 57 33
      package/busybox/config/Config.in
  3. 47 31
      package/busybox/config/archival/Config.in
  4. 1 1
      package/busybox/config/console-tools/Config.in
  5. 24 3
      package/busybox/config/coreutils/Config.in
  6. 30 29
      package/busybox/config/e2fsprogs/Config.in
  7. 13 4
      package/busybox/config/editors/Config.in
  8. 12 12
      package/busybox/config/findutils/Config.in
  9. 30 7
      package/busybox/config/init/Config.in
  10. 33 9
      package/busybox/config/libbb/Config.in
  11. 76 32
      package/busybox/config/loginutils/Config.in
  12. 139 14
      package/busybox/config/miscutils/Config.in
  13. 66 6
      package/busybox/config/modutils/Config.in
  14. 126 28
      package/busybox/config/networking/Config.in
  15. 65 17
      package/busybox/config/networking/udhcp/Config.in
  16. 21 0
      package/busybox/config/printutils/Config.in
  17. 15 0
      package/busybox/config/procps/Config.in
  18. 7 0
      package/busybox/config/selinux/Config.in
  19. 36 22
      package/busybox/config/shell/Config.in
  20. 10 2
      package/busybox/config/sysklogd/Config.in
  21. 309 9
      package/busybox/config/util-linux/Config.in
  22. 15 10
      package/busybox/patches/000-autoconf.patch
  23. 20 0
      package/busybox/patches/001-init_avoid_loop_opening_tty.patch
  24. 4 6
      package/busybox/patches/110-wget_getopt_fix.patch
  25. 2 4
      package/busybox/patches/140-trylink_bash.patch
  26. 8 12
      package/busybox/patches/200-etc_crontabs.patch
  27. 12 14
      package/busybox/patches/240-udhcpc_retries.patch
  28. 40 54
      package/busybox/patches/241-udhcpc-oversized_packets.patch
  29. 8 12
      package/busybox/patches/242-udhcpc_msgs.patch
  30. 5 7
      package/busybox/patches/243-udhcpc_changed_ifindex.patch
  31. 7 10
      package/busybox/patches/250-ash_export-n.patch
  32. 27 23
      package/busybox/patches/300-netmsg.patch
  33. 0 45
      package/busybox/patches/310-passwd_access.patch
  34. 27 23
      package/busybox/patches/340-lock_util.patch
  35. 27 31
      package/busybox/patches/350-httpd_redir.patch
  36. 0 72
      package/busybox/patches/360-awk_multi_f.patch
  37. 0 39
      package/busybox/patches/401-darwin_includes.patch
  38. 4 6
      package/busybox/patches/410-httpd_cgi_headers.patch
  39. 5 7
      package/busybox/patches/430-uniq_memleak.patch
  40. 5 7
      package/busybox/patches/440-httpd_chdir.patch
  41. 0 12
      package/busybox/patches/450-usage_compressed_fix.patch
  42. 4 6
      package/busybox/patches/460-truncated_ping_results.patch
  43. 281 39
      package/busybox/patches/470-insmod_search.patch
  44. 0 40
      package/busybox/patches/480-disable_braindead_optimization.patch
  45. 158 310
      package/busybox/patches/500-ipkg.patch
  46. 37 51
      package/busybox/patches/501-libbb_hash.patch
  47. 47 56
      package/busybox/patches/510-awx.patch
  48. 6 12
      package/busybox/patches/520-ipkg_secure.patch
  49. 2 4
      package/busybox/patches/521-ipkg_upgrade_env.patch
  50. 11 20
      package/busybox/patches/523-conffiles_fix.patch
  51. 10 18
      package/busybox/patches/524-memory_usage.patch
  52. 4 6
      package/busybox/patches/524-udhcpc_renew.patch
  53. 2 3
      package/busybox/patches/525-clean_temp.patch
  54. 43 0
      package/busybox/patches/526-ipkg_fix_pkg_comparison.patch
  55. 9 0
      package/busybox/patches/901-basename.patch
  56. 55 0
      package/busybox/patches/902-tar.patch
  57. 155 0
      package/busybox/patches/903-ash.patch
  58. 28 0
      package/busybox/patches/904-build.patch

+ 2 - 2
package/busybox/Makefile

@@ -9,13 +9,13 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=busybox
-PKG_VERSION:=1.8.2
+PKG_VERSION:=1.11.1
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
 PKG_SOURCE_URL:=http://www.busybox.net/downloads \
 		http://distfiles.gentoo.org/distfiles/
-PKG_MD5SUM:=5794c6187c7cc8176c52b96af9bf2478
+PKG_MD5SUM:=c64bbb5c0c3e19f12892941a0ae86c48
 
 include $(INCLUDE_DIR)/package.mk
 

+ 57 - 33
package/busybox/config/Config.in

@@ -12,22 +12,6 @@ menu "Busybox Settings"
 
 menu "General Configuration"
 
-config BUSYBOX_CONFIG_NITPICK
-	bool "See lots more (probably unnecessary) configuration options."
-	default n
-	help
-	  Some BusyBox applets have more configuration options than anyone
-	  will ever care about.  To avoid drowining people in complexity, most
-	  of the applet features that can be set to a sane default value are
-	  hidden, unless you hit the above switch.
-
-	  This is better than to telling people to edit the busybox source
-	  code, but not by much.
-
-	  See http://en.wikipedia.org/wiki/Fibber_McGee_and_Molly#The_Closet
-
-	  You have been warned.
-
 config BUSYBOX_CONFIG_DESKTOP
 	bool "Enable options for full-blown desktop systems"
 	default n
@@ -36,10 +20,21 @@ config BUSYBOX_CONFIG_DESKTOP
 	  Select this only if you plan to use busybox on full-blown
 	  desktop machine with common Linux distro, not on an embedded box.
 
+config BUSYBOX_CONFIG_FEATURE_ASSUME_UNICODE
+	bool "Assume that 1:1 char/glyph correspondence is not true"
+	default n
+	help
+	  This makes various applets aware that one byte is not
+	  one character on screen.
+
+	  Busybox aims to eventually work correctly with Unicode displays.
+	  Any older encodings are not guaranteed to work.
+	  Probably by the time when busybox will be fully Unicode-clean,
+	  other encodings will be mainly of historic interest.
+
 choice
 	prompt "Buffer allocation policy"
 	default BUSYBOX_CONFIG_FEATURE_BUFFERS_GO_ON_STACK
-	depends on BUSYBOX_CONFIG_NITPICK
 	help
 	  There are 3 ways BusyBox can handle buffer allocations:
 	  - Use malloc. This costs code size for the call to xmalloc.
@@ -110,7 +105,7 @@ config BUSYBOX_CONFIG_LOCALE_SUPPORT
 	  busybox to support locale settings.
 
 config BUSYBOX_CONFIG_GETOPT_LONG
-	bool "Enable support for --long-options"
+	bool "Support for --long-options"
 	default y
 	help
 	  Enable this if you want busybox applets to use the gnu --long-option
@@ -129,7 +124,6 @@ config BUSYBOX_CONFIG_FEATURE_DEVPTS
 config BUSYBOX_CONFIG_FEATURE_CLEAN_UP
 	bool "Clean up all memory before exiting (usually not needed)"
 	default n
-	depends on BUSYBOX_CONFIG_NITPICK
 	help
 	  As a size optimization, busybox normally exits without explicitly
 	  freeing dynamically allocated memory or closing files.  This saves
@@ -279,10 +273,31 @@ config BUSYBOX_CONFIG_STATIC
 
 	  Most people will leave this set to 'N'.
 
+config BUSYBOX_CONFIG_PIE
+	bool "Build BusyBox as a position independent executable"
+	default n
+	depends on !BUSYBOX_CONFIG_STATIC
+	help
+	  (TODO: what is it and why/when is it useful?)
+	  Most people will leave this set to 'N'.
+
+config BUSYBOX_CONFIG_NOMMU
+	bool "Force NOMMU build"
+	default n
+	help
+	  Busybox tries to detect whether architecture it is being
+	  built against supports MMU or not. If this detection fails,
+	  or if you want to build NOMMU version of busybox for testing,
+	  you may force NOMMU build here.
+
+	  Most people will leave this set to 'N'.
+
+# PIE can be made to work with BUILD_LIBBUSYBOX, but currently
+# build system does not support that
 config BUSYBOX_CONFIG_BUILD_LIBBUSYBOX
 	bool "Build shared libbusybox"
 	default n
-	depends on !BUSYBOX_CONFIG_FEATURE_PREFER_APPLETS
+	depends on !BUSYBOX_CONFIG_FEATURE_PREFER_APPLETS && !BUSYBOX_CONFIG_PIE && !BUSYBOX_CONFIG_STATIC
 	help
 	  Build a shared library libbusybox.so.N.N.N which contains all
 	  busybox code.
@@ -369,6 +384,16 @@ config BUSYBOX_CONFIG_LFS
 	  cp, mount, tar, and many others.  If you want to access files larger
 	  than 2 Gigabytes, enable this option.  Otherwise, leave it set to 'N'.
 
+config BUSYBOX_CONFIG_CROSS_COMPILER_PREFIX
+	string "Cross Compiler prefix"
+	default ""
+	help
+	  If you want to build BusyBox with a cross compiler, then you
+	  will need to set this to the cross-compiler prefix, for example,
+	  "i386-uclibc-". Note that CROSS_COMPILE environment variable
+	  or "make CROSS_COMPILE=xxx ..." will override this selection.
+	  For native build leave it empty.
+
 endmenu
 
 menu 'Debugging Options'
@@ -384,6 +409,17 @@ config BUSYBOX_CONFIG_DEBUG
 
 	  Most people should answer N.
 
+config BUSYBOX_CONFIG_DEBUG_PESSIMIZE
+	bool "Disable compiler optimizations."
+	default n
+	depends on BUSYBOX_CONFIG_DEBUG
+	help
+	  The compiler's optimization of source code can eliminate and reorder
+	  code, resulting in an executable that's hard to understand when
+	  stepping through it with a debugger.  This switches it off, resulting
+	  in a much bigger executable that more closely matches the source
+	  code.
+
 config BUSYBOX_CONFIG_WERROR
 	bool "Abort compilation on any warning"
 	default n
@@ -392,18 +428,6 @@ config BUSYBOX_CONFIG_WERROR
 
 	  Most people should answer N.
 
-# Seems to be unused
-#config DEBUG_PESSIMIZE
-#	bool "Disable compiler optimizations."
-#	default n
-#	depends on DEBUG
-#	help
-#	  The compiler's optimization of source code can eliminate and reorder
-#	  code, resulting in an executable that's hard to understand when
-#	  stepping through it with a debugger.  This switches it off, resulting
-#	  in a much bigger executable that more closely matches the source
-#	  code.
-
 choice
 	prompt "Additional debugging library"
 	default BUSYBOX_CONFIG_NO_DEBUG_LIB
@@ -554,4 +578,4 @@ source package/busybox/config/shell/Config.in
 source package/busybox/config/sysklogd/Config.in
 source package/busybox/config/runit/Config.in
 source package/busybox/config/selinux/Config.in
-source package/busybox/config/ipsvd/Config.in
+source package/busybox/config/printutils/Config.in

+ 47 - 31
package/busybox/config/archival/Config.in

@@ -29,7 +29,7 @@ config BUSYBOX_CONFIG_AR
 	  probably say N here.
 
 config BUSYBOX_CONFIG_FEATURE_AR_LONG_FILENAMES
-	bool "Enable support for long filenames (not need for debs)"
+	bool "Support for long filenames (not need for debs)"
 	default n
 	depends on BUSYBOX_CONFIG_AR
 	help
@@ -78,6 +78,14 @@ config BUSYBOX_CONFIG_CPIO
 	  Unless you have a specific application which requires cpio, you should
 	  probably say N here.
 
+config BUSYBOX_CONFIG_FEATURE_CPIO_O
+	bool "Support for archive creation"
+	default n
+	depends on BUSYBOX_CONFIG_CPIO
+	help
+	  This implementation of cpio can create cpio archives in the "newc"
+	  format only.
+
 config BUSYBOX_CONFIG_DPKG
 	bool "dpkg"
 	default n
@@ -99,7 +107,7 @@ config BUSYBOX_CONFIG_DPKG_DEB
 	  probably say N here.
 
 config BUSYBOX_CONFIG_FEATURE_DPKG_DEB_EXTRACT_ONLY
-	bool "extract only (-x)"
+	bool "Extract only (-x)"
 	default n
 	depends on BUSYBOX_CONFIG_DPKG_DEB
 	help
@@ -137,8 +145,6 @@ config BUSYBOX_CONFIG_IPKG
 	select BUSYBOX_CONFIG_MD5SUM
 	select BUSYBOX_CONFIG_WGET
 	select BUSYBOX_CONFIG_DIFF
-	select BUSYBOX_CONFIG_TAR
-	select BUSYBOX_CONFIG_GUNZIP
 	help
 	  ipkg is the itsy package management system.
 
@@ -177,6 +183,14 @@ config BUSYBOX_CONFIG_FEATURE_TAR_CREATE
 	  If you enable this option you'll be able to create
 	  tar archives using the `-c' option.
 
+config BUSYBOX_CONFIG_FEATURE_TAR_GZIP
+	bool "Enable -z option"
+	default y
+	depends on BUSYBOX_CONFIG_TAR
+	help
+	  If you enable this option tar will be able to call gzip,
+	  when creating or extracting tar gziped archives.
+
 config BUSYBOX_CONFIG_FEATURE_TAR_BZIP2
 	bool "Enable -j option to handle .tar.bz2 files"
 	default y
@@ -193,22 +207,6 @@ config BUSYBOX_CONFIG_FEATURE_TAR_LZMA
 	  If you enable this option you'll be able to extract
 	  archives compressed with lzma.
 
-config BUSYBOX_CONFIG_FEATURE_TAR_FROM
-	bool "Enable -X (exclude from) and -T (include from) options)"
-	default y
-	depends on BUSYBOX_CONFIG_TAR
-	help
-	  If you enable this option you'll be able to specify
-	  a list of files to include or exclude from an archive.
-
-config BUSYBOX_CONFIG_FEATURE_TAR_GZIP
-	bool "Enable -z option"
-	default y
-	depends on BUSYBOX_CONFIG_TAR
-	help
-	  If you enable this option tar will be able to call gzip,
-	  when creating or extracting tar gziped archives.
-
 config BUSYBOX_CONFIG_FEATURE_TAR_COMPRESS
 	bool "Enable -Z option"
 	default n
@@ -217,8 +215,24 @@ config BUSYBOX_CONFIG_FEATURE_TAR_COMPRESS
 	  If you enable this option tar will be able to call uncompress,
 	  when extracting .tar.Z archives.
 
+config BUSYBOX_CONFIG_FEATURE_TAR_AUTODETECT
+	bool "Let tar autodetect gz/bz2 compresses tarballs"
+	default n
+	depends on BUSYBOX_CONFIG_FEATURE_TAR_GZIP || BUSYBOX_CONFIG_FEATURE_TAR_BZIP2
+	help
+	  With this option tar can automatically detect gzip/bzip2 compressed
+	  tarballs. Currently it works only on seekable streams.
+
+config BUSYBOX_CONFIG_FEATURE_TAR_FROM
+	bool "Enable -X (exclude from) and -T (include from) options)"
+	default y
+	depends on BUSYBOX_CONFIG_TAR
+	help
+	  If you enable this option you'll be able to specify
+	  a list of files to include or exclude from an archive.
+
 config BUSYBOX_CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY
-	bool "Enable support for old tar header format"
+	bool "Support for old tar header format"
 	default n
 	depends on BUSYBOX_CONFIG_TAR
 	help
@@ -236,7 +250,7 @@ config BUSYBOX_CONFIG_FEATURE_TAR_OLDSUN_COMPATIBILITY
 	  It is said to be fixed in newer Sun tar, but "old" tarballs still exist.
 
 config BUSYBOX_CONFIG_FEATURE_TAR_GNU_EXTENSIONS
-	bool "Enable support for some GNU tar extensions"
+	bool "Support for GNU tar extensions (long filenames)"
 	default y
 	depends on BUSYBOX_CONFIG_TAR
 	help
@@ -248,7 +262,16 @@ config BUSYBOX_CONFIG_FEATURE_TAR_LONG_OPTIONS
 	default n
 	depends on BUSYBOX_CONFIG_TAR && BUSYBOX_CONFIG_GETOPT_LONG
 	help
-		Enable use of long options, increases size by about 400 Bytes
+	  Enable use of long options, increases size by about 400 Bytes
+
+config BUSYBOX_CONFIG_FEATURE_TAR_UNAME_GNAME
+	bool "Enable use of user and group names"
+	default n
+	depends on BUSYBOX_CONFIG_TAR
+	help
+	  Enables use of user and group names in tar. This affects contents
+	  listings (-t) and preserving permissions when unpacking (-p).
+	  +200 bytes.
 
 config BUSYBOX_CONFIG_UNCOMPRESS
 	bool "uncompress"
@@ -273,7 +296,7 @@ config BUSYBOX_CONFIG_UNLZMA
 	  should probably say N here.
 
 config BUSYBOX_CONFIG_FEATURE_LZMA_FAST
-	bool "Optimze unlzma for speed"
+	bool "Optimize unlzma for speed"
 	default n
 	depends on BUSYBOX_CONFIG_UNLZMA
 	help
@@ -293,13 +316,6 @@ config BUSYBOX_CONFIG_UNZIP
 comment "Common options for cpio and tar"
 	depends on BUSYBOX_CONFIG_CPIO || BUSYBOX_CONFIG_TAR
 
-config BUSYBOX_CONFIG_FEATURE_UNARCHIVE_TAPE
-	bool "Enable tape drive support"
-	default n
-	depends on BUSYBOX_CONFIG_CPIO || BUSYBOX_CONFIG_TAR
-	help
-	  I don't think this is needed anymore.
-
 comment "Common options for dpkg and dpkg_deb"
 	depends on BUSYBOX_CONFIG_DPKG || BUSYBOX_CONFIG_DPKG_DEB
 

+ 1 - 1
package/busybox/config/console-tools/Config.in

@@ -72,7 +72,7 @@ config BUSYBOX_CONFIG_RESIZE
 	  terminal.
 
 config BUSYBOX_CONFIG_FEATURE_RESIZE_PRINT
-	bool "print environment variables"
+	bool "Print environment variables"
 	default n
 	depends on BUSYBOX_CONFIG_RESIZE
 	help

+ 24 - 3
package/busybox/config/coreutils/Config.in

@@ -135,6 +135,13 @@ config BUSYBOX_CONFIG_DF
 	  df reports the amount of disk space used and available
 	  on filesystems.
 
+config BUSYBOX_CONFIG_FEATURE_DF_INODE
+	bool "Enable -i (inode information)"
+	default n
+	depends on BUSYBOX_CONFIG_DF
+	help
+	  This option enables support for df -i.
+
 config BUSYBOX_CONFIG_DIRNAME
 	bool "dirname"
 	default y
@@ -481,6 +488,14 @@ config BUSYBOX_CONFIG_RMDIR
 	help
 	  rmdir is used to remove empty directories.
 
+config BUSYBOX_CONFIG_FEATURE_RMDIR_LONG_OPTIONS
+	bool "Enable long options"
+	default n
+	depends on BUSYBOX_CONFIG_RMDIR && BUSYBOX_CONFIG_GETOPT_LONG
+	help
+	  Support long options for the rmdir applet, including
+	  --ignore-fail-on-non-empty for compatibility with GNU rmdir.
+
 config BUSYBOX_CONFIG_SEQ
 	bool "seq"
 	default y
@@ -513,7 +528,7 @@ config BUSYBOX_CONFIG_SORT
 	  sort is used to sort lines of text in specified files.
 
 config BUSYBOX_CONFIG_FEATURE_SORT_BIG
-	bool "full SuSv3 compliant sort (Support -ktcsbdfiozgM)"
+	bool "Full SuSv3 compliant sort (support -ktcsbdfiozgM)"
 	default n
 	depends on BUSYBOX_CONFIG_SORT
 	help
@@ -531,7 +546,7 @@ config BUSYBOX_CONFIG_SPLIT
 	  split a file into pieces.
 
 config BUSYBOX_CONFIG_FEATURE_SPLIT_FANCY
-	bool "fancy extensions"
+	bool "Fancy extensions"
 	default n
 	depends on BUSYBOX_CONFIG_SPLIT
 	help
@@ -572,6 +587,12 @@ config BUSYBOX_CONFIG_SYNC
 	help
 	  sync is used to flush filesystem buffers.
 
+config BUSYBOX_CONFIG_TAC
+	bool "tac"
+	default n
+	help
+	  tac is used to concatenate and print files in reverse.
+
 config BUSYBOX_CONFIG_TAIL
 	bool "tail"
 	default y
@@ -595,7 +616,7 @@ config BUSYBOX_CONFIG_TEE
 	  to standard output and files.
 
 config BUSYBOX_CONFIG_FEATURE_TEE_USE_BLOCK_IO
-	bool "Enable block i/o (larger/faster) instead of byte i/o."
+	bool "Enable block I/O (larger/faster) instead of byte I/O"
 	default y
 	depends on BUSYBOX_CONFIG_TEE
 	help

+ 30 - 29
package/busybox/config/e2fsprogs/Config.in

@@ -12,13 +12,13 @@ config BUSYBOX_CONFIG_CHATTR
 	  chattr changes the file attributes on a second extended file system.
 
 ### config E2FSCK
-### 	bool "e2fsck"
-### 	default n
-### 	help
-### 	  e2fsck is used to check Linux second extended file systems (ext2fs).
-### 	  e2fsck also supports ext2 filesystems countaining a journal (ext3).
-### 	  The normal compat symlinks 'fsck.ext2' and 'fsck.ext3' are also
-### 	  provided.
+###	bool "e2fsck"
+###	default n
+###	help
+###	  e2fsck is used to check Linux second extended file systems (ext2fs).
+###	  e2fsck also supports ext2 filesystems countaining a journal (ext3).
+###	  The normal compat symlinks 'fsck.ext2' and 'fsck.ext3' are also
+###	  provided.
 
 config BUSYBOX_CONFIG_FSCK
 	bool "fsck"
@@ -35,33 +35,34 @@ config BUSYBOX_CONFIG_LSATTR
 	  lsattr lists the file attributes on a second extended file system.
 
 ### config MKE2FS
-### 	bool "mke2fs"
-### 	default n
-### 	help
-### 	  mke2fs is used to create an ext2/ext3 filesystem.  The normal compat
-### 	  symlinks 'mkfs.ext2' and 'mkfs.ext3' are also provided.
+###	bool "mke2fs"
+###	default n
+###	help
+###	  mke2fs is used to create an ext2/ext3 filesystem.  The normal compat
+###	  symlinks 'mkfs.ext2' and 'mkfs.ext3' are also provided.
 
 ### config TUNE2FS
-### 	bool "tune2fs"
-### 	default n
-### 	help
-### 	  tune2fs allows the system administrator to adjust various tunable
-### 	  filesystem parameters on Linux ext2/ext3 filesystems.
+###	bool "tune2fs"
+###	default n
+###	help
+###	  tune2fs allows the system administrator to adjust various tunable
+###	  filesystem parameters on Linux ext2/ext3 filesystems.
 
 ### config E2LABEL
-### 	bool "e2label"
-### 	default n
-### 	depends on TUNE2FS
-### 	help
-### 	  e2label will display or change the filesystem label on the ext2
-### 	  filesystem located on device.
+###	bool "e2label"
+###	default n
+###	depends on TUNE2FS
+###	help
+###	  e2label will display or change the filesystem label on the ext2
+###	  filesystem located on device.
 
+### NB: this one is now provided by util-linux/volume_id/*
 ### config FINDFS
-### 	bool "findfs"
-### 	default n
-### 	depends on TUNE2FS
-### 	help
-### 	  findfs will search the disks in the system looking for a filesystem
-### 	  which has a label matching label or a UUID equal to uuid.
+###	bool "findfs"
+###	default n
+###	depends on TUNE2FS
+###	help
+###	  findfs will search the disks in the system looking for a filesystem
+###	  which has a label matching label or a UUID equal to uuid.
 
 endmenu

+ 13 - 4
package/busybox/config/editors/Config.in

@@ -97,14 +97,23 @@ config BUSYBOX_CONFIG_VI
 	  you may wish to use something else.
 
 config BUSYBOX_CONFIG_FEATURE_VI_MAX_LEN
-	int "Maximum line length in vi"
+	int "Maximum screen width in vi"
 	range 256 16384
 	default 1024
 	depends on BUSYBOX_CONFIG_VI
 	help
-	  vi uses on-stack buffers for intermediate line buffers.
-	  You may want to decrease this parameter if your target machine
-	  benefits from smaller stack usage.
+	  Contrary to what you may think, this is not eating much.
+	  Make it smaller than 4k only if you are very limited on memory.
+
+config BUSYBOX_CONFIG_FEATURE_VI_8BIT
+	bool "Allow vi to display 8-bit chars (otherwise shows dots)"
+	default n
+	depends on BUSYBOX_CONFIG_VI
+	help
+	  If your terminal can display characters with high bit set,
+	  you may want to enable this. Note: vi is not Unicode-capable.
+	  If your terminal combines several 8-bit bytes into one character
+	  (as in Unicode mode), this will not work properly.
 
 config BUSYBOX_CONFIG_FEATURE_VI_COLON
 	bool "Enable \":\" colon commands (no \"ex\" mode)"

+ 12 - 12
package/busybox/config/findutils/Config.in

@@ -22,7 +22,7 @@ config BUSYBOX_CONFIG_FEATURE_FIND_PRINT0
 	  interpreted by other programs.
 
 config BUSYBOX_CONFIG_FEATURE_FIND_MTIME
-	bool "Enable modified time matching (-mtime) option"
+	bool "Enable modified time matching (-mtime option)"
 	default n
 	depends on BUSYBOX_CONFIG_FIND
 	help
@@ -30,7 +30,7 @@ config BUSYBOX_CONFIG_FEATURE_FIND_MTIME
 	  files, in days.
 
 config BUSYBOX_CONFIG_FEATURE_FIND_MMIN
-	bool "Enable modified time matching (-mmin) option"
+	bool "Enable modified time matching (-mmin option)"
 	default n
 	depends on BUSYBOX_CONFIG_FIND
 	help
@@ -38,14 +38,14 @@ config BUSYBOX_CONFIG_FEATURE_FIND_MMIN
 	  files, in minutes.
 
 config BUSYBOX_CONFIG_FEATURE_FIND_PERM
-	bool "Enable permissions matching (-perm) option"
+	bool "Enable permissions matching (-perm option)"
 	default y
 	depends on BUSYBOX_CONFIG_FIND
 	help
 	  Enable searching based on file permissions.
 
 config BUSYBOX_CONFIG_FEATURE_FIND_TYPE
-	bool "Enable filetype matching (-type) option"
+	bool "Enable filetype matching (-type option)"
 	default y
 	depends on BUSYBOX_CONFIG_FIND
 	help
@@ -53,7 +53,7 @@ config BUSYBOX_CONFIG_FEATURE_FIND_TYPE
 	  directory, socket, device, etc.).
 
 config BUSYBOX_CONFIG_FEATURE_FIND_XDEV
-	bool "Enable stay in filesystem (-xdev) option"
+	bool "Enable 'stay in filesystem' option (-xdev)"
 	default y
 	depends on BUSYBOX_CONFIG_FIND
 	help
@@ -75,14 +75,14 @@ config BUSYBOX_CONFIG_FEATURE_FIND_NEWER
 	  a modified time that is more recent than the specified FILE.
 
 config BUSYBOX_CONFIG_FEATURE_FIND_INUM
-	bool "Enable inode number matching (-inum) option"
+	bool "Enable inode number matching (-inum option)"
 	default n
 	depends on BUSYBOX_CONFIG_FIND
 	help
 	  Support the 'find -inum' option for searching by inode number.
 
 config BUSYBOX_CONFIG_FEATURE_FIND_EXEC
-	bool "Enable (-exec) option allowing execution of commands"
+	bool "Enable -exec option allowing execution of commands"
 	default y
 	depends on BUSYBOX_CONFIG_FIND
 	help
@@ -90,14 +90,14 @@ config BUSYBOX_CONFIG_FEATURE_FIND_EXEC
 	  the files matched.
 
 config BUSYBOX_CONFIG_FEATURE_FIND_USER
-	bool "Enable username/uid matching (-user) option"
+	bool "Enable username/uid matching (-user option)"
 	default y
 	depends on BUSYBOX_CONFIG_FIND
 	help
 	  Support the 'find -user' option for searching by username or uid.
 
 config BUSYBOX_CONFIG_FEATURE_FIND_GROUP
-	bool "Enable group/gid matching (-group) option"
+	bool "Enable group/gid matching (-group option)"
 	default y
 	depends on BUSYBOX_CONFIG_FIND
 	help
@@ -127,14 +127,14 @@ config BUSYBOX_CONFIG_FEATURE_FIND_PAREN
 	  Enable usage of parens '(' to specify logical order of arguments.
 
 config BUSYBOX_CONFIG_FEATURE_FIND_SIZE
-	bool "Enable (-size) option allowing matching for file size"
+	bool "Enable -size option allowing matching for file size"
 	default y
 	depends on BUSYBOX_CONFIG_FIND
 	help
 	  Support the 'find -size' option for searching by file size.
 
 config BUSYBOX_CONFIG_FEATURE_FIND_PRUNE
-	bool "Enable (-prune) option allowing to exclude subdirectories"
+	bool "Enable -prune option allowing to exclude subdirectories"
 	default y
 	depends on BUSYBOX_CONFIG_FIND
 	help
@@ -165,7 +165,7 @@ config BUSYBOX_CONFIG_FEATURE_FIND_REGEX
 	  The -regex option matches whole pathname against regular expression.
 
 config BUSYBOX_CONFIG_FEATURE_FIND_CONTEXT
-	bool "Enable (-context) option for matching security context"
+	bool "Enable -context option for matching security context"
 	default n
 	depends on BUSYBOX_CONFIG_FIND && BUSYBOX_CONFIG_SELINUX
 	help

+ 30 - 7
package/busybox/config/init/Config.in

@@ -13,7 +13,7 @@ config BUSYBOX_CONFIG_INIT
 	  init is the first program run when the system boots.
 
 config BUSYBOX_CONFIG_DEBUG_INIT
-	bool "debugging aid"
+	bool "Debugging aid"
 	default n
 	depends on BUSYBOX_CONFIG_INIT
 	help
@@ -27,16 +27,39 @@ config BUSYBOX_CONFIG_FEATURE_USE_INITTAB
 	help
 	  Allow init to read an inittab file when the system boot.
 
+config BUSYBOX_CONFIG_FEATURE_KILL_REMOVED
+	bool "Support killing processes that have been removed from inittab"
+	default n
+	depends on BUSYBOX_CONFIG_FEATURE_USE_INITTAB
+	help
+	  When respawn entries are removed from inittab and a SIGHUP is
+	  sent to init, this feature will kill the processes that have
+	  been removed.
+
+config BUSYBOX_CONFIG_FEATURE_KILL_DELAY
+	int "How long to wait between TERM and KILL (0 - send TERM only)" if FEATURE_KILL_REMOVED
+	range 0 1024
+	default 0
+	help
+	  With nonzero setting, init sends TERM, forks, child waits N
+	  seconds, sends KILL and exits. Setting it too high is unwise
+	  (child will hang around for too long and can actually kill
+	  wrong process!)
+
 config BUSYBOX_CONFIG_FEATURE_INIT_SCTTY
-	bool "Support running commands with a controlling-tty"
+	bool "Run commands with leading dash with controlling tty"
 	default n
 	depends on BUSYBOX_CONFIG_INIT
 	help
-	  If this option is enabled a command starting with hyphen (-)
-	  is run in its own session (setsid(2)) and possibly with a
-	  controlling tty (TIOCSCTTY).  This is not the traditional init
-	  behavour, but is often what you want in an embedded system where
-	  the console is only accessed during development or for maintenance.
+	  If this option is enabled, init will try to give a controlling
+	  tty to any command which has leading hyphen (often it's "-/bin/sh").
+	  More precisely, init will do "ioctl(STDIN_FILENO, TIOCSCTTY, 0)".
+	  If device attached to STDIN_FILENO can be a ctty but is not yet
+	  a ctty for other session, it will become this process' ctty.
+	  This is not the traditional init behavour, but is often what you want
+	  in an embedded system where the console is only accessed during
+	  development or for maintenance.
+	  NB: using cttyhack applet may work better.
 
 config BUSYBOX_CONFIG_FEATURE_INIT_SYSLOG
 	bool "Enable init to write to syslog"

+ 33 - 9
package/busybox/config/libbb/Config.in

@@ -13,7 +13,7 @@ config BUSYBOX_CONFIG_PASSWORD_MINLEN
 	  Minimum allowable password length.
 
 config BUSYBOX_CONFIG_MD5_SIZE_VS_SPEED
-	int " MD5: Trade Bytes for Speed"
+	int "MD5: Trade Bytes for Speed"
 	default 2
 	range 0 3
 	help
@@ -57,14 +57,6 @@ config BUSYBOX_CONFIG_FEATURE_EDITING_MAX_LEN
 	  You may want to decrease this parameter if your target machine
 	  benefits from smaller stack usage.
 
-config BUSYBOX_CONFIG_FEATURE_EDITING_FANCY_KEYS
-	bool "Additional editing keys"
-	default y
-	depends on BUSYBOX_CONFIG_FEATURE_EDITING
-	help
-	  Enable additonal editing keys (Ctrl-E, Ctrl-U etc).
-	  Arrow keys, Home/End/Delete and Ctrl-W work even without this option.
-
 config BUSYBOX_CONFIG_FEATURE_EDITING_VI
 	bool "vi-style line editing commands"
 	default n
@@ -110,6 +102,31 @@ config BUSYBOX_CONFIG_FEATURE_EDITING_FANCY_PROMPT
 	  Setting this option allows for prompts to use things like \w and
 	  \$ and escape codes.
 
+config BUSYBOX_CONFIG_FEATURE_VERBOSE_CP_MESSAGE
+	bool "Give more precise messages when copy fails (cp, mv etc)"
+	default n
+	help
+	  Error messages with this feature enabled:
+	    $ cp file /does_not_exist/file
+	    cp: cannot create '/does_not_exist/file': Path does not exist
+	    $ cp file /vmlinuz/file
+	    cp: cannot stat '/vmlinuz/file': Path has non-directory component
+	  If this feature is not enabled, they will be, respectively:
+	    cp: cannot remove '/does_not_exist/file': No such file or directory
+	    cp: cannot stat '/vmlinuz/file': Not a directory
+	  respectively.
+	  This will cost you ~60 bytes.
+
+config BUSYBOX_CONFIG_FEATURE_COPYBUF_KB
+	int "Copy buffer size, in kilobytes"
+	range 1 1024
+	default 4
+	help
+	  Size of buffer used by cp, mv, install etc.
+	  Buffers which are 4 kb or less will be allocated on stack.
+	  Bigger buffers will be allocated with mmap, with fallback to 4 kb
+	  stack buffer if mmap fails.
+
 config BUSYBOX_CONFIG_MONOTONIC_SYSCALL
 	bool "Use clock_gettime(CLOCK_MONOTONIC) syscall"
 	default n
@@ -127,4 +144,11 @@ config BUSYBOX_CONFIG_IOCTL_HEX2STR_ERROR
 	  Use ioctl names rather than hex values in error messages
 	  (e.g. VT_DISALLOCATE rather than 0x5608). If disabled this
 	  saves about 1400 bytes.
+
+config BUSYBOX_CONFIG_FEATURE_HWIB
+	bool "Support infiniband HW"
+	default n
+	help
+	  Support for printing infiniband addresses in
+	  network applets.
 endmenu

+ 76 - 32
package/busybox/config/loginutils/Config.in

@@ -13,45 +13,71 @@ config BUSYBOX_CONFIG_FEATURE_SHADOWPASSWDS
 	  readable by root and thus the encrypted passwords are no longer
 	  publicly readable.
 
+config BUSYBOX_CONFIG_USE_BB_PWD_GRP
+	bool "Use internal password and group functions rather than system functions"
+	default n
+	help
+	  If you leave this disabled, busybox will use the system's password
+	  and group functions.  And if you are using the GNU C library
+	  (glibc), you will then need to install the /etc/nsswitch.conf
+	  configuration file and the required /lib/libnss_* libraries in
+	  order for the password and group functions to work.  This generally
+	  makes your embedded system quite a bit larger.
+
+	  Enabling this option will cause busybox to directly access the
+	  system's /etc/password, /etc/group files (and your system will be
+	  smaller, and I will get fewer emails asking about how glibc NSS
+	  works).  When this option is enabled, you will not be able to use
+	  PAM to access remote LDAP password servers and whatnot.  And if you
+	  want hostname resolution to work with glibc, you still need the
+	  /lib/libnss_* libraries.
+
+	  If you need to use glibc's nsswitch.conf mechanism
+	  (e.g. if user/group database is NOT stored in /etc/passwd etc),
+	  you must NOT use this option.
+
+	  If you enable this option, it will add about 1.5k.
+
 config BUSYBOX_CONFIG_USE_BB_SHADOW
-	bool "  Use busybox shadow password functions"
+	bool "Use internal shadow password functions"
 	default n
 	depends on BUSYBOX_CONFIG_USE_BB_PWD_GRP && BUSYBOX_CONFIG_FEATURE_SHADOWPASSWDS
 	help
-	    If you leave this disabled, busybox will use the system's shadow
-	    password handling functions.  And if you are using the GNU C library
-	    (glibc), you will then need to install the /etc/nsswitch.conf
-	    configuration file and the required /lib/libnss_* libraries in
-	    order for the shadow password functions to work.  This generally
-	    makes your embedded system quite a bit larger.
-
-	    Enabling this option will cause busybox to directly access the
-	    system's /etc/shadow file when handling shadow passwords.  This
-	    makes your system smaller and I will get fewer emails asking about
-	    how glibc NSS works).  When this option is enabled, you will not be
-	    able to use PAM to access shadow passwords from remote LDAP
-	    password servers and whatnot.
-
-config BUSYBOX_CONFIG_USE_BB_PWD_GRP
-	bool "Use internal password and group functions rather than system functions"
+	  If you leave this disabled, busybox will use the system's shadow
+	  password handling functions.  And if you are using the GNU C library
+	  (glibc), you will then need to install the /etc/nsswitch.conf
+	  configuration file and the required /lib/libnss_* libraries in
+	  order for the shadow password functions to work.  This generally
+	  makes your embedded system quite a bit larger.
+
+	  Enabling this option will cause busybox to directly access the
+	  system's /etc/shadow file when handling shadow passwords.  This
+	  makes your system smaller (and I will get fewer emails asking about
+	  how glibc NSS works).  When this option is enabled, you will not be
+	  able to use PAM to access shadow passwords from remote LDAP
+	  password servers and whatnot.
+
+config BUSYBOX_CONFIG_USE_BB_CRYPT
+	bool "Use internal DES and MD5 crypt functions"
 	default n
 	help
-	    If you leave this disabled, busybox will use the system's password
-	    and group functions.  And if you are using the GNU C library
-	    (glibc), you will then need to install the /etc/nsswitch.conf
-	    configuration file and the required /lib/libnss_* libraries in
-	    order for the password and group functions to work.  This generally
-	    makes your embedded system quite a bit larger.
+	  Busybox has internal DES and MD5 crypt functions.
+	  They produce results which are identical to corresponding
+	  standard C library functions.
 
-	    Enabling this option will cause busybox to directly access the
-	    system's /etc/password, /etc/group files (and your system will be
-	    smaller, and I will get fewer emails asking about how glibc NSS
-	    works).  When this option is enabled, you will not be able to use
-	    PAM to access remote LDAP password servers and whatnot.  And if you
-	    want hostname resolution to work with glibc, you still need the
-	    /lib/libnss_* libraries.
+	  If you leave this disabled, busybox will use the system's
+	  crypt functions.  Most C libraries use large (~70k)
+	  static buffers there, and also combine them with more general
+	  DES encryption/decryption.
 
-	    If you enable this option, it will add about 1.5k to busybox.
+	  For busybox, having large static buffers is undesirable,
+	  especially on NOMMU machines. Busybox also doesn't need
+	  DES encryption/decryption and can do with smaller code.
+
+	  If you enable this option, it will add about 4.8k of code
+	  if you are building dynamically linked executable.
+	  In static build, it makes code _smaller_ by about 1.2k,
+	  and likely many kilobytes less of bss.
 
 config BUSYBOX_CONFIG_ADDGROUP
 	bool "addgroup"
@@ -82,12 +108,31 @@ config BUSYBOX_CONFIG_FEATURE_DEL_USER_FROM_GROUP
 	  If called with two non-option arguments, deluser
 	  or delgroup will remove an user from a specified group.
 
+config BUSYBOX_CONFIG_FEATURE_CHECK_NAMES
+	bool "Enable sanity check on user/group names in adduser and addgroup"
+	default n
+	depends on BUSYBOX_CONFIG_ADDUSER || BUSYBOX_CONFIG_ADDGROUP
+	help
+	  Enable sanity check on user and group names in adduser and addgroup.
+	  To avoid problems, the user or group name should consist only of
+	  letters, digits, underscores, periods, at signs and dashes,
+	  and not start with a dash (as defined by IEEE Std 1003.1-2001).
+	  For compatibility with Samba machine accounts "$" is also supported
+	  at the end of the user or group name.
+
 config BUSYBOX_CONFIG_ADDUSER
 	bool "adduser"
 	default n
 	help
 	  Utility for creating a new user account.
 
+config BUSYBOX_CONFIG_FEATURE_ADDUSER_LONG_OPTIONS
+	bool "Enable long options"
+	default n
+	depends on BUSYBOX_CONFIG_ADDUSER && BUSYBOX_CONFIG_GETOPT_LONG
+	help
+	  Support long options for the adduser applet.
+
 config BUSYBOX_CONFIG_DELUSER
 	bool "deluser"
 	default n
@@ -236,4 +281,3 @@ config BUSYBOX_CONFIG_VLOCK
 	  work properly.
 
 endmenu
-

+ 139 - 14
package/busybox/config/miscutils/Config.in

@@ -19,6 +19,73 @@ config BUSYBOX_CONFIG_BBCONFIG
 	  The bbconfig applet will print the config file with which
 	  busybox was built.
 
+config BUSYBOX_CONFIG_CHAT
+	bool "chat"
+	default n
+	help
+	  Simple chat utility.
+
+config BUSYBOX_CONFIG_FEATURE_CHAT_NOFAIL
+	bool "Enable NOFAIL expect strings"
+	depends on BUSYBOX_CONFIG_CHAT
+	default n
+	help
+	  When enabled expect strings which are started with a dash trigger
+	  no-fail mode. That is when expectation is not met within timeout
+	  the script is not terminated but sends next SEND string and waits
+	  for next EXPECT string. This allows to compose far more flexible
+	  scripts.
+
+config BUSYBOX_CONFIG_FEATURE_CHAT_TTY_HIFI
+	bool "Force STDIN to be a TTY"
+	depends on BUSYBOX_CONFIG_CHAT
+	default n
+	help
+	  Original chat always treats STDIN as a TTY device and sets for it
+	  so-called raw mode. This option turns on such behaviour.
+
+config BUSYBOX_CONFIG_FEATURE_CHAT_IMPLICIT_CR
+	bool "Enable implicit Carriage Return"
+	depends on BUSYBOX_CONFIG_CHAT
+	default n
+	help
+	  When enabled make chat to terminate all SEND strings with a "\r"
+	  unless "\c" is met anywhere in the string.
+
+config BUSYBOX_CONFIG_FEATURE_CHAT_SWALLOW_OPTS
+	bool "Swallow options"
+	depends on BUSYBOX_CONFIG_CHAT
+	default n
+	help
+	  Busybox chat require no options. To make it not fail when used
+	  in place of original chat (which has a bunch of options) turn
+	  this on.
+
+config BUSYBOX_CONFIG_FEATURE_CHAT_SEND_ESCAPES
+	bool "Support weird SEND escapes"
+	depends on BUSYBOX_CONFIG_CHAT
+	default n
+	help
+	  Original chat uses some escape sequences in SEND arguments which
+	  are not sent to device but rather performs special actions.
+	  E.g. "\K" means to send a break sequence to device.
+	  "\d" delays execution for a second, "\p" -- for a 1/100 of second.
+	  Before turning this option on think twice: do you really need them?
+
+config BUSYBOX_CONFIG_FEATURE_CHAT_VAR_ABORT_LEN
+	bool "Support variable-length ABORT conditions"
+	depends on BUSYBOX_CONFIG_CHAT
+	default n
+	help
+	  Original chat uses fixed 50-bytes length ABORT conditions. Say N here.
+
+config BUSYBOX_CONFIG_FEATURE_CHAT_CLR_ABORT
+	bool "Support revoking of ABORT conditions"
+	depends on BUSYBOX_CONFIG_CHAT
+	default n
+	help
+	  Support CLR_ABORT directive.
+
 config BUSYBOX_CONFIG_CHRT
 	bool "chrt"
 	default n
@@ -39,15 +106,13 @@ config BUSYBOX_CONFIG_CROND
 	      $ cat /var/spool/cron/crontabs/root
 	      # Run daily cron jobs at 4:40 every day:
 	      40 4 * * * /etc/cron/daily > /dev/null 2>&1
-	  Note that Busybox binary must be setuid root for this applet to
-	  work properly.
 
 config BUSYBOX_CONFIG_DEBUG_CROND_OPTION
-	bool "Support debug option -d"
+	bool "Support option -d to redirect output to stderr"
 	depends on BUSYBOX_CONFIG_CROND
 	default n
 	help
-	  Support option -d to enter debug mode.
+	  -d sets loglevel to 0 (most verbose) and directs all output to stderr.
 
 config BUSYBOX_CONFIG_FEATURE_CROND_CALL_SENDMAIL
 	bool "Using /usr/sbin/sendmail?"
@@ -63,6 +128,8 @@ config BUSYBOX_CONFIG_CRONTAB
 	help
 	  Crontab manipulates the crontab for a particular user.  Only
 	  the superuser may specify a different user and/or crontab directory.
+	  Note that Busybox binary must be setuid root for this applet to
+	  work properly.
 
 config BUSYBOX_CONFIG_DC
 	bool "dc"
@@ -111,7 +178,7 @@ config BUSYBOX_CONFIG_DEVFSD_VERBOSE
 	  Increases logging to stderr or syslog.
 
 config BUSYBOX_CONFIG_FEATURE_DEVFS
-	bool "  Use devfs names for all devices (obsolete)"
+	bool "Use devfs names for all devices (obsolete)"
 	default n
 	help
 	  This is obsolete and will be going away at the end of 2008..
@@ -126,6 +193,41 @@ config BUSYBOX_CONFIG_EJECT
 	help
 	  Used to eject cdroms.  (defaults to /dev/cdrom)
 
+config BUSYBOX_CONFIG_FEATURE_EJECT_SCSI
+	bool "SCSI support"
+	default n
+	depends on BUSYBOX_CONFIG_EJECT
+	help
+	  Add the -s option to eject, this allows to eject SCSI-Devices and
+	  usb-storage devices.
+
+config BUSYBOX_CONFIG_FBSPLASH
+	bool "fbsplash"
+	default n
+	help
+	  Shows splash image and progress bar on framebuffer device.
+	  Can be used during boot phase of an embedded device. ~2kb.
+	  Usage:
+	  - use kernel option 'vga=xxx' or otherwise enable fb device.
+	  - put somewhere fbsplash.cfg file and an image in .ppm format.
+	  - $ setsid fbsplash [params] &
+	    -c: hide cursor
+	    -d /dev/fbN: framebuffer device (if not /dev/fb0)
+	    -s path_to_image_file (can be "-" for stdin)
+	    -i path_to_cfg_file (can be "-" for stdin)
+	    -f path_to_fifo (can be "-" for stdin)
+	  - if you want to run it only in presence of kernel parameter:
+	    grep -q "fbsplash=on" </proc/cmdline && setsid fbsplash [params] &
+	  - commands for fifo:
+	    "NN" (ASCII decimal number) - percentage to show on progress bar
+	    "exit" - well you guessed it
+
+config BUSYBOX_CONFIG_INOTIFYD
+	bool "inotifyd"
+	default n
+	help
+	  Simple inotify daemon. Reports filesystem changes. Requires kernel >= 2.6.13
+
 config BUSYBOX_CONFIG_LAST
 	bool "last"
 	default n
@@ -133,6 +235,24 @@ config BUSYBOX_CONFIG_LAST
 	help
 	  'last' displays a list of the last users that logged into the system.
 
+choice
+	prompt "Choose last implementation"
+	depends on BUSYBOX_CONFIG_LAST
+	default BUSYBOX_CONFIG_FEATURE_LAST_SMALL
+
+config BUSYBOX_CONFIG_FEATURE_LAST_SMALL
+	bool "small"
+	help
+	  This is a small version of last with just the basic set of
+	  features.
+
+config BUSYBOX_CONFIG_FEATURE_LAST_FANCY
+	bool "huge"
+	help
+	  'last' displays detailed information about the last users that
+	  logged into the system (mimics sysvinit last). +900 bytes.
+endchoice
+
 config BUSYBOX_CONFIG_LESS
 	bool "less"
 	default y
@@ -282,6 +402,12 @@ config BUSYBOX_CONFIG_FEATURE_MAKEDEVS_TABLE
 
 endchoice
 
+config BUSYBOX_CONFIG_MAN
+	bool "man"
+	default n
+	help
+	  Format and display manual pages.
+
 config BUSYBOX_CONFIG_MICROCOM
 	bool "microcom"
 	default n
@@ -320,7 +446,7 @@ config BUSYBOX_CONFIG_READAHEAD
 	  This applet just calls the readahead(2) system call on each file.
 	  It is mainly useful in system startup scripts to preload files
 	  or executables before they are used.  When used at the right time
-	  (in particular when a CPU boundprocess is running) it can
+	  (in particular when a CPU bound process is running) it can
 	  significantly speed up system startup.
 
 	  As readahead(2) blocks until each file has been read, it is best to
@@ -341,6 +467,12 @@ config BUSYBOX_CONFIG_RX
 	help
 	  Receive files using the Xmodem protocol.
 
+config BUSYBOX_CONFIG_SETSID
+	bool "setsid"
+	default n
+	help
+	  setsid runs a program in a new session
+
 config BUSYBOX_CONFIG_STRINGS
 	bool "strings"
 	default y
@@ -348,12 +480,6 @@ config BUSYBOX_CONFIG_STRINGS
 	  strings prints the printable character sequences for each file
 	  specified.
 
-config BUSYBOX_CONFIG_SETSID
-	bool "setsid"
-	default n
-	help
-	  setsid runs a program in a new session
-
 config BUSYBOX_CONFIG_TASKSET
 	bool "taskset"
 	default n
@@ -362,7 +488,7 @@ config BUSYBOX_CONFIG_TASKSET
 	  This requires sched_{g,s}etaffinity support in your libc.
 
 config BUSYBOX_CONFIG_FEATURE_TASKSET_FANCY
-	bool "fancy output"
+	bool "Fancy output"
 	default n
 	depends on BUSYBOX_CONFIG_TASKSET
 	help
@@ -398,4 +524,3 @@ config BUSYBOX_CONFIG_WATCHDOG
 	  hung, and will cause the hardware to reboot.
 
 endmenu
-

+ 66 - 6
package/busybox/config/modutils/Config.in

@@ -5,6 +5,36 @@
 
 menu "Linux Module Utilities"
 
+config BUSYBOX_CONFIG_DEPMOD
+	bool "depmod"
+	default n
+	help
+	  depmod generates modules.dep (FIXME: elaborate)
+
+config BUSYBOX_CONFIG_FEATURE_DEPMOD_PRUNE_FANCY
+	bool "fancy dependency pruning"
+	default n
+	depends on BUSYBOX_CONFIG_DEPMOD
+	help
+	  By default modules.dep contains all dependencies as listed by
+	  the modules.
+	  If you enable this option then we remove implied modules from
+	  the dependencies.
+	  This makes depmod somewhat bigger but generates a smaller
+	  modules.dep file.
+
+	  If unsure, say N.
+
+config BUSYBOX_CONFIG_FEATURE_DEPMOD_ALIAS
+	bool "alias support"
+	default n
+	depends on BUSYBOX_CONFIG_DEPMOD
+	help
+	  By default modules.dep does not contain alias information.
+	  Enable this to emit aliases of the form:
+
+	    alias pcmcia:m*c*f03fn*pfn*pa*pb*pc*pd* parport_cs
+
 config BUSYBOX_CONFIG_INSMOD
 	bool "insmod"
 	default y
@@ -73,7 +103,7 @@ config BUSYBOX_CONFIG_LSMOD
 	  lsmod is used to display a list of loaded modules.
 
 config BUSYBOX_CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT
-	bool "lsmod pretty output for 2.6.x Linux kernels "
+	bool "Pretty output for 2.6.x Linux kernels"
 	default y
 	depends on BUSYBOX_CONFIG_LSMOD
 	help
@@ -92,7 +122,7 @@ config BUSYBOX_CONFIG_MODPROBE
 
 config BUSYBOX_CONFIG_FEATURE_MODPROBE_MULTIPLE_OPTIONS
 	bool
-	prompt "Multiple options parsing" if BUSYBOX_CONFIG_NITPICK
+	prompt "Multiple options parsing"
 	default n
 	depends on BUSYBOX_CONFIG_MODPROBE
 	help
@@ -109,7 +139,7 @@ config BUSYBOX_CONFIG_FEATURE_MODPROBE_MULTIPLE_OPTIONS
 
 config BUSYBOX_CONFIG_FEATURE_MODPROBE_FANCY_ALIAS
 	bool
-	prompt "Fancy alias parsing" if BUSYBOX_CONFIG_NITPICK
+	prompt "Fancy alias parsing"
 	default n
 	depends on BUSYBOX_CONFIG_MODPROBE && BUSYBOX_CONFIG_FEATURE_2_6_MODULES
 	help
@@ -117,8 +147,20 @@ config BUSYBOX_CONFIG_FEATURE_MODPROBE_FANCY_ALIAS
 	  mismatch between module name and file name, along with bus-specific
 	  aliases (such as pci:... or usb:... aliases).
 
+config BUSYBOX_CONFIG_FEATURE_MODPROBE_BLACKLIST
+	bool
+	prompt "Blacklist support"
+	default n
+	depends on BUSYBOX_CONFIG_MODPROBE && BUSYBOX_CONFIG_FEATURE_2_6_MODULES
+	help
+	  Say 'y' here to enable support for the 'blacklist' command in
+	  modprobe.conf. This prevents the alias resolver to resolve
+	  blacklisted modules. This is useful if you want to prevent your
+	  hardware autodetection scripts to load modules like evdev, frame
+	  buffer drivers etc.
+
 comment "Options common to multiple modutils"
-	depends on BUSYBOX_CONFIG_INSMOD || BUSYBOX_CONFIG_RMMOD || BUSYBOX_CONFIG_MODPROBE || BUSYBOX_CONFIG_LSMOD
+	depends on BUSYBOX_CONFIG_INSMOD || BUSYBOX_CONFIG_RMMOD || BUSYBOX_CONFIG_MODPROBE || BUSYBOX_CONFIG_LSMOD || BUSYBOX_CONFIG_DEPMOD
 
 config BUSYBOX_CONFIG_FEATURE_CHECK_TAINTED_MODULE
 	# Simulate indentation
@@ -139,6 +181,9 @@ config BUSYBOX_CONFIG_FEATURE_2_4_MODULES
 	help
 	  Support module loading for 2.2.x and 2.4.x Linux kernels.
 
+	  Note:
+	  This is automatically enabled if 2.6 modules are not enabled.
+
 config BUSYBOX_CONFIG_FEATURE_2_6_MODULES
 	# Simulate indentation
 	bool "Support version 2.6.x Linux kernels"
@@ -147,12 +192,27 @@ config BUSYBOX_CONFIG_FEATURE_2_6_MODULES
 	help
 	  Support module loading for newer 2.6.x Linux kernels.
 
+config BUSYBOX_CONFIG_DEFAULT_MODULES_DIR
+	# Simulate indentation
+	string "Default directory containing modules"
+	default "/lib/modules"
+	depends on BUSYBOX_CONFIG_INSMOD || BUSYBOX_CONFIG_RMMOD || BUSYBOX_CONFIG_MODPROBE || BUSYBOX_CONFIG_DEPMOD
+	help
+	  Directory that contains kernel modules.
+	  Defaults to "/lib/modules"
+
+config BUSYBOX_CONFIG_DEFAULT_DEPMOD_FILE
+	# Simulate indentation
+	string "Default name of modules.dep"
+	default "modules.dep"
+	depends on BUSYBOX_CONFIG_INSMOD || BUSYBOX_CONFIG_RMMOD || BUSYBOX_CONFIG_MODPROBE || BUSYBOX_CONFIG_DEPMOD
+	help
+	  Filename that contains kernel modules dependencies.
+	  Defaults to "modules.dep"
 
 config BUSYBOX_CONFIG_FEATURE_QUERY_MODULE_INTERFACE
 	bool
 	default n
 	depends on BUSYBOX_CONFIG_FEATURE_2_4_MODULES && !BUSYBOX_CONFIG_FEATURE_2_6_MODULES
 
-
 endmenu
-

+ 126 - 28
package/busybox/config/networking/Config.in

@@ -12,6 +12,21 @@ config BUSYBOX_CONFIG_FEATURE_IPV6
 	  Enable IPv6 support in busybox.
 	  This adds IPv6 support in the networking applets.
 
+config BUSYBOX_CONFIG_FEATURE_PREFER_IPV4_ADDRESS
+	bool "Preferentially use IPv4 addresses from DNS queries"
+	default y
+	depends on BUSYBOX_CONFIG_FEATURE_IPV6
+	help
+	  Use IPv4 address of network host if it has one.
+
+	  If this option is off, the first returned address will be used.
+	  This may cause problems when your DNS server is IPv6-capable and
+	  is returning IPv6 host addresses too. If IPv6 address
+	  precedes IPv4 one in DNS reply, busybox network applets
+	  (e.g. wget) will use IPv6 address. On an IPv6-incapable host
+	  or network applets will fail to connect to the host
+	  using IPv6 address.
+
 config BUSYBOX_CONFIG_VERBOSE_RESOLUTION_ERRORS
 	bool "Verbose resolution errors"
 	default y
@@ -32,6 +47,32 @@ config BUSYBOX_CONFIG_ARPING
 	help
 	  Ping hosts by ARP packets.
 
+config BUSYBOX_CONFIG_BRCTL
+	bool "brctl"
+	default n
+	help
+	  Manage ethernet bridges.
+	  Supports addbr/delbr and addif/delif.
+
+config BUSYBOX_CONFIG_FEATURE_BRCTL_FANCY
+	bool "Fancy options"
+	default n
+	depends on BUSYBOX_CONFIG_BRCTL
+	help
+	  Add support for extended option like:
+	    setageing, setfd, sethello, setmaxage,
+	    setpathcost, setportprio, setbridgeprio,
+	    stp
+	  This adds about 600 bytes.
+
+config BUSYBOX_CONFIG_FEATURE_BRCTL_SHOW
+	bool "Support show, showmac and showstp"
+	default n
+	depends on BUSYBOX_CONFIG_BRCTL && BUSYBOX_CONFIG_FEATURE_BRCTL_FANCY
+	help
+	  Add support for option which prints the current config:
+	    showmacs, showstp, show
+
 config BUSYBOX_CONFIG_DNSD
 	bool "dnsd"
 	default n
@@ -101,7 +142,7 @@ config BUSYBOX_CONFIG_FEATURE_HTTPD_USE_SENDFILE
 	  instead of read/write loop.
 
 config BUSYBOX_CONFIG_FEATURE_HTTPD_RELOAD_CONFIG_SIGHUP
-	bool "Support reloading the global config file using hup signal"
+	bool "Support reloading of global config file on HUP signal"
 	default y
 	depends on BUSYBOX_CONFIG_HTTPD
 	help
@@ -151,7 +192,7 @@ config BUSYBOX_CONFIG_FEATURE_HTTPD_CGI
 	  when specific URLs are requested.
 
 config BUSYBOX_CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR
-	bool "Enable support for running scripts through an interpreter"
+	bool "Support for running scripts through an interpreter"
 	default y
 	depends on BUSYBOX_CONFIG_FEATURE_HTTPD_CGI
 	help
@@ -162,7 +203,7 @@ config BUSYBOX_CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR
 	  *.php:/path/to/your/php
 
 config BUSYBOX_CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV
-	bool "Support the REMOTE_PORT environment variable for CGI"
+	bool "Set REMOTE_PORT environment variable for CGI"
 	default y
 	depends on BUSYBOX_CONFIG_FEATURE_HTTPD_CGI
 	help
@@ -170,17 +211,17 @@ config BUSYBOX_CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV
 	  references that contain a unique port number.
 
 config BUSYBOX_CONFIG_FEATURE_HTTPD_ENCODE_URL_STR
-	bool "Enable the -e option for shell script CGI simplification."
+	bool "Enable -e option (useful for CGIs written as shell scripts)"
 	default y
 	depends on BUSYBOX_CONFIG_HTTPD
 	help
-	  This option allows html encoding arbitrary
-	  strings for display of the browser.  Output goes to stdout.
-	  For example, httpd -e "<Hello World>" as
+	  This option allows html encoding of arbitrary strings for display
+	  by the browser.  Output goes to stdout.
+	  For example, httpd -e "<Hello World>" produces
 	  "&#60Hello&#32World&#62".
 
 config BUSYBOX_CONFIG_FEATURE_HTTPD_ERROR_PAGES
-	bool "Enable support for custom error pages"
+	bool "Support for custom error pages"
 	default y
 	depends on BUSYBOX_CONFIG_HTTPD
 	help
@@ -193,7 +234,7 @@ config BUSYBOX_CONFIG_FEATURE_HTTPD_ERROR_PAGES
 	  message.
 
 config BUSYBOX_CONFIG_FEATURE_HTTPD_PROXY
-	bool "Enable support for reverse proxy"
+	bool "Support for reverse proxy"
 	default n
 	depends on BUSYBOX_CONFIG_HTTPD
 	help
@@ -251,6 +292,13 @@ config BUSYBOX_CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS
 	  Setting this will make ifconfig attempt to find the broadcast
 	  automatically if the value '+' is used.
 
+config BUSYBOX_CONFIG_IFENSLAVE
+	bool "ifenslave"
+	default n
+	help
+	  Userspace application to bind several interfaces
+	  to a logical interface (use with kernel bonding driver).
+
 config BUSYBOX_CONFIG_IFUPDOWN
 	bool "ifupdown"
 	default n
@@ -315,14 +363,14 @@ config BUSYBOX_CONFIG_FEATURE_IFUPDOWN_IFCONFIG_BUILTIN
 	  work.
 
 config BUSYBOX_CONFIG_FEATURE_IFUPDOWN_IPV4
-	bool "Enable support for IPv4"
+	bool "Support for IPv4"
 	default n
 	depends on BUSYBOX_CONFIG_IFUPDOWN
 	help
 	  If you want ifup/ifdown to talk IPv4, leave this on.
 
 config BUSYBOX_CONFIG_FEATURE_IFUPDOWN_IPV6
-	bool "Enable support for IPv6"
+	bool "Support for IPv6"
 	default n
 	depends on BUSYBOX_CONFIG_IFUPDOWN && BUSYBOX_CONFIG_FEATURE_IPV6
 	help
@@ -330,7 +378,7 @@ config BUSYBOX_CONFIG_FEATURE_IFUPDOWN_IPV6
 
 ### UNUSED
 ###config FEATURE_IFUPDOWN_IPX
-###	bool "Enable support for IPX"
+###	bool "Support for IPX"
 ###	default n
 ###	depends on IFUPDOWN
 ###	help
@@ -346,7 +394,7 @@ config BUSYBOX_CONFIG_FEATURE_IFUPDOWN_MAPPING
 	  a weird network setup you don't need it.
 
 config BUSYBOX_CONFIG_FEATURE_IFUPDOWN_EXTERNAL_DHCP
-	bool "Enable support for external dhcp clients"
+	bool "Support for external dhcp clients"
 	default n
 	depends on BUSYBOX_CONFIG_IFUPDOWN
 	help
@@ -449,7 +497,7 @@ config BUSYBOX_CONFIG_FEATURE_IP_RULE
 	  Add support for rule commands to "ip".
 
 config BUSYBOX_CONFIG_FEATURE_IP_SHORT_FORMS
-	bool "Support short forms of ip commands."
+	bool "Support short forms of ip commands"
 	default n
 	depends on BUSYBOX_CONFIG_IP
 	help
@@ -528,19 +576,32 @@ config BUSYBOX_CONFIG_NAMEIF
 	  Renamed interfaces MUST be in the down state.
 	  It is possible to use a file (default: /etc/mactab)
 	  with list of new interface names and MACs.
-	  Maximum interface name length: IF_NAMESIZE = 16
+	  Maximum interface name length: IFNAMSIZ = 16
 	  File fields are separated by space or tab.
 	  File format:
 	  # Comment
 	  new_interface_name    XX:XX:XX:XX:XX:XX
 
+config BUSYBOX_CONFIG_FEATURE_NAMEIF_EXTENDED
+	bool "Extended nameif"
+	default n
+	depends on BUSYBOX_CONFIG_NAMEIF
+	help
+	  This extends the nameif syntax to support the bus_info and driver
+	  checks. The syntax is compatible to the normal nameif.
+	  File format:
+	    new_interface_name  driver=asix bus=usb-0000:00:08.2-3
+	    new_interface_name  bus=usb-0000:00:08.2-3 00:80:C8:38:91:B5
+	    new_interface_name  mac=00:80:C8:38:91:B5
+	    new_interface_name  00:80:C8:38:91:B5
+
 config BUSYBOX_CONFIG_NC
 	bool "nc"
 	default y
 	help
 	  A simple Unix utility which reads and writes data across network
 	  connections.
-	  
+
 config BUSYBOX_CONFIG_NETMSG
 	bool "netmsg"
 	default y
@@ -570,7 +631,7 @@ config BUSYBOX_CONFIG_NETSTAT
 	  netstat prints information about the Linux networking subsystem.
 
 config BUSYBOX_CONFIG_FEATURE_NETSTAT_WIDE
-	bool "  Enable wide netstat output"
+	bool "Enable wide netstat output"
 	default y
 	depends on BUSYBOX_CONFIG_NETSTAT
 	help
@@ -597,12 +658,6 @@ config BUSYBOX_CONFIG_PING6
 	help
 	  This will give you a ping that can talk IPv6.
 
-config BUSYBOX_CONFIG_PSCAN
-	bool "pscan"
-	default n
-	help
-	  Simple network port scanner.
-
 config BUSYBOX_CONFIG_FEATURE_FANCY_PING
 	bool "Enable fancy ping output"
 	default y
@@ -611,12 +666,30 @@ config BUSYBOX_CONFIG_FEATURE_FANCY_PING
 	  Make the output from the ping applet include statistics, and at the
 	  same time provide full support for ICMP packets.
 
+config BUSYBOX_CONFIG_PSCAN
+	bool "pscan"
+	default n
+	help
+	  Simple network port scanner.
+
 config BUSYBOX_CONFIG_ROUTE
 	bool "route"
 	default y
 	help
 	  Route displays or manipulates the kernel's IP routing tables.
 
+config BUSYBOX_CONFIG_SENDMAIL
+	bool "sendmail"
+	default n
+	help
+	  Barebones sendmail.
+
+config BUSYBOX_CONFIG_FETCHMAIL
+	bool "fetchmail"
+	default n
+	help
+	  Barebones fetchmail.
+
 config BUSYBOX_CONFIG_SLATTACH
 	bool "slattach"
 	default n
@@ -707,28 +780,41 @@ config BUSYBOX_CONFIG_TFTP
 	  is usually used for simple, small transfers such as a root image
 	  for a network-enabled bootloader.
 
+config BUSYBOX_CONFIG_TFTPD
+	bool "tftpd"
+	default n
+	help
+	  This enables the Trivial File Transfer Protocol server program.
+	  It expects that stdin is a datagram socket and a packet
+	  is already pending on it. It will exit after one transfer.
+	  In other words: it should be run from inetd in nowait mode,
+	  or from udpsvd. Example: "udpsvd -E 0 69 tftpd DIR"
+
 config BUSYBOX_CONFIG_FEATURE_TFTP_GET
 	bool "Enable \"get\" command"
 	default n
-	depends on BUSYBOX_CONFIG_TFTP
+	depends on BUSYBOX_CONFIG_TFTP || BUSYBOX_CONFIG_TFTPD
 	help
 	  Add support for the GET command within the TFTP client.  This allows
 	  a client to retrieve a file from a TFTP server.
+	  Also enable upload support in tftpd, if tftpd is selected.
 
 config BUSYBOX_CONFIG_FEATURE_TFTP_PUT
 	bool "Enable \"put\" command"
 	default n
-	depends on BUSYBOX_CONFIG_TFTP
+	depends on BUSYBOX_CONFIG_TFTP || BUSYBOX_CONFIG_TFTPD
 	help
 	  Add support for the PUT command within the TFTP client.  This allows
 	  a client to transfer a file to a TFTP server.
+	  Also enable download support in tftpd, if tftpd is selected.
 
 config BUSYBOX_CONFIG_FEATURE_TFTP_BLOCKSIZE
-	bool "Enable \"blocksize\" command"
+	bool "Enable \"blksize\" protocol option"
 	default n
-	depends on BUSYBOX_CONFIG_TFTP
+	depends on BUSYBOX_CONFIG_TFTP || BUSYBOX_CONFIG_TFTPD
 	help
-	  Allow the client to specify the desired block size for transfers.
+	  Allow tftp to specify block size, and tftpd to understand
+	  "blksize" option.
 
 config BUSYBOX_CONFIG_DEBUG_TFTP
 	bool "Enable debug"
@@ -816,4 +902,16 @@ config BUSYBOX_CONFIG_ZCIP
 	  See http://www.zeroconf.org for further details, and "zcip.script"
 	  in the busybox examples.
 
+config BUSYBOX_CONFIG_TCPSVD
+	bool "tcpsvd"
+	default n
+	help
+	  tcpsvd listens on a TCP port and runs a program for each new connection
+
+config BUSYBOX_CONFIG_UDPSVD
+	bool "udpsvd"
+	default n
+	help
+	  udpsvd listens on an UDP port and runs a program for each new connection
+
 endmenu

+ 65 - 17
package/busybox/config/networking/udhcp/Config.in

@@ -4,14 +4,12 @@
 #
 
 config BUSYBOX_CONFIG_APP_UDHCPD
-	bool "udhcp Server (udhcpd)"
+	bool "udhcp server (udhcpd)"
 	default n
 	help
-	  uDHCPd is a DHCP server geared primarily toward embedded systems,
+	  udhcpd is a DHCP server geared primarily toward embedded systems,
 	  while striving to be fully functional and RFC compliant.
 
-	  See http://udhcp.busybox.net for further details.
-
 config BUSYBOX_CONFIG_APP_DHCPRELAY
 	bool "dhcprelay"
 	default n
@@ -30,40 +28,58 @@ config BUSYBOX_CONFIG_APP_DUMPLEASES
 	  Lease times are stored in the file by time remaining in lease, or
 	  by the absolute time that it expires in seconds from epoch.
 
-	  See http://udhcp.busybox.net for further details.
-
 config BUSYBOX_CONFIG_FEATURE_UDHCPD_WRITE_LEASES_EARLY
 	bool "Rewrite the lease file at every new acknowledge"
 	default n
 	depends on BUSYBOX_CONFIG_APP_UDHCPD
 	help
 	  If selected, udhcpd will write a new file with leases every
-	  time a new lease has been accepted, thus eleminating the need
-	  to send SIGUSR1 for the initial writing, or updating. Any timed
+	  time a new lease has been accepted, thus eliminating the need
+	  to send SIGUSR1 for the initial writing or updating. Any timed
 	  rewriting remains undisturbed
 
+config BUSYBOX_CONFIG_DHCPD_LEASES_FILE
+	string "Absolute path to lease file"
+	default "/var/run/udhcpd.leases"
+	depends on BUSYBOX_CONFIG_APP_UDHCPD
+	help
+	  udhcpd stores addresses in a lease file. This is the absolute path
+	  of the file. Normally it is safe to leave it untouched.
+
 config BUSYBOX_CONFIG_APP_UDHCPC
-	bool "udhcp Client (udhcpc)"
+	bool "udhcp client (udhcpc)"
 	default y
 	help
-	  uDHCPc is a DHCP client geared primarily toward embedded systems,
+	  udhcpc is a DHCP client geared primarily toward embedded systems,
 	  while striving to be fully functional and RFC compliant.
 
 	  The udhcp client negotiates a lease with the DHCP server and
-	  notifies a set of scripts when a lease is obtained or lost.
+	  runs a script when a lease is obtained or lost.
 
-	  See http://udhcp.busybox.net for further details.
+config BUSYBOX_CONFIG_FEATURE_UDHCPC_ARPING
+	bool "Verify that the offered address is free, using ARP ping"
+	default n
+	depends on BUSYBOX_CONFIG_APP_UDHCPC
+	help
+	  If selected, udhcpc will send ARP probes and make sure
+	  the offered address is really not in use by anyone. The client
+	  will DHCPDECLINE the offer if the address is in use,
+	  and restart the discover process.
+
+config BUSYBOX_CONFIG_FEATURE_UDHCP_PORT
+	bool "Enable '-P port' option for udhcpd and udhcpc"
+	default n
+	depends on BUSYBOX_CONFIG_APP_UDHCPD || BUSYBOX_CONFIG_APP_UDHCPC
+	help
+	  At the cost of ~300 bytes, enables -P port option.
+	  This feature is typically not needed.
 
 config BUSYBOX_CONFIG_FEATURE_UDHCP_DEBUG
 	bool "Compile udhcp with noisy debugging messages"
 	default n
 	depends on BUSYBOX_CONFIG_APP_UDHCPD || BUSYBOX_CONFIG_APP_UDHCPC
 	help
-	  If selected, udhcpd will output extra debugging output.  If using
-	  this option, compile uDHCP with "-g", and do not fork the daemon to
-	  the background.
-
-	  See http://udhcp.busybox.net for further details.
+	  If selected, udhcpd will output extra debugging output.
 
 config BUSYBOX_CONFIG_FEATURE_RFC3397
 	bool "Support for RFC3397 domain search (experimental)"
@@ -72,3 +88,35 @@ config BUSYBOX_CONFIG_FEATURE_RFC3397
 	help
 	  If selected, both client and server will support passing of domain
 	  search lists via option 119, specified in RFC3397.
+
+config BUSYBOX_CONFIG_DHCPC_DEFAULT_SCRIPT
+	string "Absolute path to config script"
+	default "/usr/share/udhcpc/default.script"
+	depends on BUSYBOX_CONFIG_APP_UDHCPC
+	help
+	  This script is called after udhcpc receives an answer. See
+	  examples/udhcp for a working example. Normally it is safe
+	  to leave this untouched.
+
+config BUSYBOX_CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS
+	int "DHCP options slack buffer size"
+	default 80
+	range 0 924
+	depends on BUSYBOX_CONFIG_APP_UDHCPD || BUSYBOX_CONFIG_APP_UDHCPC
+	help
+	  Some buggy DHCP servers send DHCP offer packets with option
+	  field larger than we expect (which might also be considered a
+	  buffer overflow attempt). These packets are normally discarded.
+	  If circumstances beyond your control force you to support such
+	  servers, this may help. The upper limit (924) makes dhcpc accept
+	  even 1500 byte packets (maximum-sized ethernet packets).
+
+	  This option does not make dhcp[cd] emit non-standard
+	  sized packets.
+
+	  Known buggy DHCP servers:
+	  3Com OfficeConnect Remote 812 ADSL Router:
+	    seems to confuse maximum allowed UDP packet size with
+	    maximum size of entire IP packet, and sends packets which are
+	    28 bytes too large.
+	  Seednet (ISP) VDSL: sends packets 2 bytes too large.

+ 21 - 0
package/busybox/config/printutils/Config.in

@@ -0,0 +1,21 @@
+menu "Print Utilities"
+
+config BUSYBOX_CONFIG_LPD
+	bool "lpd"
+	default n
+	help
+	  lpd is a print spooling daemon.
+
+config BUSYBOX_CONFIG_LPR
+	bool "lpr"
+	default n
+	help
+	  lpr sends files (or standard input) to a print spooling daemon.
+
+config BUSYBOX_CONFIG_LPQ
+	bool "lpq"
+	default n
+	help
+	  lpq is a print spool queue examination and manipulation program.
+
+endmenu

+ 15 - 0
package/busybox/config/procps/Config.in

@@ -99,6 +99,21 @@ config BUSYBOX_CONFIG_FEATURE_PS_WIDE
 	  If given once, 132 chars are printed and given more than
 	  one, the length is unlimited.
 
+config BUSYBOX_CONFIG_FEATURE_PS_TIME
+	bool "Enable time and elapsed time output"
+	default n
+	depends on BUSYBOX_CONFIG_PS && BUSYBOX_CONFIG_DESKTOP
+	help
+	  Support -o time and -o etime output specifiers.
+
+config BUSYBOX_CONFIG_FEATURE_PS_UNUSUAL_SYSTEMS
+	bool "Support Linux prior to 2.4.0 and non-ELF systems"
+	default n
+	depends on BUSYBOX_CONFIG_FEATURE_PS_TIME
+	help
+	  Include support for measuring HZ on old kernels and non-ELF systems
+	  (if you are on Linux 2.4.0+ and use ELF, you don't need this)
+
 config BUSYBOX_CONFIG_RENICE
 	bool "renice"
 	default n

+ 7 - 0
package/busybox/config/selinux/Config.in

@@ -112,5 +112,12 @@ config BUSYBOX_CONFIG_SETSEBOOL
 	  Enable support for change boolean.
 	  semanage and -P option is not supported yet.
 
+config BUSYBOX_CONFIG_SESTATUS
+	bool "sestatus"
+	default n
+	depends on BUSYBOX_CONFIG_SELINUX
+	help
+	  Displays the status of SELinux.
+
 endmenu
 

+ 36 - 22
package/busybox/config/shell/Config.in

@@ -20,9 +20,9 @@ config BUSYBOX_CONFIG_FEATURE_SH_IS_HUSH
 	select BUSYBOX_CONFIG_HUSH
 	bool "hush"
 
-config BUSYBOX_CONFIG_FEATURE_SH_IS_LASH
-	select BUSYBOX_CONFIG_LASH
-	bool "lash"
+####config FEATURE_SH_IS_LASH
+####	select LASH
+####	bool "lash"
 
 config BUSYBOX_CONFIG_FEATURE_SH_IS_MSH
 	select BUSYBOX_CONFIG_MSH
@@ -36,7 +36,6 @@ endchoice
 config BUSYBOX_CONFIG_ASH
 	bool "ash"
 	default y
-	select BUSYBOX_CONFIG_TEST
 	help
 	  Tha 'ash' shell adds about 60k in the default configuration and is
 	  the most complete and most pedantically correct shell included with
@@ -47,6 +46,13 @@ config BUSYBOX_CONFIG_ASH
 comment "Ash Shell Options"
 	depends on BUSYBOX_CONFIG_ASH
 
+config BUSYBOX_CONFIG_ASH_BASH_COMPAT
+	bool "bash-compatible extensions"
+	default y
+	depends on BUSYBOX_CONFIG_ASH
+	help
+	  Enable bash-conpatible extensions.
+
 config BUSYBOX_CONFIG_ASH_JOB_CONTROL
 	bool "Job control"
 	default y
@@ -104,15 +110,20 @@ config BUSYBOX_CONFIG_ASH_GETOPTS
 config BUSYBOX_CONFIG_ASH_BUILTIN_ECHO
 	bool "Builtin version of 'echo'"
 	default y
-	select BUSYBOX_CONFIG_ECHO
 	depends on BUSYBOX_CONFIG_ASH
 	help
 	  Enable support for echo, builtin to ash.
 
+config BUSYBOX_CONFIG_ASH_BUILTIN_PRINTF
+	bool "Builtin version of 'printf'"
+	default y
+	depends on BUSYBOX_CONFIG_ASH
+	help
+	  Enable support for printf, builtin to ash.
+
 config BUSYBOX_CONFIG_ASH_BUILTIN_TEST
 	bool "Builtin version of 'test'"
 	default y
-	select BUSYBOX_CONFIG_TEST
 	depends on BUSYBOX_CONFIG_ASH
 	help
 	  Enable support for test, builtin to ash.
@@ -163,9 +174,6 @@ config BUSYBOX_CONFIG_ASH_EXPAND_PRMT
 config BUSYBOX_CONFIG_HUSH
 	bool "hush"
 	default n
-	select BUSYBOX_CONFIG_TRUE
-	select BUSYBOX_CONFIG_FALSE
-	select BUSYBOX_CONFIG_TEST
 	help
 	  hush is a very small shell (just 18k) and it has fairly complete
 	  Bourne shell grammar.  It even handles all the normal flow control
@@ -228,24 +236,13 @@ config BUSYBOX_CONFIG_HUSH_LOOPS
 config BUSYBOX_CONFIG_LASH
 	bool "lash"
 	default n
-	select BUSYBOX_CONFIG_TRUE
-	select BUSYBOX_CONFIG_FALSE
-	select BUSYBOX_CONFIG_TEST
+	select BUSYBOX_CONFIG_HUSH
 	help
-	  lash is the very smallest shell (adds just 10k) and it is quite
-	  usable as a command prompt, but it is not suitable for any but the
-	  most trivial scripting (such as an initrd that calls insmod a few
-	  times) since it does not understand any Bourne shell grammar.  It
-	  does handle pipes, redirects, and job control though.  Adding in
-	  command editing makes it a very nice lightweight command prompt.
-
+	  lash is deprecated and will be removed, please migrate to hush.
 
 config BUSYBOX_CONFIG_MSH
 	bool "msh"
 	default n
-	select BUSYBOX_CONFIG_TRUE
-	select BUSYBOX_CONFIG_FALSE
-	select BUSYBOX_CONFIG_TEST
 	help
 	  The minix shell (adds just 30k) is quite complete and handles things
 	  like for/do/done, case/esac and all the things you expect a Bourne
@@ -297,6 +294,23 @@ config BUSYBOX_CONFIG_FEATURE_SH_STANDALONE
 #	  that exact location with that exact name, this option will not work at
 #	  all.
 
+config BUSYBOX_CONFIG_FEATURE_SH_NOFORK
+	bool "Run 'nofork' applets directly"
+	default n
+	depends on (BUSYBOX_CONFIG_MSH || BUSYBOX_CONFIG_LASH || BUSYBOX_CONFIG_HUSH || BUSYBOX_CONFIG_ASH) && BUSYBOX_CONFIG_FEATURE_PREFER_APPLETS
+	help
+	  This option causes busybox shells [currently only ash]
+	  to not execute typical fork/exec/wait sequence, but call <applet>_main
+	  directly, if possible. (Sometimes it is not possible: for example,
+	  this is not possible in pipes).
+
+	  This will be done only for some applets (those which are marked
+	  NOFORK in include/applets.h).
+
+	  This may significantly speed up some shell scripts.
+
+	  This feature is relatively new. Use with care.
+
 config BUSYBOX_CONFIG_CTTYHACK
 	bool "cttyhack"
 	default n

+ 10 - 2
package/busybox/config/sysklogd/Config.in

@@ -42,6 +42,14 @@ config BUSYBOX_CONFIG_FEATURE_REMOTE_LOG
 	  measure to prevent system logs from being tampered with
 	  by an intruder.
 
+config BUSYBOX_CONFIG_FEATURE_SYSLOGD_DUP
+	bool "Support -D (drop dups) option"
+	default n
+	depends on BUSYBOX_CONFIG_SYSLOGD
+	help
+	  Option -D instructs syslogd to drop consecutive messages
+	  which are totally the same.
+
 config BUSYBOX_CONFIG_FEATURE_IPC_SYSLOG
 	bool "Circular Buffer support"
 	default y
@@ -57,7 +65,7 @@ config BUSYBOX_CONFIG_FEATURE_IPC_SYSLOG
 	  break badly.
 
 config BUSYBOX_CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE
-	int "    Circular buffer size in Kbytes (minimum 4KB)"
+	int "Circular buffer size in Kbytes (minimum 4KB)"
 	default 16
 	range 4 2147483647
 	depends on BUSYBOX_CONFIG_FEATURE_IPC_SYSLOG
@@ -76,7 +84,7 @@ config BUSYBOX_CONFIG_LOGREAD
 	  stored in the syslogd circular buffer.
 
 config BUSYBOX_CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING
-	bool "logread double buffering"
+	bool "Double buffering"
 	default n
 	depends on BUSYBOX_CONFIG_LOGREAD
 	help

+ 309 - 9
package/busybox/config/util-linux/Config.in

@@ -18,7 +18,7 @@ config BUSYBOX_CONFIG_DMESG
 	  wish to enable the 'dmesg' utility.
 
 config BUSYBOX_CONFIG_FEATURE_DMESG_PRETTY
-	bool "pretty dmesg output"
+	bool "Pretty dmesg output"
 	default y
 	depends on BUSYBOX_CONFIG_DMESG
 	help
@@ -93,7 +93,7 @@ config BUSYBOX_CONFIG_FDISK
 	  'disk slices' that are defined on a hard drive.
 
 config BUSYBOX_CONFIG_FDISK_SUPPORT_LARGE_DISKS
-	bool "support over 4GB disks"
+	bool "Support over 4GB disks"
 	default y
 	depends on BUSYBOX_CONFIG_FDISK
 	help
@@ -150,6 +150,17 @@ config BUSYBOX_CONFIG_FEATURE_FDISK_ADVANCED
 	  partition, and similarly evil things.  Unless you have a very good
 	  reason you would be wise to leave this disabled.
 
+config BUSYBOX_CONFIG_FINDFS
+	bool "findfs"
+	default n
+	select BUSYBOX_CONFIG_VOLUMEID
+	help
+	  This is similar to the findfs program that is part of the e2fsprogs
+	  package.  However, the e2fsprogs version only support ext2/3.  This
+	  version supports those in addition to FAT, swap, and ReiserFS.
+	  WARNING:
+	  With all submodules selected, it will add ~8k to busybox.
+
 config BUSYBOX_CONFIG_FREERAMDISK
 	bool "freeramdisk"
 	default n
@@ -210,6 +221,23 @@ config BUSYBOX_CONFIG_HEXDUMP
 	  The hexdump utility is used to display binary data in a readable
 	  way that is comparable to the output from most hex editors.
 
+config BUSYBOX_CONFIG_FEATURE_HEXDUMP_REVERSE
+	bool "Support -R, reverse of 'hexdump -Cv'"
+	default n
+	depends on BUSYBOX_CONFIG_HEXDUMP
+	help
+	  The hexdump utility is used to display binary data in an ascii
+	  readable way. This option creates binary data from an ascii input.
+	  NB: this option is non-standard. It's unwise to use it in scripts
+	  aimed to be portable.
+
+config BUSYBOX_CONFIG_HD
+	bool "hd"
+	default n
+	select BUSYBOX_CONFIG_HEXDUMP
+	help
+	  hd is an alias to hexdump -C.
+
 config BUSYBOX_CONFIG_HWCLOCK
 	bool "hwclock"
 	default y
@@ -284,6 +312,22 @@ config BUSYBOX_CONFIG_FEATURE_MDEV_CONF
 
 	  For more information, please see docs/mdev.txt
 
+config BUSYBOX_CONFIG_FEATURE_MDEV_RENAME
+	bool "Support subdirs/symlinks"
+	default n
+	depends on BUSYBOX_CONFIG_FEATURE_MDEV_CONF
+	help
+	  Add support for renaming devices and creating symlinks.
+
+	  For more information, please see docs/mdev.txt
+
+config BUSYBOX_CONFIG_FEATURE_MDEV_RENAME_REGEXP
+	bool "Support regular expressions substitutions when renaming device"
+	default n
+	depends on BUSYBOX_CONFIG_FEATURE_MDEV_RENAME
+	help
+	  Add support for regular expressions substitutions when renaming device.
+
 config BUSYBOX_CONFIG_FEATURE_MDEV_EXEC
 	bool "Support command execution at device addition/removal"
 	default n
@@ -319,7 +363,7 @@ config BUSYBOX_CONFIG_MKSWAP
 	  the swap space using the 'swapon' utility.
 
 config BUSYBOX_CONFIG_FEATURE_MKSWAP_V0
-	bool "version 0 support"
+	bool "Version 0 support"
 	default n
 	depends on BUSYBOX_CONFIG_MKSWAP
 #	depends on MKSWAP && BUSYBOX_CONFIG_DEPRECATED
@@ -341,7 +385,7 @@ config BUSYBOX_CONFIG_MORE
 config BUSYBOX_CONFIG_FEATURE_USE_TERMIOS
 	bool "Use termios to manipulate the screen"
 	default n
-	depends on BUSYBOX_CONFIG_MORE
+	depends on BUSYBOX_CONFIG_MORE || BUSYBOX_CONFIG_TOP
 	help
 	  This option allows utilities such as 'more' and 'top' to determine
 	  the size of the screen.  If you leave this disabled, your utilities
@@ -349,6 +393,216 @@ config BUSYBOX_CONFIG_FEATURE_USE_TERMIOS
 	  will be unable to determine the current screen size, and will be
 	  unable to move the cursor.
 
+config BUSYBOX_CONFIG_VOLUMEID
+	bool "Routines for detecting label and uuid on common filesystems"
+	default n
+	help
+	  TODO
+
+config BUSYBOX_CONFIG_FEATURE_VOLUMEID_EXT
+	bool "Ext filesystem"
+	default n
+	depends on BUSYBOX_CONFIG_VOLUMEID
+	help
+	  TODO
+
+config BUSYBOX_CONFIG_FEATURE_VOLUMEID_REISERFS
+	bool "Reiser filesystem"
+	default n
+	depends on BUSYBOX_CONFIG_VOLUMEID
+	help
+	  TODO
+
+config BUSYBOX_CONFIG_FEATURE_VOLUMEID_FAT
+	bool "fat filesystem"
+	default n
+	depends on BUSYBOX_CONFIG_VOLUMEID
+	help
+	  TODO
+
+config BUSYBOX_CONFIG_FEATURE_VOLUMEID_HFS
+	bool "hfs filesystem"
+	default n
+	depends on BUSYBOX_CONFIG_VOLUMEID
+	help
+	  TODO
+
+config BUSYBOX_CONFIG_FEATURE_VOLUMEID_JFS
+	bool "jfs filesystem"
+	default n
+	depends on BUSYBOX_CONFIG_VOLUMEID
+	help
+	  TODO
+
+### config FEATURE_VOLUMEID_UFS
+###	bool "ufs filesystem"
+###	default n
+###	depends on VOLUMEID
+###	help
+###	  TODO
+
+config BUSYBOX_CONFIG_FEATURE_VOLUMEID_XFS
+	bool "xfs filesystem"
+	default n
+	depends on BUSYBOX_CONFIG_VOLUMEID
+	help
+	  TODO
+
+config BUSYBOX_CONFIG_FEATURE_VOLUMEID_NTFS
+	bool "ntfs filesystem"
+	default n
+	depends on BUSYBOX_CONFIG_VOLUMEID
+	help
+	  TODO
+
+config BUSYBOX_CONFIG_FEATURE_VOLUMEID_ISO9660
+	bool "iso9660 filesystem"
+	default n
+	depends on BUSYBOX_CONFIG_VOLUMEID
+	help
+	  TODO
+
+config BUSYBOX_CONFIG_FEATURE_VOLUMEID_UDF
+	bool "udf filesystem"
+	default n
+	depends on BUSYBOX_CONFIG_VOLUMEID
+	help
+	  TODO
+
+config BUSYBOX_CONFIG_FEATURE_VOLUMEID_LUKS
+	bool "luks filesystem"
+	default n
+	depends on BUSYBOX_CONFIG_VOLUMEID
+	help
+	  TODO
+
+config BUSYBOX_CONFIG_FEATURE_VOLUMEID_LINUXSWAP
+	bool "linux swap filesystem"
+	default n
+	depends on BUSYBOX_CONFIG_VOLUMEID
+	help
+	  TODO
+
+### config FEATURE_VOLUMEID_LVM
+###	bool "lvm"
+###	default n
+###	depends on VOLUMEID
+###	help
+###	  TODO
+
+config BUSYBOX_CONFIG_FEATURE_VOLUMEID_CRAMFS
+	bool "cramfs filesystem"
+	default n
+	depends on BUSYBOX_CONFIG_VOLUMEID
+	help
+	  TODO
+
+### config FEATURE_VOLUMEID_HPFS
+###	bool "hpfs filesystem"
+###	default n
+###	depends on VOLUMEID
+###	help
+###	  TODO
+
+config BUSYBOX_CONFIG_FEATURE_VOLUMEID_ROMFS
+	bool "romfs filesystem"
+	default n
+	depends on BUSYBOX_CONFIG_VOLUMEID
+	help
+	  TODO
+
+config BUSYBOX_CONFIG_FEATURE_VOLUMEID_SYSV
+	bool "sysv filesystem"
+	default n
+	depends on BUSYBOX_CONFIG_VOLUMEID
+	help
+	  TODO
+
+### config FEATURE_VOLUMEID_MINIX
+###	bool "minix filesystem"
+###	default n
+###	depends on VOLUMEID
+###	help
+###	  TODO
+
+### These only detect partition tables - not used (yet?)
+### config FEATURE_VOLUMEID_MAC
+###	bool "mac filesystem"
+###	default n
+###	depends on VOLUMEID
+###	help
+###	  TODO
+###
+### config FEATURE_VOLUMEID_MSDOS
+###	bool "msdos filesystem"
+###	default n
+###	depends on VOLUMEID
+###	help
+###	  TODO
+
+config BUSYBOX_CONFIG_FEATURE_VOLUMEID_OCFS2
+	bool "ocfs2 filesystem"
+	default n
+	depends on BUSYBOX_CONFIG_VOLUMEID
+	help
+	  TODO
+
+### config FEATURE_VOLUMEID_HIGHPOINTRAID
+###	bool "highpoint raid"
+###	default n
+###	depends on VOLUMEID
+###	help
+###	  TODO
+
+### config FEATURE_VOLUMEID_ISWRAID
+###	bool "intel raid"
+###	default n
+###	depends on VOLUMEID
+###	help
+###	  TODO
+
+### config FEATURE_VOLUMEID_LSIRAID
+###	bool "lsi raid"
+###	default n
+###	depends on VOLUMEID
+###	help
+###	  TODO
+
+### config FEATURE_VOLUMEID_VIARAID
+###	bool "via raid"
+###	default n
+###	depends on VOLUMEID
+###	help
+###	  TODO
+
+### config FEATURE_VOLUMEID_SILICONRAID
+###	bool "silicon raid"
+###	default n
+###	depends on VOLUMEID
+###	help
+###	  TODO
+
+### config FEATURE_VOLUMEID_NVIDIARAID
+###	bool "nvidia raid"
+###	default n
+###	depends on VOLUMEID
+###	help
+###	  TODO
+
+### config FEATURE_VOLUMEID_PROMISERAID
+###	bool "promise raid"
+###	default n
+###	depends on VOLUMEID
+###	help
+###	  TODO
+
+config BUSYBOX_CONFIG_FEATURE_VOLUMEID_LINUXRAID
+	bool "linuxraid"
+	default n
+	depends on BUSYBOX_CONFIG_VOLUMEID
+	help
+	  TODO
+
 config BUSYBOX_CONFIG_MOUNT
 	bool "mount"
 	default y
@@ -360,15 +614,42 @@ config BUSYBOX_CONFIG_MOUNT
 	  NFS filesystems.  Most people using BusyBox will also want to enable
 	  the 'mount' utility.
 
+config BUSYBOX_CONFIG_FEATURE_MOUNT_FAKE
+	bool "Support option -f"
+	default n
+	depends on BUSYBOX_CONFIG_MOUNT
+	help
+	  Enable support for faking a file system mount.
+
+config BUSYBOX_CONFIG_FEATURE_MOUNT_VERBOSE
+	bool "Support option -v"
+	default n
+	depends on BUSYBOX_CONFIG_MOUNT
+	help
+	  Enable multi-level -v[vv...] verbose messages. Useful if you
+	  debug mount problems and want to see what is exactly passed
+	  to the kernel.
+
 config BUSYBOX_CONFIG_FEATURE_MOUNT_HELPERS
 	bool "Support mount helpers"
 	default n
 	depends on BUSYBOX_CONFIG_MOUNT
 	help
 	  Enable mounting of virtual file systems via external helpers.
-	  E.g. mount obexfs#-b00.11.22.33.44.55 /mnt will in effect call
-	  obexfs -b00.11.22.33.44.55 /mnt
-	  The idea is to use such virtual filesystems in /etc/fstab
+	  E.g. "mount obexfs#-b00.11.22.33.44.55 /mnt" will in effect call
+	  "obexfs -b00.11.22.33.44.55 /mnt"
+	  Also "mount -t sometype [-o opts] fs /mnt" will try
+	  "sometype [-o opts] fs /mnt" if simple mount syscall fails.
+	  The idea is to use such virtual filesystems in /etc/fstab.
+
+config BUSYBOX_CONFIG_FEATURE_MOUNT_LABEL
+	bool "Support specifiying devices by label or UUID"
+	default n
+	depends on BUSYBOX_CONFIG_MOUNT
+	select BUSYBOX_CONFIG_VOLUMEID
+	help
+	  This allows for specifying a device by label or uuid, rather than by
+	  name.  This feature utilizes the same functionality as findfs.
 
 config BUSYBOX_CONFIG_FEATURE_MOUNT_NFS
 	bool "Support mounting NFS file systems"
@@ -430,6 +711,18 @@ config BUSYBOX_CONFIG_READPROFILE
 	help
 	  This allows you to parse /proc/profile for basic profiling.
 
+config BUSYBOX_CONFIG_RTCWAKE
+	bool "rtcwake"
+	default n
+	help
+	  Enter a system sleep state until specified wakeup time.
+
+config BUSYBOX_CONFIG_SCRIPT
+	bool "script"
+	default n
+	help
+	  The script makes typescript of terminal session.
+
 config BUSYBOX_CONFIG_SETARCH
 	bool "setarch"
 	default n
@@ -450,6 +743,13 @@ config BUSYBOX_CONFIG_SWAPONOFF
 	  space.  If you are not using any swap space, you can leave this
 	  option disabled.
 
+config BUSYBOX_CONFIG_FEATURE_SWAPON_PRI
+	bool "Support priority option -p"
+	default n
+	depends on BUSYBOX_CONFIG_SWAPONOFF
+	help
+	  Enable support for setting swap device priority in swapon.
+
 config BUSYBOX_CONFIG_SWITCH_ROOT
 	bool "switch_root"
 	default y
@@ -479,7 +779,7 @@ config BUSYBOX_CONFIG_UMOUNT
 	  also want to enable 'umount'.
 
 config BUSYBOX_CONFIG_FEATURE_UMOUNT_ALL
-	bool "umount -a option"
+	bool "Support option -a"
 	default y
 	depends on BUSYBOX_CONFIG_UMOUNT
 	help
@@ -508,6 +808,7 @@ config BUSYBOX_CONFIG_FEATURE_MTAB_SUPPORT
 	bool "Support for the old /etc/mtab file"
 	default n
 	depends on BUSYBOX_CONFIG_MOUNT || BUSYBOX_CONFIG_UMOUNT
+	select BUSYBOX_CONFIG_FEATURE_MOUNT_FAKE
 	help
 	  Historically, Unix systems kept track of the currently mounted
 	  partitions in the file "/etc/mtab".  These days, the kernel exports
@@ -528,4 +829,3 @@ config BUSYBOX_CONFIG_FEATURE_MTAB_SUPPORT
 	  your kernel.
 
 endmenu
-

+ 15 - 10
package/busybox/patches/000-autoconf.patch

@@ -1,13 +1,18 @@
-Index: busybox-1.7.2/applets/Kbuild
-===================================================================
---- busybox-1.7.2.orig/applets/Kbuild	2007-10-30 15:35:00.000000000 -0500
-+++ busybox-1.7.2/applets/Kbuild	2007-10-30 15:35:00.000000000 -0500
-@@ -20,6 +20,6 @@
- HOSTCFLAGS_usage.o = -I$(srctree)/include
- 
- applets/applets.o:          include/usage_compressed.h
--applets/usage:              .config $(srctree)/applets/usage_compressed
+--- a/applets/Kbuild
++++ b/applets/Kbuild
+@@ -18,13 +18,13 @@
+ 
+ applets/applets.o: include/usage_compressed.h include/applet_tables.h
+ 
+-applets/usage:         .config $(srctree)/applets/usage_compressed
++applets/usage:         .config $(srctree)/applets/usage_compressed include/autoconf.h
+ applets/applet_tables: .config
+ 
+ quiet_cmd_gen_usage_compressed = GEN     include/usage_compressed.h
+       cmd_gen_usage_compressed = $(srctree)/applets/usage_compressed include/usage_compressed.h applets
+ 
 -include/usage_compressed.h: applets/usage $(srctree)/applets/usage_compressed
-+applets/usage:              .config $(srctree)/applets/usage_compressed include/autoconf.h
 +include/usage_compressed.h: applets/usage $(srctree)/applets/usage_compressed include/autoconf.h
  	$(call cmd,gen_usage_compressed)
+ 
+ quiet_cmd_gen_applet_tables = GEN     include/applet_tables.h

+ 20 - 0
package/busybox/patches/001-init_avoid_loop_opening_tty.patch

@@ -0,0 +1,20 @@
+--- a/init/init.c
++++ b/init/init.c
+@@ -505,12 +505,11 @@
+ 	for (a = init_action_list; a; a = tmp) {
+ 		tmp = a->next;
+ 		if (a->action_type & action_type) {
+-			// Pointless: run() will error out if open of device fails.
+-			///* a->terminal of "" means "init's console" */
+-			//if (a->terminal[0] && access(a->terminal, R_OK | W_OK)) {
+-			//	//message(L_LOG | L_CONSOLE, "Device %s cannot be opened in RW mode", a->terminal /*, strerror(errno)*/);
+-			//	delete_init_action(a);
+-			//} else
++			/* a->terminal of "" means "init's console" */
++			if (a->terminal[0] && access(a->terminal, R_OK | W_OK)) {
++				//message(L_LOG | L_CONSOLE, "Device %s cannot be opened in RW mode", a->terminal /*, strerror(errno)*/);
++				delete_init_action(a);
++			} else
+ 			if (a->action_type & (SYSINIT | WAIT | CTRLALTDEL | SHUTDOWN | RESTART)) {
+ 				waitfor(run(a));
+ 				delete_init_action(a);

+ 4 - 6
package/busybox/patches/110-wget_getopt_fix.patch

@@ -1,8 +1,6 @@
-Index: busybox-1.7.2/networking/wget.c
-===================================================================
---- busybox-1.7.2.orig/networking/wget.c	2007-10-30 15:35:00.000000000 -0500
-+++ busybox-1.7.2/networking/wget.c	2007-10-30 15:35:00.000000000 -0500
-@@ -140,7 +140,7 @@
+--- a/networking/wget.c
++++ b/networking/wget.c
+@@ -437,7 +437,7 @@
  		"directory-prefix\0" Required_argument "P"
  		"proxy\0"            Required_argument "Y"
  		"user-agent\0"       Required_argument "U"
@@ -10,4 +8,4 @@ Index: busybox-1.7.2/networking/wget.c
 +		"passive-ftp\0"      No_argument       "\xfd"
  		"header\0"           Required_argument "\xfe"
  		;
- 	applet_long_options = wget_longopts;
+ #endif

+ 2 - 4
package/busybox/patches/140-trylink_bash.patch

@@ -1,7 +1,5 @@
-Index: busybox-1.7.2/scripts/trylink
-===================================================================
---- busybox-1.7.2.orig/scripts/trylink	2007-10-30 15:35:00.000000000 -0500
-+++ busybox-1.7.2/scripts/trylink	2007-10-30 15:35:00.000000000 -0500
+--- a/scripts/trylink
++++ b/scripts/trylink
 @@ -1,4 +1,4 @@
 -#!/bin/sh
 +#!/usr/bin/env bash

+ 8 - 12
package/busybox/patches/200-etc_crontabs.patch

@@ -1,9 +1,7 @@
-Index: busybox-1.7.2/miscutils/crond.c
-===================================================================
---- busybox-1.7.2.orig/miscutils/crond.c	2007-10-30 15:35:00.000000000 -0500
-+++ busybox-1.7.2/miscutils/crond.c	2007-10-30 15:35:00.000000000 -0500
-@@ -15,7 +15,7 @@
- #include "libbb.h"
+--- a/miscutils/crond.c
++++ b/miscutils/crond.c
+@@ -24,7 +24,7 @@
+ 
  
  #ifndef CRONTABS
 -#define CRONTABS        "/var/spool/cron/crontabs"
@@ -11,10 +9,8 @@ Index: busybox-1.7.2/miscutils/crond.c
  #endif
  #ifndef TMPDIR
  #define TMPDIR          "/var/spool/cron"
-Index: busybox-1.7.2/miscutils/crontab.c
-===================================================================
---- busybox-1.7.2.orig/miscutils/crontab.c	2007-10-30 15:35:00.000000000 -0500
-+++ busybox-1.7.2/miscutils/crontab.c	2007-10-30 15:35:00.000000000 -0500
+--- a/miscutils/crontab.c
++++ b/miscutils/crontab.c
 @@ -13,7 +13,7 @@
  #include "libbb.h"
  
@@ -22,5 +18,5 @@ Index: busybox-1.7.2/miscutils/crontab.c
 -#define CRONTABS        "/var/spool/cron/crontabs"
 +#define CRONTABS        "/etc/crontabs"
  #endif
- #ifndef TMPDIR
- #define TMPDIR          "/var/spool/cron"
+ #ifndef CRONUPDATE
+ #define CRONUPDATE      "cron.update"

+ 12 - 14
package/busybox/patches/240-udhcpc_retries.patch

@@ -1,22 +1,20 @@
-Index: busybox-1.7.2/networking/udhcp/dhcpc.c
-===================================================================
---- busybox-1.7.2.orig/networking/udhcp/dhcpc.c	2007-10-30 15:35:00.000000000 -0500
-+++ busybox-1.7.2/networking/udhcp/dhcpc.c	2007-10-30 15:35:01.000000000 -0500
-@@ -334,7 +334,7 @@
- 			/* timeout dropped to zero */
+--- a/networking/udhcp/dhcpc.c
++++ b/networking/udhcp/dhcpc.c
+@@ -352,7 +352,7 @@
+ 
  			switch (state) {
  			case INIT_SELECTING:
--				if (packet_num < client_config.retries) {
-+				if (!client_config.retries || (packet_num < client_config.retries)) {
+-				if (packet_num < discover_retries) {
++				if (!discover_retries || packet_num < discover_retries) {
  					if (packet_num == 0)
  						xid = random_xid();
  
-@@ -360,7 +360,7 @@
- 				break;
+@@ -382,7 +382,7 @@
+ 				continue;
  			case RENEW_REQUESTED:
  			case REQUESTING:
--				if (packet_num < client_config.retries) {
-+				if (!client_config.retries || (packet_num < client_config.retries)) {
+-				if (packet_num < discover_retries) {
++				if (!discover_retries || packet_num < discover_retries) {
  					/* send request packet */
- 					if (state == RENEW_REQUESTED)
- 						send_renew(xid, server_addr, requested_ip); /* unicast */
+ 					if (state == RENEW_REQUESTED) /* unicast */
+ 						send_renew(xid, server_addr, requested_ip);

+ 40 - 54
package/busybox/patches/241-udhcpc-oversized_packets.patch

@@ -1,89 +1,75 @@
-Index: busybox-1.7.2/networking/udhcp/packet.c
-===================================================================
---- busybox-1.7.2.orig/networking/udhcp/packet.c	2007-10-30 15:35:00.000000000 -0500
-+++ busybox-1.7.2/networking/udhcp/packet.c	2007-10-30 15:35:01.000000000 -0500
-@@ -121,6 +121,10 @@
+--- a/networking/udhcp/packet.c
++++ b/networking/udhcp/packet.c
+@@ -114,6 +114,10 @@
  	return ~sum;
  }
  
 +int udhcp_get_payload_len(struct dhcpMessage *payload)
 +{
-+	return sizeof(struct dhcpMessage) - MAX_OPTIONS_LEN + end_option(payload->options) + sizeof(payload->options[0]);
++	return sizeof(struct dhcpMessage) - DHCP_OPTIONS_BUFSIZE + end_option(payload->options) + sizeof(payload->options[0]);
 +}
  
- /* Construct a ip/udp header for a packet, and specify the source and dest hardware address */
- void BUG_sizeof_struct_udp_dhcp_packet_must_be_576(void);
-@@ -132,6 +136,7 @@
- 	int result;
- 	struct sockaddr_ll dest;
- 	struct udp_dhcp_packet packet;
+ /* Construct a ip/udp header for a packet, send packet */
+ int udhcp_send_raw_packet(struct dhcpMessage *payload,
+@@ -125,11 +129,7 @@
+ 	int fd;
+ 	int result = -1;
+ 	const char *msg;
+-
+-	enum {
+-		IP_UPD_DHCP_SIZE = sizeof(struct udp_dhcp_packet) - CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS,
+-		UPD_DHCP_SIZE    = IP_UPD_DHCP_SIZE - offsetof(struct udp_dhcp_packet, udp),
+-	};
 +	int p_len = udhcp_get_payload_len(payload);
  
  	fd = socket(PF_PACKET, SOCK_DGRAM, htons(ETH_P_IP));
  	if (fd < 0) {
-@@ -141,6 +146,7 @@
+@@ -139,7 +139,7 @@
  
  	memset(&dest, 0, sizeof(dest));
  	memset(&packet, 0, sizeof(packet));
+-	packet.data = *payload; /* struct copy */
 +	memcpy(&(packet.data), payload, p_len);
  
  	dest.sll_family = AF_PACKET;
  	dest.sll_protocol = htons(ETH_P_IP);
-@@ -158,12 +164,13 @@
+@@ -156,23 +156,18 @@
  	packet.ip.daddr = dest_ip;
  	packet.udp.source = htons(source_port);
  	packet.udp.dest = htons(dest_port);
--	packet.udp.len = htons(sizeof(packet.udp) + sizeof(struct dhcpMessage)); /* cheat on the psuedo-header */
+-	/* size, excluding IP header: */
+-	packet.udp.len = htons(UPD_DHCP_SIZE);
+-	/* for UDP checksumming, ip.len is set to UDP packet len */
 +	p_len += sizeof(packet.udp);
 +	packet.udp.len = htons(p_len);
  	packet.ip.tot_len = packet.udp.len;
--	memcpy(&(packet.data), payload, sizeof(struct dhcpMessage));
--	packet.udp.check = udhcp_checksum(&packet, sizeof(struct udp_dhcp_packet));
+-	packet.udp.check = udhcp_checksum(&packet, IP_UPD_DHCP_SIZE);
+-	/* but for sending, it is set to IP packet len */
+-	packet.ip.tot_len = htons(IP_UPD_DHCP_SIZE);
 +	p_len += sizeof(packet.ip);
 +	packet.udp.check = udhcp_checksum(&packet, p_len);
- 
--	packet.ip.tot_len = htons(sizeof(struct udp_dhcp_packet));
 +	packet.ip.tot_len = htons(p_len);
  	packet.ip.ihl = sizeof(packet.ip) >> 2;
  	packet.ip.version = IPVERSION;
  	packet.ip.ttl = IPDEFTTL;
-@@ -172,7 +179,7 @@
- 	if (sizeof(struct udp_dhcp_packet) != 576)
- 		BUG_sizeof_struct_udp_dhcp_packet_must_be_576();
+ 	packet.ip.check = udhcp_checksum(&packet.ip, sizeof(packet.ip));
  
--	result = sendto(fd, &packet, sizeof(struct udp_dhcp_packet), 0,
+-	/* Currently we send full-sized DHCP packets (zero padded).
+-	 * If you need to change this: last byte of the packet is
+-	 * packet.data.options[end_option(packet.data.options)]
+-	 */
+-	result = sendto(fd, &packet, IP_UPD_DHCP_SIZE, 0,
 +	result = sendto(fd, &packet, p_len, 0,
- 			(struct sockaddr *) &dest, sizeof(dest));
- 	if (result <= 0) {
- 		bb_perror_msg("sendto");
-@@ -216,7 +223,7 @@
- 		return -1;
+ 				(struct sockaddr *) &dest, sizeof(dest));
+ 	msg = "sendto";
+  ret_close:
+@@ -224,8 +219,7 @@
+ 		goto ret_close;
  	}
  
--	result = write(fd, payload, sizeof(struct dhcpMessage));
-+	result = write(fd, payload, udhcp_get_payload_len(payload));
+-	/* Currently we send full-sized DHCP packets (see above) */
+-	result = safe_write(fd, payload, DHCP_SIZE);
++	result = safe_write(fd, payload, udhcp_get_payload_len(payload));
+ 	msg = "write";
+  ret_close:
  	close(fd);
- 	return result;
- }
-Index: busybox-1.7.2/networking/udhcp/common.h
-===================================================================
---- busybox-1.7.2.orig/networking/udhcp/common.h	2007-10-30 15:35:00.000000000 -0500
-+++ busybox-1.7.2/networking/udhcp/common.h	2007-10-30 15:35:01.000000000 -0500
-@@ -21,6 +21,8 @@
- #include <netinet/udp.h>
- #include <netinet/ip.h>
- 
-+#define MAX_OPTIONS_LEN  308
-+
- struct dhcpMessage {
- 	uint8_t op;
- 	uint8_t htype;
-@@ -37,7 +39,7 @@
- 	uint8_t sname[64];
- 	uint8_t file[128];
- 	uint32_t cookie;
--	uint8_t options[308]; /* 312 - cookie */
-+	uint8_t options[MAX_OPTIONS_LEN]; /* 312 - cookie */
- };
- 
- struct udp_dhcp_packet {

+ 8 - 12
package/busybox/patches/242-udhcpc_msgs.patch

@@ -1,8 +1,6 @@
-Index: busybox-1.7.2/networking/udhcp/clientpacket.c
-===================================================================
---- busybox-1.7.2.orig/networking/udhcp/clientpacket.c	2007-10-30 15:35:00.000000000 -0500
-+++ busybox-1.7.2/networking/udhcp/clientpacket.c	2007-10-30 15:35:02.000000000 -0500
-@@ -74,6 +74,7 @@
+--- a/networking/udhcp/clientpacket.c
++++ b/networking/udhcp/clientpacket.c
+@@ -101,6 +101,7 @@
  int send_discover(uint32_t xid, uint32_t requested)
  {
  	struct dhcpMessage packet;
@@ -10,13 +8,11 @@ Index: busybox-1.7.2/networking/udhcp/clientpacket.c
  
  	init_packet(&packet, DHCPDISCOVER);
  	packet.xid = xid;
-@@ -81,7 +82,8 @@
- 		add_simple_option(packet.options, DHCP_REQUESTED_IP, requested);
+@@ -113,6 +114,7 @@
+ 
+ 	add_param_req_option(&packet);
  
- 	add_requests(&packet);
--	bb_info_msg("Sending discover...");
 +	if (msgs++ < 3)
-+		bb_info_msg("Sending discover...");
- 	return udhcp_raw_packet(&packet, INADDR_ANY, CLIENT_PORT, INADDR_BROADCAST,
+ 	bb_info_msg("Sending discover...");
+ 	return udhcp_send_raw_packet(&packet, INADDR_ANY, CLIENT_PORT, INADDR_BROADCAST,
  			SERVER_PORT, MAC_BCAST_ADDR, client_config.ifindex);
- }

+ 5 - 7
package/busybox/patches/243-udhcpc_changed_ifindex.patch

@@ -1,10 +1,8 @@
-Index: busybox-1.7.2/networking/udhcp/dhcpc.c
-===================================================================
---- busybox-1.7.2.orig/networking/udhcp/dhcpc.c	2007-10-30 15:35:01.000000000 -0500
-+++ busybox-1.7.2/networking/udhcp/dhcpc.c	2007-10-30 15:35:02.000000000 -0500
-@@ -309,6 +309,12 @@
-  jump_in:
- 		tv.tv_usec = 0;
+--- a/networking/udhcp/dhcpc.c
++++ b/networking/udhcp/dhcpc.c
+@@ -319,6 +319,12 @@
+ 	for (;;) {
+ 		unsigned timestamp_before_wait;
  
 +		/* When running on a bridge, the ifindex may have changed (e.g. if
 +		 * member interfaces were added/removed or if the status of the

+ 7 - 10
package/busybox/patches/250-ash_export-n.patch

@@ -1,15 +1,11 @@
-Index: busybox-1.7.2/shell/ash.c
-===================================================================
---- busybox-1.7.2.orig/shell/ash.c	2007-10-30 15:34:59.000000000 -0500
-+++ busybox-1.7.2/shell/ash.c	2007-10-30 15:35:02.000000000 -0500
-@@ -11310,8 +11310,18 @@
+--- a/shell/ash.c
++++ b/shell/ash.c
+@@ -11875,8 +11875,17 @@
  	const char *p;
  	char **aptr;
  	int flag = argv[0][0] == 'r'? VREADONLY : VEXPORT;
 +	int mask = ~0;
 +	int nopt;
- 
--	if (nextopt("p") != 'p') {
 +	while ((nopt = nextopt("np"))) {
 +		if (nopt == 'n') {
 +				mask = ~flag;
@@ -17,12 +13,13 @@ Index: busybox-1.7.2/shell/ash.c
 +			break;
 +		}
 +	}
-+
+ 
+-	if (nextopt("p") != 'p') {
 +	if (nopt != 'p') {
  		aptr = argptr;
  		name = *aptr;
  		if (name) {
-@@ -11323,10 +11333,11 @@
+@@ -11888,10 +11897,12 @@
  					vp = *findvar(hashvar(name), name);
  					if (vp) {
  						vp->flags |= flag;
@@ -30,7 +27,7 @@ Index: busybox-1.7.2/shell/ash.c
  						continue;
  					}
  				}
--				setvar(name, p, flag);
+ 				setvar(name, p, flag);
 +				setvar(name, p, flag & mask);
  			} while ((name = *++aptr) != NULL);
  			return 0;

+ 27 - 23
package/busybox/patches/300-netmsg.patch

@@ -1,37 +1,43 @@
-Index: busybox-1.7.2/include/applets.h
-===================================================================
---- busybox-1.7.2.orig/include/applets.h	2007-10-30 15:34:59.000000000 -0500
-+++ busybox-1.7.2/include/applets.h	2007-10-30 15:35:03.000000000 -0500
-@@ -241,6 +241,7 @@
+--- a/include/applets.h
++++ b/include/applets.h
+@@ -257,6 +257,7 @@
  USE_MV(APPLET(mv, _BB_DIR_BIN, _BB_SUID_NEVER))
  USE_NAMEIF(APPLET(nameif, _BB_DIR_SBIN, _BB_SUID_NEVER))
  USE_NC(APPLET(nc, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
-+USE_NETMSG(APPLET_NOUSAGE(netmsg, netmsg, _BB_DIR_BIN, _BB_SUID_ALWAYS))
++USE_NETMSG(APPLET(netmsg, _BB_DIR_BIN, _BB_SUID_ALWAYS))
  USE_NETSTAT(APPLET(netstat, _BB_DIR_BIN, _BB_SUID_NEVER))
  USE_NICE(APPLET(nice, _BB_DIR_BIN, _BB_SUID_NEVER))
  USE_NMETER(APPLET(nmeter, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
-Index: busybox-1.7.2/networking/Config.in
-===================================================================
---- busybox-1.7.2.orig/networking/Config.in	2007-10-30 15:34:59.000000000 -0500
-+++ busybox-1.7.2/networking/Config.in	2007-10-30 15:35:03.000000000 -0500
-@@ -508,6 +508,12 @@
- 	help
+--- a/include/usage.h
++++ b/include/usage.h
+@@ -2815,6 +2815,9 @@
+ 
+ #endif
+ 
++#define netmsg_trivial_usage NOUSAGE_STR
++#define netmsg_full_usage ""
++
+ #define netstat_trivial_usage \
+        "[-laentuwxr"USE_FEATURE_NETSTAT_WIDE("W")"]"
+ #define netstat_full_usage "\n\n" \
+--- a/networking/Config.in
++++ b/networking/Config.in
+@@ -602,6 +602,12 @@
  	  A simple Unix utility which reads and writes data across network
  	  connections.
-+	  
+ 
 +config NETMSG
 +	bool "netmsg"
 +	default n
 +	help
 +	  simple program for sending udp broadcast messages
- 
++
  config NC_SERVER
  	bool "Netcat server options (-l)"
-Index: busybox-1.7.2/networking/Kbuild
-===================================================================
---- busybox-1.7.2.orig/networking/Kbuild	2007-10-30 15:34:59.000000000 -0500
-+++ busybox-1.7.2/networking/Kbuild	2007-10-30 15:35:03.000000000 -0500
-@@ -21,6 +21,7 @@
+ 	default n
+--- a/networking/Kbuild
++++ b/networking/Kbuild
+@@ -24,6 +24,7 @@
  lib-$(CONFIG_IPCALC)       += ipcalc.o
  lib-$(CONFIG_NAMEIF)       += nameif.o
  lib-$(CONFIG_NC)           += nc.o
@@ -39,10 +45,8 @@ Index: busybox-1.7.2/networking/Kbuild
  lib-$(CONFIG_NETSTAT)      += netstat.o
  lib-$(CONFIG_NSLOOKUP)     += nslookup.o
  lib-$(CONFIG_PING)         += ping.o
-Index: busybox-1.7.2/networking/netmsg.c
-===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ busybox-1.7.2/networking/netmsg.c	2007-10-30 15:35:03.000000000 -0500
+--- /dev/null
++++ b/networking/netmsg.c
 @@ -0,0 +1,63 @@
 +/*
 + * Copyright (C) 2006 Felix Fietkau <[email protected]>

+ 0 - 45
package/busybox/patches/310-passwd_access.patch

@@ -1,45 +0,0 @@
-
-	Copyright (C) 2006 OpenWrt.org
-
-Index: busybox-1.7.2/networking/httpd.c
-===================================================================
---- busybox-1.7.2.orig/networking/httpd.c	2007-10-30 15:34:59.000000000 -0500
-+++ busybox-1.7.2/networking/httpd.c	2007-10-30 15:35:03.000000000 -0500
-@@ -1527,12 +1527,26 @@
- 			if (ENABLE_FEATURE_HTTPD_AUTH_MD5) {
- 				char *cipher;
- 				char *pp;
-+				char *ppnew = NULL;
-+				struct passwd *pwd = NULL;
- 
- 				if (strncmp(p, request, u - request) != 0) {
- 					/* user doesn't match */
- 					continue;
- 				}
- 				pp = strchr(p, ':');
-+				if(pp && pp[1] == '$' && pp[2] == 'p' &&
-+						 pp[3] == '$' && pp[4] &&
-+					 (pwd = getpwnam(&pp[4])) != NULL) {
-+					if(pwd->pw_passwd && pwd->pw_passwd[0] == '!') {
-+						prev = NULL;
-+						continue;
-+					}
-+					ppnew = xrealloc(ppnew, 5 + strlen(pwd->pw_passwd));
-+					ppnew[0] = ':';
-+					strcpy(ppnew + 1, pwd->pw_passwd);
-+					pp = ppnew;
-+				}
- 				if (pp && pp[1] == '$' && pp[2] == '1'
- 				 && pp[3] == '$' && pp[4]
- 				) {
-@@ -1543,6 +1557,10 @@
- 					/* unauthorized */
- 					continue;
- 				}
-+				if (ppnew) {
-+					free(ppnew);
-+					ppnew = NULL;
-+				}
- 			}
- 
- 			if (strcmp(p, request) == 0) {

+ 27 - 23
package/busybox/patches/340-lock_util.patch

@@ -1,20 +1,28 @@
-Index: busybox-1.8.1/include/applets.h
-===================================================================
---- busybox-1.8.1.orig/include/applets.h	2007-11-10 16:54:28.318054115 +0100
-+++ busybox-1.8.1/include/applets.h	2007-11-10 17:39:21.487529096 +0100
-@@ -218,6 +218,7 @@
+--- a/include/applets.h
++++ b/include/applets.h
+@@ -220,6 +220,7 @@
  USE_LOAD_POLICY(APPLET(load_policy, _BB_DIR_USR_SBIN, _BB_SUID_NEVER))
  USE_LOADFONT(APPLET(loadfont, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
  USE_LOADKMAP(APPLET(loadkmap, _BB_DIR_SBIN, _BB_SUID_NEVER))
-+USE_LOCK(APPLET_NOUSAGE(lock, lock, _BB_DIR_BIN, _BB_SUID_NEVER))
++USE_LOCK(APPLET(lock, _BB_DIR_BIN, _BB_SUID_NEVER))
  USE_LOGGER(APPLET(logger, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
  USE_LOGIN(APPLET(login, _BB_DIR_BIN, _BB_SUID_ALWAYS))
  USE_LOGNAME(APPLET_NOFORK(logname, logname, _BB_DIR_USR_BIN, _BB_SUID_NEVER, logname))
-Index: busybox-1.8.1/miscutils/Config.in
-===================================================================
---- busybox-1.8.1.orig/miscutils/Config.in	2007-11-10 16:54:16.477379354 +0100
-+++ busybox-1.8.1/miscutils/Config.in	2007-11-10 16:54:28.366056851 +0100
-@@ -244,6 +244,12 @@
+--- a/include/usage.h
++++ b/include/usage.h
+@@ -2138,6 +2138,9 @@
+ #define loadkmap_example_usage \
+        "$ loadkmap < /etc/i18n/lang-keymap\n"
+ 
++#define lock_trivial_usage NOUSAGE_STR
++#define lock_full_usage ""
++
+ #define logger_trivial_usage \
+        "[OPTION]... [MESSAGE]"
+ #define logger_full_usage "\n\n" \
+--- a/miscutils/Config.in
++++ b/miscutils/Config.in
+@@ -364,6 +364,12 @@
  	  Enables the 'hdparm -d' option to get/set using_dma flag.
  	  This is dangerous stuff, so you should probably say N.
  
@@ -27,22 +35,18 @@ Index: busybox-1.8.1/miscutils/Config.in
  config MAKEDEVS
  	bool "makedevs"
  	default n
-Index: busybox-1.8.1/miscutils/Kbuild
-===================================================================
---- busybox-1.8.1.orig/miscutils/Kbuild	2007-11-10 16:54:16.481379580 +0100
-+++ busybox-1.8.1/miscutils/Kbuild	2007-11-10 16:54:28.370057076 +0100
-@@ -16,6 +16,7 @@
- lib-$(CONFIG_HDPARM)      += hdparm.o
- lib-$(CONFIG_LAST)        += last.o
+--- a/miscutils/Kbuild
++++ b/miscutils/Kbuild
+@@ -20,6 +20,7 @@
+ lib-$(CONFIG_FEATURE_LAST_SMALL)+= last.o
+ lib-$(CONFIG_FEATURE_LAST_FANCY)+= last_fancy.o
  lib-$(CONFIG_LESS)        += less.o
 +lib-$(CONFIG_LOCK)        += lock.o
  lib-$(CONFIG_MAKEDEVS)    += makedevs.o
+ lib-$(CONFIG_MAN)         += man.o
  lib-$(CONFIG_MICROCOM)    += microcom.o
- lib-$(CONFIG_MOUNTPOINT)  += mountpoint.o
-Index: busybox-1.8.1/miscutils/lock.c
-===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ busybox-1.8.1/miscutils/lock.c	2007-11-10 17:40:37.203843924 +0100
+--- /dev/null
++++ b/miscutils/lock.c
 @@ -0,0 +1,132 @@
 +/*
 + * Copyright (C) 2006 Felix Fietkau <[email protected]>

+ 27 - 31
package/busybox/patches/350-httpd_redir.patch

@@ -1,31 +1,27 @@
-Index: busybox-1.8.1/include/usage.h
-===================================================================
---- busybox-1.8.1.orig/include/usage.h	2007-11-10 16:54:16.433376848 +0100
-+++ busybox-1.8.1/include/usage.h	2007-11-10 16:54:29.970148260 +0100
-@@ -1418,7 +1418,8 @@
+--- a/include/usage.h
++++ b/include/usage.h
+@@ -1558,7 +1558,8 @@
  	USE_FEATURE_HTTPD_BASIC_AUTH(" [-r realm]") \
  	USE_FEATURE_HTTPD_AUTH_MD5(" [-m pass]") \
         " [-h home]" \
 -       " [-d/-e string]"
 +       " [-d/-e string]" \
 +       " [-R <path> [-H <host>]]"
- #define httpd_full_usage \
-        "Listen for incoming HTTP requests" \
-        "\n\nOptions:" \
-@@ -1436,6 +1437,8 @@
-        "\n	-h HOME		Home directory (default .)" \
-        "\n	-e STRING	HTML encode STRING" \
-        "\n	-d STRING	URL decode STRING" \
-+       "\n	-R PATH 	Redirect target path" \
-+       "\n	-H HOST 	Redirect target host" \
+ #define httpd_full_usage "\n\n" \
+        "Listen for incoming HTTP requests\n" \
+      "\nOptions:" \
+@@ -1576,6 +1577,8 @@
+      "\n	-h HOME		Home directory (default .)" \
+      "\n	-e STRING	HTML encode STRING" \
+      "\n	-d STRING	URL decode STRING" \
++     "\n	-R PATH 	Redirect target path" \
++     "\n	-H HOST 	Redirect target host" \
  
  #define hwclock_trivial_usage \
  	USE_GETOPT_LONG( \
-Index: busybox-1.8.1/networking/httpd.c
-===================================================================
---- busybox-1.8.1.orig/networking/httpd.c	2007-11-10 16:54:28.346055711 +0100
-+++ busybox-1.8.1/networking/httpd.c	2007-11-10 16:54:56.639668071 +0100
-@@ -253,6 +253,8 @@
+--- a/networking/httpd.c
++++ b/networking/httpd.c
+@@ -247,6 +247,8 @@
  
  	const char *found_mime_type;
  	const char *found_moved_temporarily;
@@ -34,8 +30,8 @@ Index: busybox-1.8.1/networking/httpd.c
  	Htaccess_IP *ip_a_d;    /* config allow/deny lines */
  
  	USE_FEATURE_HTTPD_BASIC_AUTH(const char *g_realm;)
-@@ -297,6 +299,8 @@
- #define home_httpd        (G.home_httpd       )
+@@ -292,6 +294,8 @@
+ #define index_page        (G.index_page       )
  #define found_mime_type   (G.found_mime_type  )
  #define found_moved_temporarily (G.found_moved_temporarily)
 +#define redirect_path     (G.redirect_path    )
@@ -43,7 +39,7 @@ Index: busybox-1.8.1/networking/httpd.c
  #define last_mod          (G.last_mod         )
  #define ip_a_d            (G.ip_a_d           )
  #define g_realm           (G.g_realm          )
-@@ -988,8 +992,11 @@
+@@ -991,8 +995,11 @@
  	}
  #endif
  	if (responseNum == HTTP_MOVED_TEMPORARILY) {
@@ -56,21 +52,21 @@ Index: busybox-1.8.1/networking/httpd.c
  				(g_query ? "?" : ""),
  				(g_query ? g_query : ""));
  	}
-@@ -1907,8 +1914,12 @@
- 	*++urlp = '\0';       /* so keep last character */
- 	tptr = urlp;          /* end ptr */
+@@ -1912,8 +1919,12 @@
+ 	} while (*++tptr);
+ 	*++urlp = '\0';       /* terminate after last character */
  
 +	/* redirect active */
 +	if (redirect_path && (strncmp(urlcopy, redirect_path, strlen(redirect_path)) != 0))
 +		found_moved_temporarily = redirect_path;
 +
  	/* If URL is a directory, add '/' */
--	if (tptr[-1] != '/') {
-+	if (!redirect_path && (tptr[-1] != '/')) {
+-	if (urlp[-1] != '/') {
++	if (!redirect_path && (urlp[-1] != '/')) {
  		if (is_directory(urlcopy + 1, 1, &sb)) {
  			found_moved_temporarily = urlcopy;
  		}
-@@ -2252,7 +2263,9 @@
+@@ -2263,7 +2274,9 @@
  #endif
  
  enum {
@@ -81,10 +77,10 @@ Index: busybox-1.8.1/networking/httpd.c
  	d_opt_decode_url,
  	h_opt_home_httpd,
  	USE_FEATURE_HTTPD_ENCODE_URL_STR(e_opt_encode_url,)
-@@ -2301,12 +2314,13 @@
+@@ -2312,12 +2325,13 @@
  	/* We do not "absolutize" path given by -h (home) opt.
- 	 * If user gives relative path in -h, $SCRIPT_FILENAME can end up
- 	 * relative too. */
+ 	 * If user gives relative path in -h,
+ 	 * $SCRIPT_FILENAME will not be set. */
 -	opt = getopt32(argv, "c:d:h:"
 +	opt = getopt32(argv, "R:H:c:d:h:"
  			USE_FEATURE_HTTPD_ENCODE_URL_STR("e:")

+ 0 - 72
package/busybox/patches/360-awk_multi_f.patch

@@ -1,72 +0,0 @@
-Index: busybox-1.7.2/editors/awk.c
-===================================================================
---- busybox-1.7.2.orig/editors/awk.c	2007-10-30 15:34:59.000000000 -0500
-+++ busybox-1.7.2/editors/awk.c	2007-10-30 15:35:03.000000000 -0500
-@@ -2757,6 +2757,7 @@
- {
- 	unsigned opt;
- 	char *opt_F, *opt_W;
-+	llist_t *opt_f = NULL;
- 	llist_t *opt_v = NULL;
- 	int i, j, flen;
- 	var *v;
-@@ -2816,8 +2817,8 @@
- 			*s1 = '=';
- 		}
- 	}
--	opt_complementary = "v::";
--	opt = getopt32(argv, "F:v:f:W:", &opt_F, &opt_v, &g_progname, &opt_W);
-+	opt_complementary = "v::f::";
-+	opt = getopt32(argv, "F:v:f:W:", &opt_F, &opt_v, &opt_f, &opt_W);
- 	argv += optind;
- 	argc -= optind;
- 	if (opt & 0x1)
-@@ -2826,25 +2827,31 @@
- 		if (!is_assignment(llist_pop(&opt_v)))
- 			bb_show_usage();
- 	}
--	if (opt & 0x4) { // -f
--		char *s = s; /* die, gcc, die */
--		FILE *from_file = afopen(g_progname, "r");
--		/* one byte is reserved for some trick in next_token */
--		if (fseek(from_file, 0, SEEK_END) == 0) {
--			flen = ftell(from_file);
--			s = xmalloc(flen + 4);
--			fseek(from_file, 0, SEEK_SET);
--			i = 1 + fread(s + 1, 1, flen, from_file);
--		} else {
--			for (i = j = 1; j > 0; i += j) {
--				s = xrealloc(s, i + 4096);
--				j = fread(s + i, 1, 4094, from_file);
-+	if (opt_f != NULL) { // -f
-+		while (opt_f != NULL) {
-+			char *s = NULL;
-+			FILE *from_file;
-+
-+			g_progname = opt_f->data;
-+			from_file = afopen(g_progname, "r");
-+			/* one byte is reserved for some trick in next_token */
-+			if (fseek(from_file, 0, SEEK_END) == 0) {
-+				flen = ftell(from_file);
-+				s = xmalloc(flen + 4);
-+				fseek(from_file, 0, SEEK_SET);
-+				i = 1 + fread(s + 1, 1, flen, from_file);
-+			} else {
-+				for (i = j = 1; j > 0; i += j) {
-+					s = xrealloc(s, i + 4096);
-+					j = fread(s + i, 1, 4094, from_file);
-+				}
- 			}
-+			s[i] = '\0';
-+			fclose(from_file);
-+			parse_program(s + 1);
-+			free(s);
-+			opt_f = opt_f->link;
- 		}
--		s[i] = '\0';
--		fclose(from_file);
--		parse_program(s + 1);
--		free(s);
- 	} else { // no -f: take program from 1st parameter
- 		if (!argc)
- 			bb_show_usage();

+ 0 - 39
package/busybox/patches/401-darwin_includes.patch

@@ -1,39 +0,0 @@
-Index: busybox-1.7.2/include/platform.h
-===================================================================
---- busybox-1.7.2.orig/include/platform.h	2007-10-30 15:34:59.000000000 -0500
-+++ busybox-1.7.2/include/platform.h	2007-10-30 15:35:04.000000000 -0500
-@@ -137,9 +137,11 @@
- # include <netinet/in.h>
- #endif
- 
-+#ifndef __APPLE__
- #ifndef __socklen_t_defined
- typedef int socklen_t;
- #endif
-+#endif
- 
- /* ---- Compiler dependent settings ------------------------- */
- #if (defined __digital__ && defined __unix__)
-@@ -179,7 +181,7 @@
- #define HAVE_STDINT_H
- #else
- /* Largest integral types.  */
--#if __BIG_ENDIAN__
-+#if __BIG_ENDIAN__ && !__APPLE__
- typedef long                intmax_t;
- typedef unsigned long       uintmax_t;
- #else
-Index: busybox-1.7.2/include/libbb.h
-===================================================================
---- busybox-1.7.2.orig/include/libbb.h	2007-10-30 15:34:59.000000000 -0500
-+++ busybox-1.7.2/include/libbb.h	2007-10-30 15:35:04.000000000 -0500
-@@ -31,7 +31,9 @@
- #include <sys/mman.h>
- #include <sys/socket.h>
- #include <sys/stat.h>
-+#ifndef __APPLE__
- #include <sys/statfs.h>
-+#endif
- #include <sys/time.h>
- #include <sys/types.h>
- #include <sys/wait.h>

+ 4 - 6
package/busybox/patches/410-httpd_cgi_headers.patch

@@ -1,9 +1,7 @@
-Index: busybox-1.7.2/networking/httpd.c
-===================================================================
---- busybox-1.7.2.orig/networking/httpd.c	2007-10-30 15:35:03.000000000 -0500
-+++ busybox-1.7.2/networking/httpd.c	2007-10-30 15:35:04.000000000 -0500
-@@ -1316,10 +1316,10 @@
- 						if (full_write(1, HTTP_200, sizeof(HTTP_200)-1) != sizeof(HTTP_200)-1)
+--- a/networking/httpd.c
++++ b/networking/httpd.c
+@@ -1247,10 +1247,10 @@
+ 						if (full_write(STDOUT_FILENO, HTTP_200, sizeof(HTTP_200)-1) != sizeof(HTTP_200)-1)
  							break;
  					}
 -					/* Commented out:

+ 5 - 7
package/busybox/patches/430-uniq_memleak.patch

@@ -1,13 +1,11 @@
-Index: busybox-1.7.2/coreutils/uniq.c
-===================================================================
---- busybox-1.7.2.orig/coreutils/uniq.c	2007-10-30 15:34:59.000000000 -0500
-+++ busybox-1.7.2/coreutils/uniq.c	2007-10-30 15:35:04.000000000 -0500
-@@ -83,6 +83,8 @@
+--- a/coreutils/uniq.c
++++ b/coreutils/uniq.c
+@@ -82,6 +82,8 @@
  
- 			if (!s0 || strcmp(e0, e1)) {
+ 			if (!s0 || strncmp(e0, e1, max_chars)) {
  				break;
 +			} else {
 +				free(s1);
  			}
  
- 			++dups;		 /* Note: Testing for overflow seems excessive. */
+ 			++dups;	 /* note: testing for overflow seems excessive. */

+ 5 - 7
package/busybox/patches/440-httpd_chdir.patch

@@ -1,10 +1,8 @@
-Index: busybox-1.7.2/networking/httpd.c
-===================================================================
---- busybox-1.7.2.orig/networking/httpd.c	2007-10-30 15:35:04.000000000 -0500
-+++ busybox-1.7.2/networking/httpd.c	2007-10-30 15:35:04.000000000 -0500
-@@ -1618,6 +1618,7 @@
- #if ENABLE_FEATURE_HTTPD_BASIC_AUTH
- 	int credentials = -1;  /* if not required this is Ok */
+--- a/networking/httpd.c
++++ b/networking/httpd.c
+@@ -1797,6 +1797,7 @@
+ 	char *header_ptr = header_ptr;
+ 	Htaccess_Proxy *proxy_entry;
  #endif
 +	xchdir(home_httpd);
  

+ 0 - 12
package/busybox/patches/450-usage_compressed_fix.patch

@@ -1,12 +0,0 @@
-Index: busybox-1.7.2/applets/usage_compressed
-===================================================================
---- busybox-1.7.2.orig/applets/usage_compressed	2007-10-30 15:34:59.000000000 -0500
-+++ busybox-1.7.2/applets/usage_compressed	2007-10-30 15:35:04.000000000 -0500
-@@ -14,6 +14,6 @@
- 
- echo 'static const char packed_usage[] ALIGN1 = '
- "$loc/usage" | bzip2 -1 | od -v -t x1 \
--| $SED -e 's/^[^ ]*//' -e 's/  *\(..\)/\\x\1/g' -e 's/^\(.*\)$/"\1"/'
-+| $SED -e 's/^[^ ]*//' -e 's/  *\([a-f0-9][a-f0-9]\)/\\x\1/g' -e 's/^\(.*\)$/"\1"/'
- echo ';'
- echo '#define SIZEOF_usage_messages' `expr 0 + $sz`

+ 4 - 6
package/busybox/patches/460-truncated_ping_results.patch

@@ -1,7 +1,5 @@
-Index: busybox-1.7.2/networking/ping.c
-===================================================================
---- busybox-1.7.2.orig/networking/ping.c	2007-10-30 15:34:59.000000000 -0500
-+++ busybox-1.7.2/networking/ping.c	2007-10-30 15:35:05.000000000 -0500
+--- a/networking/ping.c
++++ b/networking/ping.c
 @@ -91,7 +91,7 @@
  	struct sockaddr_in pingaddr;
  	struct icmp *pkt;
@@ -10,7 +8,7 @@ Index: busybox-1.7.2/networking/ping.c
 +	char packet[datalen + ICMP_MINLEN + MAXIPLEN + MAXICMPLEN];
  
  	pingsock = create_icmp_socket();
- 	pingaddr = lsa->sin;
+ 	pingaddr = lsa->u.sin;
 @@ -101,7 +101,7 @@
  	pkt->icmp_type = ICMP_ECHO;
  	pkt->icmp_cksum = in_cksum((unsigned short *) pkt, sizeof(packet));
@@ -28,7 +26,7 @@ Index: busybox-1.7.2/networking/ping.c
 +	char packet[datalen + ICMP_MINLEN + MAXIPLEN + MAXICMPLEN];
  
  	pingsock = create_icmp6_socket();
- 	pingaddr = lsa->sin6;
+ 	pingaddr = lsa->u.sin6;
 @@ -147,7 +147,7 @@
  	sockopt = offsetof(struct icmp6_hdr, icmp6_cksum);
  	setsockopt(pingsock, SOL_RAW, IPV6_CHECKSUM, &sockopt, sizeof(sockopt));

+ 281 - 39
package/busybox/patches/470-insmod_search.patch

@@ -1,7 +1,5 @@
-Index: busybox-1.8.1/modutils/insmod.c
-===================================================================
---- busybox-1.8.1.orig/modutils/insmod.c	2007-11-10 02:40:49.000000000 +0100
-+++ busybox-1.8.1/modutils/insmod.c	2007-11-10 17:28:44.391223047 +0100
+--- a/modutils/insmod.c
++++ b/modutils/insmod.c
 @@ -61,21 +61,117 @@
  #include "libbb.h"
  #include <libgen.h>
@@ -27,9 +25,9 @@ Index: busybox-1.8.1/modutils/insmod.c
  #if ENABLE_FEATURE_2_6_MODULES
 -static int insmod_ng_main(int argc, char **argv);
 +int insmod_main_26(int argc, char **argv);
-+#endif
+ #endif
 +int insmod_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
-+
+ 
 +static char *g_filename = NULL;
 +#define _PATH_MODULES	"/lib/modules"
 +
@@ -69,7 +67,7 @@ Index: busybox-1.8.1/modutils/insmod.c
 +	if (k_version <= 4)
 +		suffix = ".o";
 +	else
- #endif
++#endif
 +		suffix = ".ko";
 +
 +	len = strlen(filename);
@@ -111,7 +109,7 @@ Index: busybox-1.8.1/modutils/insmod.c
 +		ret = 0;
 +	else
 +		free(g_filename);
- 
++
 +done:
 +	free(filename);
 +
@@ -125,23 +123,50 @@ Index: busybox-1.8.1/modutils/insmod.c
  #if ENABLE_FEATURE_INSMOD_LOADINKMEM
  #define LOADBITS 0
  #else
-@@ -673,7 +769,6 @@
- #endif
+@@ -184,7 +280,6 @@
+ /* Microblaze */
+ #if defined(__microblaze__)
+ #define USE_SINGLE
+-#include <linux/elf-em.h>
+ #define MATCH_MACHINE(x) (x == EM_XILINX_MICROBLAZE)
+ #define SHT_RELM	SHT_RELA
+ #define Elf32_RelM	Elf32_Rela
+@@ -452,7 +547,7 @@
+ /* The system calls unchanged between 2.0 and 2.1.  */
+ 
+ unsigned long create_module(const char *, size_t);
+-int delete_module(const char *module, unsigned int flags);
++int delete_module(const char *);
  
  
--#define _PATH_MODULES	"/lib/modules"
+ #endif /* module.h */
+@@ -652,7 +747,7 @@
+ 
+ static enum obj_reloc arch_apply_relocation(struct obj_file *f,
+ 				      struct obj_section *targsec,
+-				      /*struct obj_section *symsec,*/
++				      struct obj_section *symsec,
+ 				      struct obj_symbol *sym,
+ 				      ElfW(RelM) *rel, ElfW(Addr) value);
+ 
+@@ -673,6 +768,7 @@
+ #define SPFX	""
+ #endif
+ 
++
  enum { STRVERSIONLEN = 64 };
  
  /*======================================================================*/
-@@ -789,27 +884,6 @@
+@@ -788,28 +884,6 @@
  static char *m_fullName;
  
  
 -/*======================================================================*/
 -
 -
--static int check_module_name_match(const char *filename, struct stat *statbuf,
--				void *userdata, int depth)
+-static int check_module_name_match(const char *filename,
+-		struct stat *statbuf ATTRIBUTE_UNUSED,
+-		void *userdata, int depth ATTRIBUTE_UNUSED)
 -{
 -	char *fullname = (char *) userdata;
 -	char *tmp;
@@ -161,7 +186,170 @@ Index: busybox-1.8.1/modutils/insmod.c
  
  /*======================================================================*/
  
-@@ -3897,145 +3971,57 @@
+@@ -835,27 +909,18 @@
+ static enum obj_reloc
+ arch_apply_relocation(struct obj_file *f,
+ 				struct obj_section *targsec,
+-				/*struct obj_section *symsec,*/
++				struct obj_section *symsec,
+ 				struct obj_symbol *sym,
+ 				ElfW(RelM) *rel, ElfW(Addr) v)
+ {
+-#if defined(__arm__) || defined(__i386__) || defined(__mc68000__) \
+- || defined(__sh__) || defined(__s390__) || defined(__x86_64__)
+ 	struct arch_file *ifile = (struct arch_file *) f;
+-#endif
+ 	enum obj_reloc ret = obj_reloc_ok;
+ 	ElfW(Addr) *loc = (ElfW(Addr) *) (targsec->contents + rel->r_offset);
+-#if defined(__arm__) || defined(__H8300H__) || defined(__H8300S__) \
+- || defined(__i386__) || defined(__mc68000__) || defined(__microblaze__) \
+- || defined(__mips__) || defined(__nios2__) || defined(__powerpc__) \
+- || defined(__s390__) || defined(__sh__) || defined(__x86_64__)
+ 	ElfW(Addr) dot = targsec->header.sh_addr + rel->r_offset;
+-#endif
+ #if defined(USE_GOT_ENTRIES) || defined(USE_PLT_ENTRIES)
+ 	struct arch_symbol *isym = (struct arch_symbol *) sym;
+ #endif
+-#if defined(__arm__) || defined(__i386__) || defined(__mc68000__) \
+- || defined(__sh__) || defined(__s390__)
++#if defined(__arm__) || defined(__i386__) || defined(__mc68000__) || defined(__sh__) || defined(__s390__)
+ #if defined(USE_GOT_ENTRIES)
+ 	ElfW(Addr) got = ifile->got ? ifile->got->header.sh_addr : 0;
+ #endif
+@@ -953,7 +1018,6 @@
+ 
+ 		case R_386_PLT32:
+ 		case R_386_PC32:
+-		case R_386_GOTOFF:
+ 			*loc += v - dot;
+ 			break;
+ 
+@@ -972,6 +1036,9 @@
+ 
+ 		case R_386_GOT32:
+ 			goto bb_use_got;
++
++		case R_386_GOTOFF:
++			*loc += v - got;
+ 			break;
+ 
+ #elif defined(__microblaze__)
+@@ -1758,7 +1825,7 @@
+ 
+ #if defined(USE_SINGLE)
+ 
+-static int arch_single_init(/*ElfW(RelM) *rel,*/ struct arch_single_entry *single,
++static int arch_single_init(ElfW(RelM) *rel, struct arch_single_entry *single,
+ 			     int offset, int size)
+ {
+ 	if (single->allocated == 0) {
+@@ -1906,7 +1973,7 @@
+ #if defined(USE_GOT_ENTRIES)
+ 			if (got_allocate) {
+ 				got_offset += arch_single_init(
+-						/*rel,*/ &intsym->gotent,
++						rel, &intsym->gotent,
+ 						got_offset, GOT_ENTRY_SIZE);
+ 
+ 				got_needed = 1;
+@@ -1920,7 +1987,7 @@
+ 						plt_offset, PLT_ENTRY_SIZE);
+ #else
+ 				plt_offset += arch_single_init(
+-						/*rel,*/ &intsym->pltent,
++						rel, &intsym->pltent,
+ 						plt_offset, PLT_ENTRY_SIZE);
+ #endif
+ 				plt_needed = 1;
+@@ -1958,8 +2025,7 @@
+ 	while (n > 0) {
+ 		ch = *name++;
+ 		h = (h << 4) + ch;
+-		g = (h & 0xf0000000);
+-		if (g != 0) {
++		if ((g = (h & 0xf0000000)) != 0) {
+ 			h ^= g >> 24;
+ 			h &= ~g;
+ 		}
+@@ -2038,7 +2104,7 @@
+ 	int n_type = ELF_ST_TYPE(info);
+ 	int n_binding = ELF_ST_BIND(info);
+ 
+-	for (sym = f->symtab[hash]; sym; sym = sym->next) {
++	for (sym = f->symtab[hash]; sym; sym = sym->next)
+ 		if (f->symbol_cmp(sym->name, name) == 0) {
+ 			int o_secidx = sym->secidx;
+ 			int o_info = sym->info;
+@@ -2097,14 +2163,14 @@
+ 				return sym;
+ 			}
+ 		}
+-	}
+ 
+ 	/* Completely new symbol.  */
+ 	sym = arch_new_symbol();
+ 	sym->next = f->symtab[hash];
+ 	f->symtab[hash] = sym;
+ 	sym->ksymidx = -1;
+-	if (ELF_ST_BIND(info) == STB_LOCAL && symidx != (unsigned long)(-1)) {
++
++	if (ELF_ST_BIND(info) == STB_LOCAL && symidx != -1) {
+ 		if (symidx >= f->local_symtab_size)
+ 			bb_error_msg("local symbol %s with index %ld exceeds local_symtab_size %ld",
+ 					name, (long) symidx, (long) f->local_symtab_size);
+@@ -3227,7 +3293,7 @@
+ 
+ 			/* Do it! */
+ 			switch (arch_apply_relocation
+-					(f, targsec, /*symsec,*/ intsym, rel, value)
++					(f, targsec, symsec, intsym, rel, value)
+ 			) {
+ 			case obj_reloc_ok:
+ 				break;
+@@ -3306,11 +3372,11 @@
+ 
+ /*======================================================================*/
+ 
+-static struct obj_file *obj_load(FILE * fp, int loadprogbits ATTRIBUTE_UNUSED)
++static struct obj_file *obj_load(FILE * fp, int loadprogbits)
+ {
+ 	struct obj_file *f;
+ 	ElfW(Shdr) * section_headers;
+-	size_t shnum, i;
++	int shnum, i;
+ 	char *shstrtab;
+ 
+ 	/* Read the file header.  */
+@@ -3582,7 +3648,7 @@
+ 		while (ptr < endptr) {
+ 			value = strchr(ptr, '=');
+ 			if (value && strncmp(ptr, "license", value-ptr) == 0) {
+-				unsigned i;
++				int i;
+ 				if (license)
+ 					*license = value+1;
+ 				for (i = 0; i < ARRAY_SIZE(gpl_licenses); ++i) {
+@@ -3686,9 +3752,6 @@
+  * start of some sections.  this info is used by ksymoops to do better
+  * debugging.
+  */
+-#if !ENABLE_FEATURE_INSMOD_VERSION_CHECKING
+-#define get_module_version(f, str) get_module_version(str)
+-#endif
+ static int
+ get_module_version(struct obj_file *f, char str[STRVERSIONLEN])
+ {
+@@ -3721,8 +3784,7 @@
+ 	struct obj_symbol *sym;
+ 	char *name, *absolute_filename;
+ 	char str[STRVERSIONLEN];
+-	unsigned i;
+-	int l, lm_name, lfilename, use_ksymtab, version;
++	int i, l, lm_name, lfilename, use_ksymtab, version;
+ 	struct stat statbuf;
+ 
+ 	/* WARNING: was using realpath, but replaced by readlink to stop using
+@@ -3909,145 +3971,57 @@
  void print_load_map(struct obj_file *f);
  #endif
  
@@ -257,10 +445,8 @@ Index: busybox-1.8.1/modutils/insmod.c
 -	} else {
 -		free(tmp1);
 -		tmp1 = NULL;       /* flag for free(m_name) before exit() */
-+		tmp = xstrdup(arg1);
-+		m_name = basename(tmp);
- 	}
- 
+-	}
+-
 -	/* Get a filedesc for the module.  Check that we have a complete path */
 -	if (stat(arg1, &st) < 0 || !S_ISREG(st.st_mode)
 -	 || (fp = fopen(arg1, "r")) == NULL
@@ -271,7 +457,7 @@ Index: busybox-1.8.1/modutils/insmod.c
 -			char *module_dir;
 -			char *tmdn;
 -
--			tmdn = concat_path_file(_PATH_MODULES, myuname.release);
+-			tmdn = concat_path_file(CONFIG_DEFAULT_MODULES_DIR, myuname.release);
 -			/* Jump through hoops in case /lib/modules/`uname -r`
 -			 * is a symlink.  We do not want recursive_action to
 -			 * follow symlinks, but we do want to follow the
@@ -293,9 +479,9 @@ Index: busybox-1.8.1/modutils/insmod.c
 -
 -			free(m_filename);
 -			m_filename = NULL;
--			module_dir = xmalloc_readlink(_PATH_MODULES);
+-			module_dir = xmalloc_readlink(CONFIG_DEFAULT_MODULES_DIR);
 -			if (!module_dir)
--				module_dir = xstrdup(_PATH_MODULES);
+-				module_dir = xstrdup(CONFIG_DEFAULT_MODULES_DIR);
 -			/* No module found under /lib/modules/`uname -r`, this
 -			 * time cast the net a bit wider.  Search /lib/modules/ */
 -			r = recursive_action(module_dir, ACTION_RECURSE,
@@ -308,10 +494,12 @@ Index: busybox-1.8.1/modutils/insmod.c
 -			) {
 -				bb_error_msg_and_die("%s: module not found", m_fullName);
 -			}
--		}
++		tmp = xstrdup(arg1);
++		m_name = basename(tmp);
+ 		}
 -	} else
 -		m_filename = xstrdup(arg1);
--
+ 
 -	if (flag_verbose)
 -		printf("Using %s\n", m_filename);
 -
@@ -329,7 +517,7 @@ Index: busybox-1.8.1/modutils/insmod.c
  
  	f = obj_load(fp, LOADBITS);
  
-@@ -4062,7 +4048,7 @@
+@@ -4074,7 +4048,7 @@
  				"\t%s was compiled for kernel version %s\n"
  				"\twhile this kernel is version %s",
  				flag_force_load ? "warning: " : "",
@@ -338,7 +526,7 @@ Index: busybox-1.8.1/modutils/insmod.c
  			if (!flag_force_load)
  				goto out;
  		}
-@@ -4104,7 +4090,7 @@
+@@ -4116,7 +4090,7 @@
  	hide_special_symbols(f);
  
  #if ENABLE_FEATURE_INSMOD_KSYMOOPS_SYMBOLS
@@ -347,7 +535,37 @@ Index: busybox-1.8.1/modutils/insmod.c
  #endif /* FEATURE_INSMOD_KSYMOOPS_SYMBOLS */
  
  	new_create_module_ksymtab(f);
-@@ -4147,18 +4133,19 @@
+@@ -4125,7 +4099,7 @@
+ 	m_size = obj_load_size(f);
+ 
+ 	m_addr = create_module(m_name, m_size);
+-	if (m_addr == (ElfW(Addr))(-1)) switch (errno) {
++	if (m_addr == -1) switch (errno) {
+ 		case EEXIST:
+ 			bb_error_msg_and_die("a module named %s already exists", m_name);
+ 		case ENOMEM:
+@@ -4141,36 +4115,37 @@
+ 	 * now we can load them directly into the kernel memory
+ 	 */
+ 	if (!obj_load_progbits(fp, f, (char*)m_addr)) {
+-		delete_module(m_name, 0);
++		delete_module(m_name);
+ 		goto out;
+ 	}
+ #endif
+ 
+ 	if (!obj_relocate(f, m_addr)) {
+-		delete_module(m_name, 0);
++		delete_module(m_name);
+ 		goto out;
+ 	}
+ 
+ 	if (!new_init_module(m_name, f, m_size)) {
+-		delete_module(m_name, 0);
++		delete_module(m_name);
+ 		goto out;
+ 	}
+ 
  	if (flag_print_load_map)
  		print_load_map(f);
  
@@ -372,19 +590,34 @@ Index: busybox-1.8.1/modutils/insmod.c
  }
  
  #endif /* ENABLE_FEATURE_2_4_MODULES */
-@@ -4190,23 +4177,32 @@
+@@ -4182,15 +4157,8 @@
+ #if ENABLE_FEATURE_2_6_MODULES
+ 
+ #include <sys/mman.h>
+-
+-#if defined __UCLIBC__ && !ENABLE_FEATURE_2_4_MODULES
+-/* big time suckage. The old prototype above renders our nice fwd-decl wrong */
+-extern int init_module(void *module, unsigned long len, const char *options);
+-#else
+ #include <asm/unistd.h>
+ #include <sys/syscall.h>
+-#define init_module(mod, len, opts) syscall(__NR_init_module, mod, len, opts)
+-#endif
+ 
+ /* We use error numbers in a loose translation... */
+ static const char *moderror(int err)
+@@ -4209,22 +4177,32 @@
  	}
  }
  
 -#if !ENABLE_FEATURE_2_4_MODULES
 -int insmod_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
--int insmod_main(int argc, char **argv)
+-int insmod_main(int argc ATTRIBUTE_UNUSED, char **argv)
 -#else
--static int insmod_ng_main(int argc, char **argv)
+-static int insmod_ng_main(int argc ATTRIBUTE_UNUSED, char **argv)
 -#endif
 +int insmod_main_26(int argc, char **argv)
  {
--	long ret;
 -	size_t len;
 +	char *filename, *options;
 +	struct utsname myuname;
@@ -414,12 +647,20 @@ Index: busybox-1.8.1/modutils/insmod.c
  	/* Rest is options */
  	options = xzalloc(1);
  	optlen = 0;
-@@ -4216,36 +4212,47 @@
+@@ -4234,41 +4212,47 @@
  		optlen += sprintf(options + optlen, (strchr(*argv,' ') ? "\"%s\" " : "%s "), *argv);
  	}
  
 -#if 0
--	/* Any special reason why mmap? It isn't performace critical... */
+-	/* Any special reason why mmap? It isn't performance critical. -vda */
+-	/* Yes, xmalloc'ing can use *alot* of RAM. Don't forget that there are
+-	 * modules out there that are half a megabyte! mmap()ing is way nicer
+-	 * for small mem boxes, i guess. */
+-	/* But after load, these modules will take up that 0.5mb in kernel
+-	 * anyway. Using malloc here causes only a transient spike to 1mb,
+-	 * after module is loaded, we go back to normal 0.5mb usage
+-	 * (in kernel). Also, mmap isn't magic - when we touch mapped data,
+-	 * we use memory. -vda */
 -	int fd;
 -	struct stat st;
 -	unsigned long len;
@@ -440,18 +681,19 @@ Index: busybox-1.8.1/modutils/insmod.c
  	len = MAXINT(ssize_t);
 -	map = xmalloc_open_read_close(filename, &len);
 -#endif
--
 +	map = xmalloc_open_read_close(g_filename, &len);
- 	ret = syscall(__NR_init_module, map, len, options);
- 	if (ret != 0) {
- 		bb_perror_msg_and_die("cannot insert '%s': %s (%li)",
--				filename, moderror(errno), ret);
++	ret = syscall(__NR_init_module, map, len, options);
++	if (ret != 0) {
++		bb_perror_msg_and_die("cannot insert '%s': %s (%li)",
 +				g_filename, moderror(errno), ret);
- 	}
++	}
 +done:
 +	if (g_filename && (g_filename != filename))
 +		free(g_filename);
  
+-	if (init_module(map, len, options) != 0)
+-		bb_error_msg_and_die("cannot insert '%s': %s",
+-				filename, moderror(errno));
 -	return 0;
 +	return ret;
  }

+ 0 - 40
package/busybox/patches/480-disable_braindead_optimization.patch

@@ -1,40 +0,0 @@
-Index: busybox-1.8.1/editors/awk.c
-===================================================================
---- busybox-1.8.1.orig/editors/awk.c	2007-11-10 23:53:16.950053243 +0100
-+++ busybox-1.8.1/editors/awk.c	2007-11-10 23:53:23.422422084 +0100
-@@ -446,7 +446,7 @@
- 	tsplitter fsplitter, rsplitter;
- };
- #define G1 (ptr_to_globals[-1])
--#define G (*(struct globals2 *const)ptr_to_globals)
-+#define G (*(struct globals2 *)ptr_to_globals)
- /* For debug. nm --size-sort awk.o | grep -vi ' [tr] ' */
- /* char G1size[sizeof(G1)]; - 0x6c */
- /* char Gsize[sizeof(G)]; - 0x1cc */
-Index: busybox-1.8.1/include/libbb.h
-===================================================================
---- busybox-1.8.1.orig/include/libbb.h	2007-11-10 23:53:38.135260518 +0100
-+++ busybox-1.8.1/include/libbb.h	2007-11-10 23:54:15.773405393 +0100
-@@ -1111,8 +1111,10 @@
- struct globals;
- /* '*const' ptr makes gcc optimize code much better.
-  * Magic prevents ptr_to_globals from going into rodata.
-- * If you want to assign a value, use PTR_TO_GLOBALS = xxx */
--extern struct globals *const ptr_to_globals;
-+ * If you want to assign a value, use PTR_TO_GLOBALS = xxx 
-+ * unfortunately the above hack doesn't work properly :P
-+ */
-+extern struct globals *ptr_to_globals;
- #define PTR_TO_GLOBALS (*(struct globals**)&ptr_to_globals)
- 
- 
-Index: busybox-1.8.1/libbb/messages.c
-===================================================================
---- busybox-1.8.1.orig/libbb/messages.c	2007-11-10 23:52:47.116353117 +0100
-+++ busybox-1.8.1/libbb/messages.c	2007-11-10 23:52:57.752959269 +0100
-@@ -74,4 +74,4 @@
- 
- struct globals;
- /* Make it reside in R/W memory: */
--struct globals *const ptr_to_globals __attribute__ ((section (".data")));
-+struct globals *ptr_to_globals __attribute__ ((section (".data")));

Diferenças do arquivo suprimidas por serem muito extensas
+ 158 - 310
package/busybox/patches/500-ipkg.patch


+ 37 - 51
package/busybox/patches/501-libbb_hash.patch

@@ -1,8 +1,25 @@
-Index: busybox-1.8.1/coreutils/md5_sha1_sum.c
-===================================================================
---- busybox-1.8.1.orig/coreutils/md5_sha1_sum.c	2007-11-10 02:40:51.000000000 +0100
-+++ busybox-1.8.1/coreutils/md5_sha1_sum.c	2007-11-10 17:05:59.957468399 +0100
-@@ -8,75 +8,10 @@
+--- a/include/libbb.h
++++ b/include/libbb.h
+@@ -1211,6 +1211,7 @@
+ extern const char bb_uuenc_tbl_std[];
+ void bb_uuencode(char *store, const void *s, int length, const char *tbl);
+ 
++typedef enum { HASH_SHA1, HASH_MD5 } hash_algo_t;
+ typedef struct sha1_ctx_t {
+ 	uint32_t count[2];
+ 	uint32_t hash[5];
+@@ -1232,6 +1233,8 @@
+ void md5_begin(md5_ctx_t *ctx);
+ void md5_hash(const void *data, size_t length, md5_ctx_t *ctx);
+ void *md5_end(void *resbuf, md5_ctx_t *ctx);
++unsigned char *hash_bin_to_hex(unsigned char *hash_value, unsigned hash_length);
++uint8_t *hash_file(const char *filename, hash_algo_t hash_algo);
+ 
+ uint32_t *crc32_filltable(uint32_t *tbl256, int endian);
+ 
+--- a/coreutils/md5_sha1_sum.c
++++ b/coreutils/md5_sha1_sum.c
+@@ -8,72 +8,10 @@
  
  #include "libbb.h"
  
@@ -19,7 +36,7 @@ Index: busybox-1.8.1/coreutils/md5_sha1_sum.c
 -	/* xzalloc zero-terminates */
 -	char *hex_value = xzalloc((hash_length * 2) + 1);
 -	bin2hex(hex_value, (char*)hash_value, hash_length);
--	return hex_value;
+-	return (unsigned char *)hex_value;
 -}
 -
 -static uint8_t *hash_file(const char *filename, hash_algo_t hash_algo)
@@ -34,12 +51,9 @@ Index: busybox-1.8.1/coreutils/md5_sha1_sum.c
 -	void (*update)(const void*, size_t, void*);
 -	void (*final)(void*, void*);
 -
--	src_fd = STDIN_FILENO;
--	if (NOT_LONE_DASH(filename)) {
--		src_fd = open_or_warn(filename, O_RDONLY);
--		if (src_fd < 0) {
--			return NULL;
--		}
+-	src_fd = open_or_warn_stdin(filename);
+-	if (src_fd < 0) {
+-		return NULL;
 -	}
 -
 -	/* figure specific hash algorithims */
@@ -76,46 +90,21 @@ Index: busybox-1.8.1/coreutils/md5_sha1_sum.c
 -}
 -
  int md5_sha1_sum_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
- int md5_sha1_sum_main(int argc, char **argv)
+ int md5_sha1_sum_main(int argc ATTRIBUTE_UNUSED, char **argv)
  {
-Index: busybox-1.8.1/include/libbb.h
-===================================================================
---- busybox-1.8.1.orig/include/libbb.h	2007-11-10 16:55:07.048261223 +0100
-+++ busybox-1.8.1/include/libbb.h	2007-11-10 17:04:07.543062264 +0100
-@@ -1022,6 +1022,7 @@
- extern const char bb_uuenc_tbl_std[];
- void bb_uuencode(char *store, const void *s, int length, const char *tbl);
- 
-+typedef enum { HASH_SHA1, HASH_MD5 } hash_algo_t;
- typedef struct sha1_ctx_t {
- 	uint32_t count[2];
- 	uint32_t hash[5];
-@@ -1043,6 +1044,8 @@
- void md5_begin(md5_ctx_t *ctx);
- void md5_hash(const void *data, size_t length, md5_ctx_t *ctx);
- void *md5_end(void *resbuf, md5_ctx_t *ctx);
-+unsigned char *hash_bin_to_hex(unsigned char *hash_value, unsigned hash_length);
-+uint8_t *hash_file(const char *filename, hash_algo_t hash_algo);
- 
- uint32_t *crc32_filltable(uint32_t *tbl256, int endian);
- 
-Index: busybox-1.8.1/libbb/Kbuild
-===================================================================
---- busybox-1.8.1.orig/libbb/Kbuild	2007-11-10 02:40:52.000000000 +0100
-+++ busybox-1.8.1/libbb/Kbuild	2007-11-10 17:04:07.547062497 +0100
-@@ -39,6 +39,7 @@
+--- a/libbb/Kbuild
++++ b/libbb/Kbuild
+@@ -40,6 +40,7 @@
  lib-y += get_last_path_component.o
  lib-y += get_line_from_file.o
  lib-y += getopt32.o
 +lib-y += hash.o
+ lib-y += getpty.o
  lib-y += herror_msg.o
  lib-y += herror_msg_and_die.o
- lib-y += human_readable.o
-Index: busybox-1.8.1/libbb/hash.c
-===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ busybox-1.8.1/libbb/hash.c	2007-11-10 17:04:07.551062729 +0100
-@@ -0,0 +1,81 @@
+--- /dev/null
++++ b/libbb/hash.c
+@@ -0,0 +1,78 @@
 +/*
 + *  Copyright (C) 2003 Glenn L. McGrath
 + *  Copyright (C) 2003-2004 Erik Andersen
@@ -155,12 +144,9 @@ Index: busybox-1.8.1/libbb/hash.c
 +	void (*update)(const void*, size_t, void*);
 +	void (*final)(void*, void*);
 +
-+	src_fd = STDIN_FILENO;
-+	if (NOT_LONE_DASH(filename)) {
-+		src_fd = open_or_warn(filename, O_RDONLY);
-+		if (src_fd < 0) {
-+			return NULL;
-+		}
++	src_fd = open_or_warn_stdin(filename);
++	if (src_fd < 0) {
++		return NULL;
 +	}
 +
 +	/* figure specific hash algorithims */

+ 47 - 56
package/busybox/patches/510-awx.patch

@@ -1,8 +1,6 @@
-Index: busybox-1.8.1/editors/awk.c
-===================================================================
---- busybox-1.8.1.orig/editors/awk.c	2007-11-10 16:55:07.032260312 +0100
-+++ busybox-1.8.1/editors/awk.c	2007-11-10 17:07:04.493146078 +0100
-@@ -33,6 +33,11 @@
+--- a/editors/awk.c
++++ b/editors/awk.c
+@@ -32,6 +32,11 @@
  /* these flags are static, don't change them when value is changed */
  #define	VF_DONTTOUCH    (VF_ARRAY | VF_SPECIAL | VF_WALK | VF_CHILD | VF_DIRTY)
  
@@ -14,23 +12,22 @@ Index: busybox-1.8.1/editors/awk.c
  /* Variable */
  typedef struct var_s {
  	unsigned type;            /* flags */
-@@ -54,9 +59,14 @@
+@@ -53,9 +58,14 @@
  } chain;
  
  /* Function */
 +typedef var *(*awk_cfunc)(var *res, var *args, int nargs);
  typedef struct func_s {
  	unsigned nargs;
--	struct chain_s body;
 +	enum { AWKFUNC, CFUNC } type;
 +	union {
 +		awk_cfunc cfunc;
-+		struct chain_s body;
+ 	struct chain_s body;
 +	} x;
  } func;
  
  /* I/O stream */
-@@ -1400,7 +1410,8 @@
+@@ -1395,7 +1405,8 @@
  			next_token(TC_FUNCTION);
  			g_pos++;
  			f = newfunc(t_string);
@@ -40,7 +37,7 @@ Index: busybox-1.8.1/editors/awk.c
  			f->nargs = 0;
  			while (next_token(TC_VARIABLE | TC_SEQTERM) & TC_VARIABLE) {
  				v = findvar(ahash, t_string);
-@@ -1409,7 +1420,7 @@
+@@ -1404,7 +1415,7 @@
  				if (next_token(TC_COMMA | TC_SEQTERM) & TC_SEQTERM)
  					break;
  			}
@@ -49,7 +46,7 @@ Index: busybox-1.8.1/editors/awk.c
  			chain_group();
  			clear_array(ahash);
  
-@@ -2372,7 +2383,8 @@
+@@ -2367,7 +2378,8 @@
  			break;
  
  		case XC( OC_FUNC ):
@@ -59,7 +56,7 @@ Index: busybox-1.8.1/editors/awk.c
  				syntax_error(EMSG_UNDEF_FUNC);
  
  			X.v = R.v = nvalloc(op->r.f->nargs+1);
-@@ -2389,7 +2401,10 @@
+@@ -2384,7 +2396,10 @@
  			fnargs = X.v;
  
  			L.s = g_progname;
@@ -71,7 +68,7 @@ Index: busybox-1.8.1/editors/awk.c
  			g_progname = L.s;
  
  			nvfree(fnargs);
-@@ -2753,6 +2768,12 @@
+@@ -2748,6 +2763,12 @@
  }
  
  int awk_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
@@ -84,7 +81,7 @@ Index: busybox-1.8.1/editors/awk.c
  int awk_main(int argc, char **argv)
  {
  	unsigned opt;
-@@ -2817,6 +2838,11 @@
+@@ -2812,6 +2833,11 @@
  			*s1 = '=';
  		}
  	}
@@ -93,13 +90,11 @@ Index: busybox-1.8.1/editors/awk.c
 +	do_awx(argc, argv);
 +#endif
 +
- 	opt_complementary = "v::f::";
- 	opt = getopt32(argv, "F:v:f:W:", &opt_F, &opt_v, &opt_f, &opt_W);
+ 	opt_complementary = "v::f::"; /* -v and -f can occur multiple times */
+ 	opt = getopt32(argv, "F:v:f:W:", &opt_F, &list_v, &list_f, &opt_W);
  	argv += optind;
-Index: busybox-1.8.1/editors/awx.c
-===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ busybox-1.8.1/editors/awx.c	2007-11-10 17:06:19.258568308 +0100
+--- /dev/null
++++ b/editors/awx.c
 @@ -0,0 +1,636 @@
 +/*
 + * awk web extension
@@ -737,10 +732,8 @@ Index: busybox-1.8.1/editors/awx.c
 +	return awk_main(argc, argv);
 +}
 +
-Index: busybox-1.8.1/editors/awx_parser.h
-===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ busybox-1.8.1/editors/awx_parser.h	2007-11-10 17:06:19.266568760 +0100
+--- /dev/null
++++ b/editors/awx_parser.h
 @@ -0,0 +1,38 @@
 +#ifndef __TEMPLATE_PARSER_H
 +#define __TEMPLATE_PARSER_H
@@ -780,10 +773,8 @@ Index: busybox-1.8.1/editors/awx_parser.h
 +void free_template(struct template_cb *cb, struct template_element *e);
 +
 +#endif
-Index: busybox-1.8.1/editors/awx_parser.l
-===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ busybox-1.8.1/editors/awx_parser.l	2007-11-10 17:06:19.270568989 +0100
+--- /dev/null
++++ b/editors/awx_parser.l
 @@ -0,0 +1,302 @@
 +%{
 +#include <stdio.h>
@@ -1087,10 +1078,8 @@ Index: busybox-1.8.1/editors/awx_parser.l
 +	free(e);
 +	return free_template(cb, next);
 +}
-Index: busybox-1.8.1/editors/Config.in
-===================================================================
---- busybox-1.8.1.orig/editors/Config.in	2007-11-10 02:40:54.000000000 +0100
-+++ busybox-1.8.1/editors/Config.in	2007-11-10 17:06:19.274569218 +0100
+--- a/editors/Config.in
++++ b/editors/Config.in
 @@ -12,6 +12,13 @@
  	  Awk is used as a pattern scanning and processing language.  This is
  	  the BusyBox implementation of that programming language.
@@ -1105,10 +1094,8 @@ Index: busybox-1.8.1/editors/Config.in
  config FEATURE_AWK_MATH
  	bool "Enable math functions (requires libm)"
  	default y
-Index: busybox-1.8.1/editors/Kbuild
-===================================================================
---- busybox-1.8.1.orig/editors/Kbuild	2007-11-10 02:40:54.000000000 +0100
-+++ busybox-1.8.1/editors/Kbuild	2007-11-10 17:06:19.278569448 +0100
+--- a/editors/Kbuild
++++ b/editors/Kbuild
 @@ -12,3 +12,12 @@
  lib-$(CONFIG_PATCH)     += patch.o
  lib-$(CONFIG_SED)       += sed.o
@@ -1122,22 +1109,30 @@ Index: busybox-1.8.1/editors/Kbuild
 +editors/awx_parser.o: editors/awx_parser.c FORCE
 +	$(call cmd,force_checksrc)
 +	$(call if_changed_rule,cc_o_c)
-Index: busybox-1.8.1/include/applets.h
-===================================================================
---- busybox-1.8.1.orig/include/applets.h	2007-11-10 17:03:38.957433264 +0100
-+++ busybox-1.8.1/include/applets.h	2007-11-10 17:06:19.282569674 +0100
-@@ -83,6 +83,7 @@
+--- a/include/applets.h
++++ b/include/applets.h
+@@ -77,6 +77,7 @@
  USE_ARPING(APPLET(arping, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
- USE_ASH(APPLET_NOUSAGE(ash, ash, _BB_DIR_BIN, _BB_SUID_NEVER))
+ USE_ASH(APPLET(ash, _BB_DIR_BIN, _BB_SUID_NEVER))
  USE_AWK(APPLET_NOEXEC(awk, awk, _BB_DIR_USR_BIN, _BB_SUID_NEVER, awk))
-+USE_AWX(APPLET_NOUSAGE(awx, awx, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 
++USE_AWK(APPLET_ODDNAME(awx, awk, _BB_DIR_USR_BIN, _BB_SUID_NEVER, awx)) 
  USE_BASENAME(APPLET_NOFORK(basename, basename, _BB_DIR_USR_BIN, _BB_SUID_NEVER, basename))
  USE_BBCONFIG(APPLET(bbconfig, _BB_DIR_BIN, _BB_SUID_NEVER))
  //USE_BBSH(APPLET(bbsh, _BB_DIR_BIN, _BB_SUID_NEVER))
-Index: busybox-1.8.1/include/cgi.h
-===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ busybox-1.8.1/include/cgi.h	2007-11-10 17:06:19.282569674 +0100
+--- a/include/usage.h
++++ b/include/usage.h
+@@ -114,6 +114,9 @@
+      "\n	-F sep		Use sep as field separator" \
+      "\n	-f file		Read program from file" \
+ 
++#define awx_trivial_usage NOUSAGE_STR
++#define awx_full_usage ""
++
+ #define basename_trivial_usage \
+        "FILE [SUFFIX]"
+ #define basename_full_usage "\n\n" \
+--- /dev/null
++++ b/include/cgi.h
 @@ -0,0 +1,8 @@
 +#ifndef CGI_H
 +#define CGI_H
@@ -1147,10 +1142,8 @@ Index: busybox-1.8.1/include/cgi.h
 +int cgi_init(var_handler);
 +
 +#endif
-Index: busybox-1.8.1/libbb/cgi.c
-===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ busybox-1.8.1/libbb/cgi.c	2007-11-10 17:06:19.282569674 +0100
+--- /dev/null
++++ b/libbb/cgi.c
 @@ -0,0 +1,457 @@
 +/* --------------------------------------------------------------------------
 + * functions for processing cgi form data
@@ -1609,11 +1602,9 @@ Index: busybox-1.8.1/libbb/cgi.c
 +
 +	return retval;
 +} 
-Index: busybox-1.8.1/libbb/Kbuild
-===================================================================
---- busybox-1.8.1.orig/libbb/Kbuild	2007-11-10 17:04:07.547062497 +0100
-+++ busybox-1.8.1/libbb/Kbuild	2007-11-10 17:06:19.282569674 +0100
-@@ -101,6 +101,7 @@
+--- a/libbb/Kbuild
++++ b/libbb/Kbuild
+@@ -112,6 +112,7 @@
  lib-y += xreadlink.o
  
  # conditionally compiled objects:

+ 6 - 12
package/busybox/patches/520-ipkg_secure.patch

@@ -1,7 +1,5 @@
-Index: busybox-1.7.2/archival/libipkg/ipkg_conf.c
-===================================================================
---- busybox-1.7.2.orig/archival/libipkg/ipkg_conf.c	2007-10-30 15:38:45.000000000 -0500
-+++ busybox-1.7.2/archival/libipkg/ipkg_conf.c	2007-10-30 15:38:47.000000000 -0500
+--- a/archival/libipkg/ipkg_conf.c
++++ b/archival/libipkg/ipkg_conf.c
 @@ -66,6 +66,8 @@
  	  { "offline_root_pre_script_cmd", IPKG_OPT_TYPE_STRING, &conf->offline_root_pre_script_cmd },
  	  { "proxy_passwd", IPKG_OPT_TYPE_STRING, &conf->proxy_passwd },
@@ -21,10 +19,8 @@ Index: busybox-1.7.2/archival/libipkg/ipkg_conf.c
       pkg_hash_init("pkg-hash", &conf->pkg_hash, IPKG_CONF_DEFAULT_HASH_LEN);
       hash_table_init("file-hash", &conf->file_hash, IPKG_CONF_DEFAULT_HASH_LEN);
       hash_table_init("obs-file-hash", &conf->obs_file_hash, IPKG_CONF_DEFAULT_HASH_LEN);
-Index: busybox-1.7.2/archival/libipkg/ipkg_conf.h
-===================================================================
---- busybox-1.7.2.orig/archival/libipkg/ipkg_conf.h	2007-10-30 15:38:45.000000000 -0500
-+++ busybox-1.7.2/archival/libipkg/ipkg_conf.h	2007-10-30 15:38:47.000000000 -0500
+--- a/archival/libipkg/ipkg_conf.h
++++ b/archival/libipkg/ipkg_conf.h
 @@ -79,6 +79,10 @@
       char *proxy_user;
       char *proxy_passwd;
@@ -36,10 +32,8 @@ Index: busybox-1.7.2/archival/libipkg/ipkg_conf.h
       hash_table_t pkg_hash;
       hash_table_t file_hash;
       hash_table_t obs_file_hash;
-Index: busybox-1.7.2/archival/libipkg/ipkg_download.c
-===================================================================
---- busybox-1.7.2.orig/archival/libipkg/ipkg_download.c	2007-10-30 15:38:45.000000000 -0500
-+++ busybox-1.7.2/archival/libipkg/ipkg_download.c	2007-10-30 15:38:47.000000000 -0500
+--- a/archival/libipkg/ipkg_download.c
++++ b/archival/libipkg/ipkg_download.c
 @@ -69,8 +69,12 @@
      }
  

+ 2 - 4
package/busybox/patches/521-ipkg_upgrade_env.patch

@@ -1,7 +1,5 @@
-Index: busybox-1.7.2/archival/libipkg/ipkg_install.c
-===================================================================
---- busybox-1.7.2.orig/archival/libipkg/ipkg_install.c	2007-10-30 17:15:31.000000000 -0500
-+++ busybox-1.7.2/archival/libipkg/ipkg_install.c	2007-10-30 17:15:33.000000000 -0500
+--- a/archival/libipkg/ipkg_install.c
++++ b/archival/libipkg/ipkg_install.c
 @@ -136,6 +136,7 @@
  ipkg_error_t ipkg_install_by_name(ipkg_conf_t *conf, const char *pkg_name)
  {

+ 11 - 20
package/busybox/patches/523-conffiles_fix.patch

@@ -1,7 +1,5 @@
-Index: busybox-1.8.2/archival/libipkg/pkg.c
-===================================================================
---- busybox-1.8.2.orig/archival/libipkg/pkg.c	2008-01-03 17:25:55.000000000 +0100
-+++ busybox-1.8.2/archival/libipkg/pkg.c	2008-01-03 17:33:57.000000000 +0100
+--- a/archival/libipkg/pkg.c
++++ b/archival/libipkg/pkg.c
 @@ -575,25 +575,28 @@
  		    return temp;
  	       }
@@ -36,16 +34,10 @@ Index: busybox-1.8.2/archival/libipkg/pkg.c
  	  } else if (strcasecmp(field, "Conflicts") == 0) {
  	       int i;
  
-Index: busybox-1.8.2/archival/libipkg/pkg_parse.c
-===================================================================
---- busybox-1.8.2.orig/archival/libipkg/pkg_parse.c	2008-01-03 17:25:55.000000000 +0100
-+++ busybox-1.8.2/archival/libipkg/pkg_parse.c	2008-01-03 17:30:14.000000000 +0100
- -85,20 +85,17 @@
- {
-     char file_name[1048], md5sum[1048];  /* please tell me there aren't any longer that 1k */
- 
--    if(!strncmp(raw, "Conffiles:", 10))
-+    if(!strncmp(raw, "Conffiles:",10))
+--- a/archival/libipkg/pkg_parse.c
++++ b/archival/libipkg/pkg_parse.c
+@@ -88,17 +88,14 @@
+     if(!strncmp(raw, "Conffiles:", 10))
  	raw += strlen("Conffiles:");
  
 +    while(*raw && isspace(*raw)) raw++;
@@ -55,14 +47,13 @@ Index: busybox-1.8.2/archival/libipkg/pkg_parse.c
 -	while (*raw && isspace(*raw)) {
 -	    raw++;
 -	}
--	raw += strlen(file_name);
+ 	raw += strlen(file_name);
 -	while (*raw && isspace(*raw)) {
 -	    raw++;
 -	}
--	raw += strlen(md5sum);
-+        raw += strlen(file_name);
 +	while(*raw && isspace(*raw)) raw++;
-+        raw += strlen(md5sum);
-+        while(*raw && isspace(*raw)) raw++;
+ 	raw += strlen(md5sum);
++	while(*raw && isspace(*raw)) raw++;
      }
- }
+ }    
+ 

+ 10 - 18
package/busybox/patches/524-memory_usage.patch

@@ -1,7 +1,5 @@
-Index: busybox-1.8.2/archival/libipkg/pkg.c
-===================================================================
---- busybox-1.8.2.orig/archival/libipkg/pkg.c	2008-01-06 03:14:12.003658206 +0100
-+++ busybox-1.8.2/archival/libipkg/pkg.c	2008-01-06 03:24:18.187737063 +0100
+--- a/archival/libipkg/pkg.c
++++ b/archival/libipkg/pkg.c
 @@ -224,8 +224,7 @@
       if (err) { return err; }
  
@@ -12,10 +10,8 @@ Index: busybox-1.8.2/archival/libipkg/pkg.c
  
       fclose(control_file);
  
-Index: busybox-1.8.2/archival/libipkg/pkg_hash.c
-===================================================================
---- busybox-1.8.2.orig/archival/libipkg/pkg_hash.c	2008-01-06 03:14:12.231671203 +0100
-+++ busybox-1.8.2/archival/libipkg/pkg_hash.c	2008-01-06 03:28:38.218555373 +0100
+--- a/archival/libipkg/pkg_hash.c
++++ b/archival/libipkg/pkg_hash.c
 @@ -89,20 +89,20 @@
  			   pkg_src_t *src, pkg_dest_t *dest, int is_status_file)
  {
@@ -58,11 +54,9 @@ Index: busybox-1.8.2/archival/libipkg/pkg_hash.c
       return 0;
  }
  
-Index: busybox-1.8.2/archival/libipkg/pkg_parse.c
-===================================================================
---- busybox-1.8.2.orig/archival/libipkg/pkg_parse.c	2008-01-06 03:14:12.283674167 +0100
-+++ busybox-1.8.2/archival/libipkg/pkg_parse.c	2008-01-06 03:38:24.111943535 +0100
-@@ -227,6 +227,161 @@
+--- a/archival/libipkg/pkg_parse.c
++++ b/archival/libipkg/pkg_parse.c
+@@ -224,6 +224,161 @@
     Enhances, perhaps we could generalize all of these and save some
     code duplication.
  */
@@ -224,7 +218,7 @@ Index: busybox-1.8.2/archival/libipkg/pkg_parse.c
  int pkg_parse_raw(pkg_t *pkg, char ***raw, pkg_src_t *src, pkg_dest_t *dest)
  {
      int reading_conffiles, reading_description;
-@@ -345,6 +500,7 @@
+@@ -342,6 +497,7 @@
  	return EINVAL;
      }
  }
@@ -232,10 +226,8 @@ Index: busybox-1.8.2/archival/libipkg/pkg_parse.c
  
  int pkg_valorize_other_field(pkg_t *pkg, char ***raw)
  {
-Index: busybox-1.8.2/archival/libipkg/pkg_parse.h
-===================================================================
---- busybox-1.8.2.orig/archival/libipkg/pkg_parse.h	2008-01-06 03:14:12.303675307 +0100
-+++ busybox-1.8.2/archival/libipkg/pkg_parse.h	2008-01-06 03:39:03.954214018 +0100
+--- a/archival/libipkg/pkg_parse.h
++++ b/archival/libipkg/pkg_parse.h
 @@ -25,7 +25,10 @@
  char ** parseDependsString(char * raw, int * depends_count);
  int parseVersion(pkg_t *pkg, char *raw);

+ 4 - 6
package/busybox/patches/524-udhcpc_renew.patch

@@ -1,12 +1,10 @@
-Index: busybox-1.8.2/networking/udhcp/dhcpc.c
-===================================================================
---- busybox-1.8.2.orig/networking/udhcp/dhcpc.c	2008-01-03 05:00:31.506419917 +0100
-+++ busybox-1.8.2/networking/udhcp/dhcpc.c	2008-01-03 05:00:44.311149618 +0100
-@@ -65,7 +65,6 @@
+--- a/networking/udhcp/dhcpc.c
++++ b/networking/udhcp/dhcpc.c
+@@ -63,7 +63,6 @@
  		state = RENEW_REQUESTED;
  		break;
  	case RENEW_REQUESTED: /* impatient are we? fine, square 1 */
 -		udhcp_run_script(NULL, "deconfig");
  	case REQUESTING:
  	case RELEASED:
- 		change_mode(LISTEN_RAW);
+ 		change_listen_mode(LISTEN_RAW);

+ 2 - 3
package/busybox/patches/525-clean_temp.patch

@@ -1,6 +1,5 @@
-diff -urN busybox-1.8.2.old/archival/libipkg/pkg_extract.c busybox-1.8.2.dev/archival/libipkg/pkg_extract.c
---- busybox-1.8.2.old/archival/libipkg/pkg_extract.c	2008-01-23 22:18:44.000000000 +0100
-+++ busybox-1.8.2.dev/archival/libipkg/pkg_extract.c	2008-01-23 22:20:31.000000000 +0100
+--- a/archival/libipkg/pkg_extract.c
++++ b/archival/libipkg/pkg_extract.c
 @@ -85,6 +85,7 @@
  	free(archive->buffer);
  	free(archive->accept);

+ 43 - 0
package/busybox/patches/526-ipkg_fix_pkg_comparison.patch

@@ -0,0 +1,43 @@
+--- a/archival/libipkg/pkg.c
++++ b/archival/libipkg/pkg.c
+@@ -1139,8 +1139,12 @@
+      return 0;
+ }
+ 
+-int pkg_name_version_and_architecture_compare(pkg_t *a, pkg_t *b)
++int pkg_name_version_and_architecture_compare(const void *pkg_a, const void *pkg_b)
+ {
++     pkg_t * const *p1 = pkg_a;
++     pkg_t * const *p2 = pkg_b;
++     const pkg_t *a = *p1;
++     const pkg_t *b = *p2;
+      int namecmp;
+      int vercmp;
+      if (!a->name || !b->name) {
+@@ -1167,8 +1171,12 @@
+      return 0;
+ }
+ 
+-int abstract_pkg_name_compare(abstract_pkg_t *a, abstract_pkg_t *b)
++int abstract_pkg_name_compare(const void *apkg_a, const void *apkg_b)
+ {
++     abstract_pkg_t * const *ap1 = apkg_a;
++     abstract_pkg_t * const *ap2 = apkg_b;
++     const abstract_pkg_t *a = *ap1;
++     const abstract_pkg_t *b = *ap2;
+      if (!a->name || !b->name) {
+        fprintf(stderr, "abstract_pkg_name_compare: a=%p a->name=%p b=%p b->name=%p\n",
+ 	       a, a->name, b, b->name);
+--- a/archival/libipkg/pkg.h
++++ b/archival/libipkg/pkg.h
+@@ -191,8 +191,8 @@
+ char *pkg_version_str_alloc(pkg_t *pkg);
+ 
+ int pkg_compare_versions(const pkg_t *pkg, const pkg_t *ref_pkg);
+-int pkg_name_version_and_architecture_compare(pkg_t *a, pkg_t *b);
+-int abstract_pkg_name_compare(abstract_pkg_t *a, abstract_pkg_t *b);
++int pkg_name_version_and_architecture_compare(const void *pkg_a, const void *pkg_b);
++int abstract_pkg_name_compare(const void *apkg_a, const void *apkg_b);
+ 
+ char * pkg_formatted_info(pkg_t *pkg );
+ char * pkg_formatted_field(pkg_t *pkg, const char *field );

+ 9 - 0
package/busybox/patches/901-basename.patch

@@ -0,0 +1,9 @@
+--- a/coreutils/basename.c
++++ b/coreutils/basename.c
+@@ -48,5 +48,5 @@
+ 
+ 	/* puts(s) will do, but we can do without stdio this way: */
+ 	s[m++] = '\n';
+-	return full_write(STDOUT_FILENO, s, m) == (ssize_t)m;
++	return full_write(STDOUT_FILENO, s, m) != (ssize_t)m;
+ }

+ 55 - 0
package/busybox/patches/902-tar.patch

@@ -0,0 +1,55 @@
+--- a/archival/libunarchive/get_header_tar.c
++++ b/archival/libunarchive/get_header_tar.c
+@@ -261,26 +261,33 @@
+ 	case '0':
+ #if ENABLE_FEATURE_TAR_OLDGNU_COMPATIBILITY
+ 		if (last_char_is(file_header->name, '/')) {
+-			file_header->mode |= S_IFDIR;
+-		} else
++			goto set_dir;
++		}
+ #endif
+ 		file_header->mode |= S_IFREG;
+ 		break;
+ 	case '2':
+ 		file_header->mode |= S_IFLNK;
++		/* have seen tarballs with size field containing
++		 * the size of the link target's name */
++ size0:
++		file_header->size = 0;
+ 		break;
+ 	case '3':
+ 		file_header->mode |= S_IFCHR;
+-		break;
++		goto size0; /* paranoia */
+ 	case '4':
+ 		file_header->mode |= S_IFBLK;
+-		break;
++		goto size0;
+ 	case '5':
++#if ENABLE_FEATURE_TAR_OLDGNU_COMPATIBILITY
++ set_dir:
++#endif
+ 		file_header->mode |= S_IFDIR;
+-		break;
++		goto size0;
+ 	case '6':
+ 		file_header->mode |= S_IFIFO;
+-		break;
++		goto size0;
+ #if ENABLE_FEATURE_TAR_GNU_EXTENSIONS
+ 	case 'L':
+ 		/* free: paranoia: tar with several consecutive longnames */
+--- a/archival/libunarchive/seek_by_jump.c
++++ b/archival/libunarchive/seek_by_jump.c
+@@ -8,7 +8,9 @@
+ 
+ void seek_by_jump(const archive_handle_t *archive_handle, unsigned amount)
+ {
+-	if (lseek(archive_handle->src_fd, (off_t) amount, SEEK_CUR) == (off_t) -1) {
++	if (amount
++	 && lseek(archive_handle->src_fd, (off_t) amount, SEEK_CUR) == (off_t) -1
++	) {
+ 		if (errno == ESPIPE)
+ 			seek_by_read(archive_handle, amount);
+ 		else

+ 155 - 0
package/busybox/patches/903-ash.patch

@@ -0,0 +1,155 @@
+--- a/shell/ash.c
++++ b/shell/ash.c
+@@ -1569,14 +1569,14 @@
+ static char *optptr;                   /* used by nextopt */
+ 
+ /*
+- * XXX - should get rid of.  have all builtins use getopt(3).  the
+- * library getopt must have the BSD extension static variable "optreset"
+- * otherwise it can't be used within the shell safely.
++ * XXX - should get rid of. Have all builtins use getopt(3).
++ * The library getopt must have the BSD extension static variable
++ * "optreset", otherwise it can't be used within the shell safely.
+  *
+- * Standard option processing (a la getopt) for builtin routines.  The
+- * only argument that is passed to nextopt is the option string; the
+- * other arguments are unnecessary.  It return the character, or '\0' on
+- * end of input.
++ * Standard option processing (a la getopt) for builtin routines.
++ * The only argument that is passed to nextopt is the option string;
++ * the other arguments are unnecessary. It returns the character,
++ * or '\0' on end of input.
+  */
+ static int
+ nextopt(const char *optstring)
+@@ -1587,13 +1587,20 @@
+ 
+ 	p = optptr;
+ 	if (p == NULL || *p == '\0') {
++		/* We ate entire "-param", take next one */
+ 		p = *argptr;
+-		if (p == NULL || *p != '-' || *++p == '\0')
++		if (p == NULL)
++			return '\0';
++		if (*p != '-')
++			return '\0';
++		if (*++p == '\0') /* just "-" ? */
+ 			return '\0';
+ 		argptr++;
+-		if (LONE_DASH(p))        /* check for "--" */
++		if (LONE_DASH(p)) /* "--" ? */
+ 			return '\0';
++		/* p => next "-param" */
+ 	}
++	/* p => some option char in the middle of a "-param" */
+ 	c = *p++;
+ 	for (q = optstring; *q != c;) {
+ 		if (*q == '\0')
+@@ -1602,8 +1609,11 @@
+ 			q++;
+ 	}
+ 	if (*++q == ':') {
+-		if (*p == '\0' && (p = *argptr++) == NULL)
+-			ash_msg_and_raise_error("no arg for -%c option", c);
++		if (*p == '\0') {
++			p = *argptr++;
++			if (p == NULL)
++				ash_msg_and_raise_error("no arg for -%c option", c);
++		}
+ 		optionarg = p;
+ 		p = NULL;
+ 	}
+@@ -7428,8 +7438,10 @@
+ 		else if (c != 'p')
+ 			abort();
+ #endif
+-	if (verify)
++	/* Mimic bash: just "command -v" doesn't complain, it's a nop */
++	if (verify && (*argptr != NULL)) {
+ 		return describe_command(*argptr, verify - VERIFY_BRIEF);
++	}
+ 
+ 	return 0;
+ }
+@@ -7788,16 +7800,33 @@
+ static void
+ evaltree(union node *n, int flags)
+ {
++
++	struct jmploc *volatile savehandler = exception_handler;
++	struct jmploc jmploc;
+ 	int checkexit = 0;
+ 	void (*evalfn)(union node *, int);
+-	unsigned isor;
+ 	int status;
++
+ 	if (n == NULL) {
+ 		TRACE(("evaltree(NULL) called\n"));
+-		goto out;
++		goto out1;
+ 	}
+ 	TRACE(("pid %d, evaltree(%p: %d, %d) called\n",
+ 			getpid(), n, n->type, flags));
++
++	exception_handler = &jmploc;
++	{
++		int err = setjmp(jmploc.loc);
++		if (err) {
++			/* if it was a signal, check for trap handlers */
++			if (exception == EXSIG)
++				goto out;
++			/* continue on the way out */
++			exception_handler = savehandler;
++			longjmp(exception_handler->loc, err);
++		}
++	}
++
+ 	switch (n->type) {
+ 	default:
+ #if DEBUG
+@@ -7843,19 +7872,20 @@
+ 		goto calleval;
+ 	case NAND:
+ 	case NOR:
+-	case NSEMI:
++	case NSEMI: {
++
+ #if NAND + 1 != NOR
+ #error NAND + 1 != NOR
+ #endif
+ #if NOR + 1 != NSEMI
+ #error NOR + 1 != NSEMI
+ #endif
+-		isor = n->type - NAND;
++		unsigned is_or = n->type - NAND;
+ 		evaltree(
+ 			n->nbinary.ch1,
+-			(flags | ((isor >> 1) - 1)) & EV_TESTED
++			(flags | ((is_or >> 1) - 1)) & EV_TESTED
+ 		);
+-		if (!exitstatus == isor)
++		if (!exitstatus == is_or)
+ 			break;
+ 		if (!evalskip) {
+ 			n = n->nbinary.ch2;
+@@ -7866,6 +7896,7 @@
+ 			break;
+ 		}
+ 		break;
++	}
+ 	case NIF:
+ 		evaltree(n->nif.test, EV_TESTED);
+ 		if (evalskip)
+@@ -7886,8 +7917,11 @@
+ 		exitstatus = status;
+ 		break;
+ 	}
++
+  out:
+-	if ((checkexit & exitstatus))
++	exception_handler = savehandler;
++ out1:
++	if (checkexit & exitstatus)
+ 		evalskip |= SKIPEVAL;
+ 	else if (pendingsig && dotrap())
+ 		goto exexit;

+ 28 - 0
package/busybox/patches/904-build.patch

@@ -0,0 +1,28 @@
+--- a/applets/usage_compressed
++++ b/applets/usage_compressed
+@@ -14,14 +14,21 @@
+ 
+ echo 'static const char packed_usage[] ALIGN1 = {'
+ 
+-# Extra effort to avoid using "od -t x1": -t is not available
+-# in non-CONFIG_DESKTOPed busybox od
++## Breaks on big-endian systems!
++## # Extra effort to avoid using "od -t x1": -t is not available
++## # in non-CONFIG_DESKTOPed busybox od
++## 
++## "$loc/usage" | bzip2 -1 | od -v -x \
++## | $SED -e 's/^[^ ]*//' \
++## | $SED -e 's/ //g' \
++## | grep -v '^$' \
++## | $SED -e 's/\(..\)\(..\)/0x\2,0x\1,/g'
+ 
+-"$loc/usage" | bzip2 -1 | od -v -x \
++"$loc/usage" | bzip2 -1 | od -v -t x1 \
+ | $SED -e 's/^[^ ]*//' \
+ | $SED -e 's/ //g' \
+ | grep -v '^$' \
+-| $SED -e 's/\(..\)\(..\)/0x\2,0x\1,/g'
++| $SED -e 's/\(..\)/0x\1,/g'
+ 
+ echo '};'
+ echo '#define SIZEOF_usage_messages' `expr 0 + $sz`

Alguns arquivos não foram mostrados porque muitos arquivos mudaram nesse diff