aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRon Yorston <rmy@pobox.com>2012-03-22 15:48:57 +0000
committerRon Yorston <rmy@pobox.com>2012-03-22 15:48:57 +0000
commit9db164d6e39050d09f38288c6045cd2a2cbf6d63 (patch)
treeea5dc2d28d15da0de25c197ed7d059c3656af1a0
parent1118c95535ea51961437089fc3dece5ab4ea7e1b (diff)
parentd84b175cb6948eb17f847313bf912174e2f934e1 (diff)
downloadbusybox-w32-9db164d6e39050d09f38288c6045cd2a2cbf6d63.tar.gz
busybox-w32-9db164d6e39050d09f38288c6045cd2a2cbf6d63.tar.bz2
busybox-w32-9db164d6e39050d09f38288c6045cd2a2cbf6d63.zip
Merge commit 'd84b175cb6948eb17f847313bf912174e2f934e1' into merge
Conflicts: include/platform.h
-rw-r--r--INSTALL6
-rw-r--r--Makefile13
-rw-r--r--Makefile.help4
-rw-r--r--README4
-rw-r--r--archival/libarchive/get_header_tar.c16
-rw-r--r--archival/tar.c2
-rw-r--r--configs/TEST_nommu_defconfig (renamed from TEST_config_nommu)0
-rw-r--r--configs/TEST_noprintf_defconfig (renamed from TEST_config_noprintf)0
-rw-r--r--configs/TEST_rh9_defconfig (renamed from TEST_config_rh9)0
-rw-r--r--configs/android_defconfig1014
-rw-r--r--configs/cygwin_defconfig997
-rw-r--r--configs/freebsd_defconfig970
-rw-r--r--coreutils/Config.src7
-rw-r--r--coreutils/Kbuild.src1
-rw-r--r--coreutils/df.c4
-rw-r--r--coreutils/ls.c4
-rw-r--r--coreutils/md5_sha1_sum.c126
-rw-r--r--coreutils/usleep.c4
-rw-r--r--coreutils/who.c90
-rw-r--r--docs/unicode.txt2
-rw-r--r--editors/diff.c4
-rw-r--r--editors/vi.c4
-rwxr-xr-xexamples/android-build31
-rwxr-xr-xexamples/zcip.script4
-rw-r--r--findutils/find.c37
-rw-r--r--include/applets.src.h1
-rw-r--r--include/libbb.h25
-rw-r--r--include/platform.h19
-rw-r--r--init/halt.c2
-rw-r--r--init/init.c3
-rw-r--r--libbb/Config.src8
-rw-r--r--libbb/Kbuild.src9
-rw-r--r--libbb/appletlib.c2
-rw-r--r--libbb/die_if_bad_username.c42
-rw-r--r--libbb/getopt32.c6
-rw-r--r--libbb/inet_common.c3
-rw-r--r--libbb/lineedit.c165
-rw-r--r--libbb/obscure.c2
-rw-r--r--libbb/read_key.c5
-rw-r--r--miscutils/Config.src66
-rw-r--r--miscutils/adjtimex.c6
-rw-r--r--miscutils/dc.c25
-rw-r--r--miscutils/less.c135
-rw-r--r--miscutils/nandwrite.c2
-rw-r--r--miscutils/setserial.c2
-rw-r--r--networking/dnsd.c2
-rw-r--r--networking/ping.c16
-rw-r--r--networking/tcpudp.c6
-rw-r--r--networking/telnet.c19
-rw-r--r--procps/Config.src9
-rw-r--r--procps/free.c3
-rw-r--r--procps/ps.c3
-rw-r--r--procps/uptime.c63
-rwxr-xr-xscripts/bloat-o-meter4
-rw-r--r--scripts/defconfig.tig30
-rw-r--r--scripts/kconfig/Makefile2
-rw-r--r--shell/cttyhack.c81
-rw-r--r--shell/hush.c117
-rw-r--r--shell/hush_test/hush-parsing/starquoted2.right3
-rwxr-xr-xshell/hush_test/hush-parsing/starquoted2.tests6
-rw-r--r--shell/hush_test/hush-vars/var_expand_on_ifs.right9
-rwxr-xr-xshell/hush_test/hush-vars/var_expand_on_ifs.tests11
-rw-r--r--testsuite/date/date-R-works19
-rwxr-xr-xtestsuite/ls.tests3
-rwxr-xr-xtestsuite/mount.tests2
-rwxr-xr-xtestsuite/od.tests4
-rwxr-xr-xtestsuite/runtest6
-rwxr-xr-xtestsuite/tar.tests4
-rw-r--r--testsuite/tar/tar-extracts-all-subdirs2
-rw-r--r--util-linux/acpid.c19
-rw-r--r--util-linux/fdisk.c73
-rw-r--r--util-linux/hwclock.c30
-rw-r--r--util-linux/lspci.c2
-rw-r--r--util-linux/swaponoff.c7
74 files changed, 3961 insertions, 466 deletions
diff --git a/INSTALL b/INSTALL
index ec2b028fd..f93e5fb25 100644
--- a/INSTALL
+++ b/INSTALL
@@ -70,7 +70,9 @@ create a known starting point.
70Other starting configurations (mostly used for testing purposes) include 70Other starting configurations (mostly used for testing purposes) include
71"make allbareconfig" (enables all applets but disables all optional features), 71"make allbareconfig" (enables all applets but disables all optional features),
72"make allyesconfig" (enables absolutely everything including debug features), 72"make allyesconfig" (enables absolutely everything including debug features),
73and "make randconfig" (produce a random configuration). 73and "make randconfig" (produce a random configuration). The configs/ directory
74contains a number of additional configuration files ending in _defconfig which
75are useful in specific cases. "make help" will list them.
74 76
75Configuring BusyBox produces a file ".config", which can be saved for future 77Configuring BusyBox produces a file ".config", which can be saved for future
76use. Run "make oldconfig" to bring a .config file from an older version of 78use. Run "make oldconfig" to bring a .config file from an older version of
@@ -97,7 +99,7 @@ first argument to determine which applet to behave as, for example
97"./busybox cat LICENSE". (Running the busybox applet with no arguments gives 99"./busybox cat LICENSE". (Running the busybox applet with no arguments gives
98a list of all enabled applets.) The standalone shell can also call busybox 100a list of all enabled applets.) The standalone shell can also call busybox
99applets without links to busybox under other names in the filesystem. You can 101applets without links to busybox under other names in the filesystem. You can
100also configure a standaone install capability into the busybox base applet, 102also configure a standalone install capability into the busybox base applet,
101and then install such links at runtime with one of "busybox --install" (for 103and then install such links at runtime with one of "busybox --install" (for
102hardlinks) or "busybox --install -s" (for symlinks). 104hardlinks) or "busybox --install -s" (for symlinks).
103 105
diff --git a/Makefile b/Makefile
index 64f804623..7d2db1871 100644
--- a/Makefile
+++ b/Makefile
@@ -1,7 +1,7 @@
1VERSION = 1 1VERSION = 1
2PATCHLEVEL = 19 2PATCHLEVEL = 19
3SUBLEVEL = 0 3SUBLEVEL = 0
4EXTRAVERSION = .git 4EXTRAVERSION =
5NAME = Unnamed 5NAME = Unnamed
6 6
7# *DOCUMENTATION* 7# *DOCUMENTATION*
@@ -1044,7 +1044,7 @@ rpm: FORCE
1044# Brief documentation of the typical targets used 1044# Brief documentation of the typical targets used
1045# --------------------------------------------------------------------------- 1045# ---------------------------------------------------------------------------
1046 1046
1047boards := $(wildcard $(srctree)/arch/$(ARCH)/configs/*_defconfig) 1047boards := $(wildcard $(srctree)/configs/*_defconfig)
1048boards := $(notdir $(boards)) 1048boards := $(notdir $(boards))
1049 1049
1050-include $(srctree)/Makefile.help 1050-include $(srctree)/Makefile.help
@@ -1133,15 +1133,6 @@ clean: $(clean-dirs)
1133 -o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \) \ 1133 -o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \) \
1134 -type f -print | xargs rm -f 1134 -type f -print | xargs rm -f
1135 1135
1136help:
1137 @echo ' Building external modules.'
1138 @echo ' Syntax: make -C path/to/kernel/src M=$$PWD target'
1139 @echo ''
1140 @echo ' modules - default target, build the module(s)'
1141 @echo ' modules_install - install the module'
1142 @echo ' clean - remove generated files in module directory only'
1143 @echo ''
1144
1145# Dummies... 1136# Dummies...
1146PHONY += prepare scripts 1137PHONY += prepare scripts
1147prepare: ; 1138prepare: ;
diff --git a/Makefile.help b/Makefile.help
index 999d0298e..119dd6f89 100644
--- a/Makefile.help
+++ b/Makefile.help
@@ -25,6 +25,10 @@ help:
25 @echo ' You can use these commands if the commands on the host' 25 @echo ' You can use these commands if the commands on the host'
26 @echo ' is unusable. Afterwards use it like:' 26 @echo ' is unusable. Afterwards use it like:'
27 @echo ' make SED="$(objtree)/sed"' 27 @echo ' make SED="$(objtree)/sed"'
28 @$(if $(boards), \
29 $(foreach b, $(boards), \
30 printf " %-21s - Build for %s\\n" $(b) $(subst _defconfig,,$(b));) \
31 echo '')
28 @echo 32 @echo
29 @echo 'Installation:' 33 @echo 'Installation:'
30 @echo ' install - install busybox into CONFIG_PREFIX' 34 @echo ' install - install busybox into CONFIG_PREFIX'
diff --git a/README b/README
index 0b2b633f5..9b1774a7f 100644
--- a/README
+++ b/README
@@ -45,7 +45,7 @@ Using busybox:
45 run (I.E. "./busybox ls -l /proc"). 45 run (I.E. "./busybox ls -l /proc").
46 46
47 The "standalone shell" mode is an easy way to try out busybox; this is a 47 The "standalone shell" mode is an easy way to try out busybox; this is a
48 command shell that calls the builtin applets without needing them to be 48 command shell that calls the built-in applets without needing them to be
49 installed in the path. (Note that this requires /proc to be mounted, if 49 installed in the path. (Note that this requires /proc to be mounted, if
50 testing from a boot floppy or in a chroot environment.) 50 testing from a boot floppy or in a chroot environment.)
51 51
@@ -170,7 +170,7 @@ Portability:
170 MacOS X, Solaris, Cygwin, or the BSD Fork Du Jour). This generally involves 170 MacOS X, Solaris, Cygwin, or the BSD Fork Du Jour). This generally involves
171 a different kernel and a different C library at the same time. While it 171 a different kernel and a different C library at the same time. While it
172 should be possible to port the majority of the code to work in one of 172 should be possible to port the majority of the code to work in one of
173 these environments, don't be suprised if it doesn't work out of the box. If 173 these environments, don't be surprised if it doesn't work out of the box. If
174 you're into that sort of thing, start small (selecting just a few applets) 174 you're into that sort of thing, start small (selecting just a few applets)
175 and work your way up. 175 and work your way up.
176 176
diff --git a/archival/libarchive/get_header_tar.c b/archival/libarchive/get_header_tar.c
index f73cd338e..79caff55a 100644
--- a/archival/libarchive/get_header_tar.c
+++ b/archival/libarchive/get_header_tar.c
@@ -348,10 +348,20 @@ char FAST_FUNC get_header_tar(archive_handle_t *archive_handle)
348 /* Set bits 12-15 of the files mode */ 348 /* Set bits 12-15 of the files mode */
349 /* (typeflag was not trashed because chksum does not use getOctal) */ 349 /* (typeflag was not trashed because chksum does not use getOctal) */
350 switch (tar.typeflag) { 350 switch (tar.typeflag) {
351 /* busybox identifies hard links as being regular files with 0 size and a link name */ 351 case '1': /* hardlink */
352 case '1': 352 /* we mark hardlinks as regular files with zero size and a link name */
353 file_header->mode |= S_IFREG; 353 file_header->mode |= S_IFREG;
354 break; 354 /* on size of link fields from star(4)
355 * ... For tar archives written by pre POSIX.1-1988
356 * implementations, the size field usually contains the size of
357 * the file and needs to be ignored as no data may follow this
358 * header type. For POSIX.1- 1988 compliant archives, the size
359 * field needs to be 0. For POSIX.1-2001 compliant archives,
360 * the size field may be non zero, indicating that file data is
361 * included in the archive.
362 * i.e; always assume this is zero for safety.
363 */
364 goto size0;
355 case '7': 365 case '7':
356 /* case 0: */ 366 /* case 0: */
357 case '0': 367 case '0':
diff --git a/archival/tar.c b/archival/tar.c
index 612b2119b..e7963b0b4 100644
--- a/archival/tar.c
+++ b/archival/tar.c
@@ -926,7 +926,7 @@ int tar_main(int argc UNUSED_PARAM, char **argv)
926 /* Prepend '-' to the first argument if required */ 926 /* Prepend '-' to the first argument if required */
927 opt_complementary = "--:" // first arg is options 927 opt_complementary = "--:" // first arg is options
928 "tt:vv:" // count -t,-v 928 "tt:vv:" // count -t,-v
929 "X::T::" // cumulative lists 929 IF_FEATURE_TAR_FROM("X::T::") // cumulative lists
930#if ENABLE_FEATURE_TAR_LONG_OPTIONS && ENABLE_FEATURE_TAR_FROM 930#if ENABLE_FEATURE_TAR_LONG_OPTIONS && ENABLE_FEATURE_TAR_FROM
931 "\xff::" // cumulative lists for --exclude 931 "\xff::" // cumulative lists for --exclude
932#endif 932#endif
diff --git a/TEST_config_nommu b/configs/TEST_nommu_defconfig
index 905f65296..905f65296 100644
--- a/TEST_config_nommu
+++ b/configs/TEST_nommu_defconfig
diff --git a/TEST_config_noprintf b/configs/TEST_noprintf_defconfig
index b72e12856..b72e12856 100644
--- a/TEST_config_noprintf
+++ b/configs/TEST_noprintf_defconfig
diff --git a/TEST_config_rh9 b/configs/TEST_rh9_defconfig
index 23094e391..23094e391 100644
--- a/TEST_config_rh9
+++ b/configs/TEST_rh9_defconfig
diff --git a/configs/android_defconfig b/configs/android_defconfig
new file mode 100644
index 000000000..7e5232a84
--- /dev/null
+++ b/configs/android_defconfig
@@ -0,0 +1,1014 @@
1#
2# Automatically generated make config: don't edit
3# Busybox version: 1.19.0.git
4# Wed Jun 29 12:01:57 2011
5#
6CONFIG_HAVE_DOT_CONFIG=y
7
8#
9# Busybox Settings
10#
11
12#
13# General Configuration
14#
15# CONFIG_DESKTOP is not set
16# CONFIG_EXTRA_COMPAT is not set
17# CONFIG_INCLUDE_SUSv2 is not set
18# CONFIG_USE_PORTABLE_CODE is not set
19CONFIG_PLATFORM_LINUX=y
20CONFIG_FEATURE_BUFFERS_USE_MALLOC=y
21# CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set
22# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set
23# CONFIG_SHOW_USAGE is not set
24# CONFIG_FEATURE_VERBOSE_USAGE is not set
25# CONFIG_FEATURE_COMPRESS_USAGE is not set
26# CONFIG_FEATURE_INSTALLER is not set
27# CONFIG_INSTALL_NO_USR is not set
28# CONFIG_LOCALE_SUPPORT is not set
29# CONFIG_UNICODE_SUPPORT is not set
30# CONFIG_UNICODE_USING_LOCALE is not set
31# CONFIG_FEATURE_CHECK_UNICODE_IN_ENV is not set
32CONFIG_SUBST_WCHAR=0
33CONFIG_LAST_SUPPORTED_WCHAR=0
34# CONFIG_UNICODE_COMBINING_WCHARS is not set
35# CONFIG_UNICODE_WIDE_WCHARS is not set
36# CONFIG_UNICODE_BIDI_SUPPORT is not set
37# CONFIG_UNICODE_NEUTRAL_TABLE is not set
38# CONFIG_UNICODE_PRESERVE_BROKEN is not set
39# CONFIG_LONG_OPTS is not set
40# CONFIG_FEATURE_DEVPTS is not set
41# CONFIG_FEATURE_CLEAN_UP is not set
42# CONFIG_FEATURE_UTMP is not set
43# CONFIG_FEATURE_WTMP is not set
44# CONFIG_FEATURE_PIDFILE is not set
45# CONFIG_FEATURE_SUID is not set
46# CONFIG_FEATURE_SUID_CONFIG is not set
47# CONFIG_FEATURE_SUID_CONFIG_QUIET is not set
48# CONFIG_SELINUX is not set
49# CONFIG_FEATURE_PREFER_APPLETS is not set
50CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe"
51CONFIG_FEATURE_SYSLOG=y
52# CONFIG_FEATURE_HAVE_RPC is not set
53
54#
55# Build Options
56#
57# CONFIG_STATIC is not set
58# CONFIG_PIE is not set
59# CONFIG_NOMMU is not set
60# CONFIG_BUILD_LIBBUSYBOX is not set
61# CONFIG_FEATURE_INDIVIDUAL is not set
62# CONFIG_FEATURE_SHARED_BUSYBOX is not set
63# CONFIG_LFS is not set
64CONFIG_CROSS_COMPILER_PREFIX="arm-eabi-"
65#
66# Removed:
67# warning flags:
68# -Wno-multichar -W -Wall -Wno-unused -Winit-self -Wpointer-arith
69# -Werror=return-type -Werror=non-virtual-dtor -Werror=address
70# -Werror=sequence-point -Wstrict-aliasing=2 -Wno-undef -Wno-shadow
71# bbox already adds these:
72# -ffunction-sections -fomit-frame-pointer
73# should be not needed, or even increases code size:
74# -finline-functions -fno-inline-functions-called-once -finline-limit=64
75# -fstack-protector -fno-strict-aliasing -fno-exceptions -funwind-tables
76# -fmessage-length=0 (only affects error message format)
77# todo: do we need these? -
78# -fno-short-enums
79# -fgcse-after-reload
80# -frerun-cse-after-loop
81# -frename-registers
82CONFIG_EXTRA_CFLAGS="-I$A/system/core/include -I$A/bionic/libc/arch-arm/include -I$A/bionic/libc/include -I$A/bionic/libc/kernel/common -I$A/bionic/libc/kernel/arch-arm -I$A/bionic/libm/include -I$A/bionic/libm/include/arch/arm -include $A/system/core/include/arch/linux-arm/AndroidConfig.h -I$A/system/core/include/arch/linux-arm/ -DANDROID -DSK_RELEASE -nostdlib -march=armv7-a -msoft-float -mfloat-abi=softfp -mfpu=neon -mthumb -mthumb-interwork -fpic -fno-short-enums -fgcse-after-reload -frerun-cse-after-loop -frename-registers"
83
84#
85# Debugging Options
86#
87# CONFIG_DEBUG is not set
88# CONFIG_DEBUG_PESSIMIZE is not set
89# CONFIG_WERROR is not set
90CONFIG_NO_DEBUG_LIB=y
91# CONFIG_DMALLOC is not set
92# CONFIG_EFENCE is not set
93
94#
95# Installation Options ("make install" behavior)
96#
97CONFIG_INSTALL_APPLET_SYMLINKS=y
98# CONFIG_INSTALL_APPLET_HARDLINKS is not set
99# CONFIG_INSTALL_APPLET_SCRIPT_WRAPPERS is not set
100# CONFIG_INSTALL_APPLET_DONT is not set
101# CONFIG_INSTALL_SH_APPLET_SYMLINK is not set
102# CONFIG_INSTALL_SH_APPLET_HARDLINK is not set
103# CONFIG_INSTALL_SH_APPLET_SCRIPT_WRAPPER is not set
104CONFIG_PREFIX="./_install"
105
106#
107# Busybox Library Tuning
108#
109# CONFIG_FEATURE_SYSTEMD is not set
110# CONFIG_FEATURE_RTMINMAX is not set
111CONFIG_PASSWORD_MINLEN=6
112CONFIG_MD5_SIZE_VS_SPEED=2
113# CONFIG_FEATURE_FAST_TOP is not set
114# CONFIG_FEATURE_ETC_NETWORKS is not set
115CONFIG_FEATURE_USE_TERMIOS=y
116# CONFIG_FEATURE_EDITING is not set
117CONFIG_FEATURE_EDITING_MAX_LEN=0
118# CONFIG_FEATURE_EDITING_VI is not set
119CONFIG_FEATURE_EDITING_HISTORY=0
120# CONFIG_FEATURE_EDITING_SAVEHISTORY is not set
121# CONFIG_FEATURE_TAB_COMPLETION is not set
122# CONFIG_FEATURE_USERNAME_COMPLETION is not set
123# CONFIG_FEATURE_EDITING_FANCY_PROMPT is not set
124# CONFIG_FEATURE_EDITING_ASK_TERMINAL is not set
125# CONFIG_FEATURE_NON_POSIX_CP is not set
126# CONFIG_FEATURE_VERBOSE_CP_MESSAGE is not set
127CONFIG_FEATURE_COPYBUF_KB=4
128# CONFIG_FEATURE_SKIP_ROOTFS is not set
129# CONFIG_MONOTONIC_SYSCALL is not set
130# CONFIG_IOCTL_HEX2STR_ERROR is not set
131# CONFIG_FEATURE_HWIB is not set
132
133#
134# Applets
135#
136
137#
138# Archival Utilities
139#
140CONFIG_FEATURE_SEAMLESS_XZ=y
141CONFIG_FEATURE_SEAMLESS_LZMA=y
142CONFIG_FEATURE_SEAMLESS_BZ2=y
143CONFIG_FEATURE_SEAMLESS_GZ=y
144CONFIG_FEATURE_SEAMLESS_Z=y
145CONFIG_AR=y
146CONFIG_FEATURE_AR_LONG_FILENAMES=y
147CONFIG_FEATURE_AR_CREATE=y
148CONFIG_BUNZIP2=y
149CONFIG_BZIP2=y
150CONFIG_CPIO=y
151CONFIG_FEATURE_CPIO_O=y
152CONFIG_FEATURE_CPIO_P=y
153CONFIG_DPKG=y
154CONFIG_DPKG_DEB=y
155# CONFIG_FEATURE_DPKG_DEB_EXTRACT_ONLY is not set
156CONFIG_GUNZIP=y
157CONFIG_GZIP=y
158# CONFIG_FEATURE_GZIP_LONG_OPTIONS is not set
159CONFIG_LZOP=y
160CONFIG_LZOP_COMPR_HIGH=y
161CONFIG_RPM2CPIO=y
162CONFIG_RPM=y
163CONFIG_TAR=y
164CONFIG_FEATURE_TAR_CREATE=y
165CONFIG_FEATURE_TAR_AUTODETECT=y
166CONFIG_FEATURE_TAR_FROM=y
167CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY=y
168CONFIG_FEATURE_TAR_OLDSUN_COMPATIBILITY=y
169CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y
170# CONFIG_FEATURE_TAR_LONG_OPTIONS is not set
171# CONFIG_FEATURE_TAR_TO_COMMAND is not set
172CONFIG_FEATURE_TAR_UNAME_GNAME=y
173CONFIG_FEATURE_TAR_NOPRESERVE_TIME=y
174# CONFIG_FEATURE_TAR_SELINUX is not set
175CONFIG_UNCOMPRESS=y
176CONFIG_UNLZMA=y
177CONFIG_FEATURE_LZMA_FAST=y
178CONFIG_LZMA=y
179CONFIG_UNXZ=y
180CONFIG_XZ=y
181CONFIG_UNZIP=y
182
183#
184# Coreutils
185#
186CONFIG_BASENAME=y
187CONFIG_CAT=y
188# CONFIG_DATE is not set
189# CONFIG_FEATURE_DATE_ISOFMT is not set
190# CONFIG_FEATURE_DATE_NANO is not set
191# CONFIG_FEATURE_DATE_COMPAT is not set
192# CONFIG_ID is not set
193# CONFIG_GROUPS is not set
194CONFIG_TEST=y
195CONFIG_FEATURE_TEST_64=y
196CONFIG_TOUCH=y
197CONFIG_TR=y
198CONFIG_FEATURE_TR_CLASSES=y
199CONFIG_FEATURE_TR_EQUIV=y
200CONFIG_BASE64=y
201CONFIG_CAL=y
202CONFIG_CATV=y
203CONFIG_CHGRP=y
204CONFIG_CHMOD=y
205CONFIG_CHOWN=y
206# CONFIG_FEATURE_CHOWN_LONG_OPTIONS is not set
207CONFIG_CHROOT=y
208CONFIG_CKSUM=y
209CONFIG_COMM=y
210CONFIG_CP=y
211# CONFIG_FEATURE_CP_LONG_OPTIONS is not set
212CONFIG_CUT=y
213CONFIG_DD=y
214CONFIG_FEATURE_DD_SIGNAL_HANDLING=y
215CONFIG_FEATURE_DD_THIRD_STATUS_LINE=y
216CONFIG_FEATURE_DD_IBS_OBS=y
217# CONFIG_DF is not set
218# CONFIG_FEATURE_DF_FANCY is not set
219CONFIG_DIRNAME=y
220CONFIG_DOS2UNIX=y
221CONFIG_UNIX2DOS=y
222CONFIG_DU=y
223CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K=y
224CONFIG_ECHO=y
225CONFIG_FEATURE_FANCY_ECHO=y
226# CONFIG_ENV is not set
227# CONFIG_FEATURE_ENV_LONG_OPTIONS is not set
228CONFIG_EXPAND=y
229# CONFIG_FEATURE_EXPAND_LONG_OPTIONS is not set
230# CONFIG_EXPR is not set
231# CONFIG_EXPR_MATH_SUPPORT_64 is not set
232CONFIG_FALSE=y
233CONFIG_FOLD=y
234# CONFIG_FSYNC is not set
235CONFIG_HEAD=y
236CONFIG_FEATURE_FANCY_HEAD=y
237# CONFIG_HOSTID is not set
238CONFIG_INSTALL=y
239# CONFIG_FEATURE_INSTALL_LONG_OPTIONS is not set
240CONFIG_LN=y
241# CONFIG_LOGNAME is not set
242CONFIG_LS=y
243CONFIG_FEATURE_LS_FILETYPES=y
244CONFIG_FEATURE_LS_FOLLOWLINKS=y
245CONFIG_FEATURE_LS_RECURSIVE=y
246CONFIG_FEATURE_LS_SORTFILES=y
247CONFIG_FEATURE_LS_TIMESTAMPS=y
248CONFIG_FEATURE_LS_USERNAME=y
249# CONFIG_FEATURE_LS_COLOR is not set
250# CONFIG_FEATURE_LS_COLOR_IS_DEFAULT is not set
251CONFIG_MD5SUM=y
252CONFIG_MKDIR=y
253# CONFIG_FEATURE_MKDIR_LONG_OPTIONS is not set
254CONFIG_MKFIFO=y
255CONFIG_MKNOD=y
256CONFIG_MV=y
257# CONFIG_FEATURE_MV_LONG_OPTIONS is not set
258CONFIG_NICE=y
259CONFIG_NOHUP=y
260CONFIG_OD=y
261CONFIG_PRINTENV=y
262CONFIG_PRINTF=y
263CONFIG_PWD=y
264CONFIG_READLINK=y
265CONFIG_FEATURE_READLINK_FOLLOW=y
266CONFIG_REALPATH=y
267CONFIG_RM=y
268CONFIG_RMDIR=y
269# CONFIG_FEATURE_RMDIR_LONG_OPTIONS is not set
270CONFIG_SEQ=y
271CONFIG_SHA1SUM=y
272CONFIG_SHA256SUM=y
273CONFIG_SHA512SUM=y
274CONFIG_SLEEP=y
275CONFIG_FEATURE_FANCY_SLEEP=y
276CONFIG_FEATURE_FLOAT_SLEEP=y
277CONFIG_SORT=y
278CONFIG_FEATURE_SORT_BIG=y
279CONFIG_SPLIT=y
280CONFIG_FEATURE_SPLIT_FANCY=y
281# CONFIG_STAT is not set
282# CONFIG_FEATURE_STAT_FORMAT is not set
283CONFIG_STTY=y
284CONFIG_SUM=y
285CONFIG_SYNC=y
286CONFIG_TAC=y
287CONFIG_TAIL=y
288CONFIG_FEATURE_FANCY_TAIL=y
289CONFIG_TEE=y
290CONFIG_FEATURE_TEE_USE_BLOCK_IO=y
291CONFIG_TRUE=y
292# CONFIG_TTY is not set
293CONFIG_UNAME=y
294CONFIG_UNEXPAND=y
295# CONFIG_FEATURE_UNEXPAND_LONG_OPTIONS is not set
296CONFIG_UNIQ=y
297# CONFIG_USLEEP is not set
298CONFIG_UUDECODE=y
299CONFIG_UUENCODE=y
300CONFIG_WC=y
301CONFIG_FEATURE_WC_LARGE=y
302# CONFIG_WHO is not set
303CONFIG_WHOAMI=y
304CONFIG_YES=y
305
306#
307# Common options for cp and mv
308#
309CONFIG_FEATURE_PRESERVE_HARDLINKS=y
310
311#
312# Common options for ls, more and telnet
313#
314CONFIG_FEATURE_AUTOWIDTH=y
315
316#
317# Common options for df, du, ls
318#
319CONFIG_FEATURE_HUMAN_READABLE=y
320
321#
322# Common options for md5sum, sha1sum, sha256sum, sha512sum
323#
324CONFIG_FEATURE_MD5_SHA1_SUM_CHECK=y
325
326#
327# Console Utilities
328#
329CONFIG_CHVT=y
330CONFIG_FGCONSOLE=y
331CONFIG_CLEAR=y
332CONFIG_DEALLOCVT=y
333CONFIG_DUMPKMAP=y
334# CONFIG_KBD_MODE is not set
335# CONFIG_LOADFONT is not set
336CONFIG_LOADKMAP=y
337CONFIG_OPENVT=y
338CONFIG_RESET=y
339CONFIG_RESIZE=y
340CONFIG_FEATURE_RESIZE_PRINT=y
341CONFIG_SETCONSOLE=y
342# CONFIG_FEATURE_SETCONSOLE_LONG_OPTIONS is not set
343# CONFIG_SETFONT is not set
344# CONFIG_FEATURE_SETFONT_TEXTUAL_MAP is not set
345CONFIG_DEFAULT_SETFONT_DIR=""
346CONFIG_SETKEYCODES=y
347CONFIG_SETLOGCONS=y
348CONFIG_SHOWKEY=y
349# CONFIG_FEATURE_LOADFONT_PSF2 is not set
350# CONFIG_FEATURE_LOADFONT_RAW is not set
351
352#
353# Debian Utilities
354#
355CONFIG_MKTEMP=y
356CONFIG_PIPE_PROGRESS=y
357CONFIG_RUN_PARTS=y
358# CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS is not set
359CONFIG_FEATURE_RUN_PARTS_FANCY=y
360CONFIG_START_STOP_DAEMON=y
361CONFIG_FEATURE_START_STOP_DAEMON_FANCY=y
362# CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS is not set
363CONFIG_WHICH=y
364
365#
366# Editors
367#
368CONFIG_PATCH=y
369# CONFIG_VI is not set
370CONFIG_FEATURE_VI_MAX_LEN=0
371# CONFIG_FEATURE_VI_8BIT is not set
372# CONFIG_FEATURE_VI_COLON is not set
373# CONFIG_FEATURE_VI_YANKMARK is not set
374# CONFIG_FEATURE_VI_SEARCH is not set
375# CONFIG_FEATURE_VI_REGEX_SEARCH is not set
376# CONFIG_FEATURE_VI_USE_SIGNALS is not set
377# CONFIG_FEATURE_VI_DOT_CMD is not set
378# CONFIG_FEATURE_VI_READONLY is not set
379# CONFIG_FEATURE_VI_SETOPTS is not set
380# CONFIG_FEATURE_VI_SET is not set
381# CONFIG_FEATURE_VI_WIN_RESIZE is not set
382# CONFIG_FEATURE_VI_ASK_TERMINAL is not set
383# CONFIG_FEATURE_VI_OPTIMIZE_CURSOR is not set
384# CONFIG_AWK is not set
385# CONFIG_FEATURE_AWK_LIBM is not set
386CONFIG_CMP=y
387CONFIG_DIFF=y
388# CONFIG_FEATURE_DIFF_LONG_OPTIONS is not set
389CONFIG_FEATURE_DIFF_DIR=y
390# CONFIG_ED is not set
391# CONFIG_SED is not set
392# CONFIG_FEATURE_ALLOW_EXEC is not set
393
394#
395# Finding Utilities
396#
397# CONFIG_FIND is not set
398# CONFIG_FEATURE_FIND_PRINT0 is not set
399# CONFIG_FEATURE_FIND_MTIME is not set
400# CONFIG_FEATURE_FIND_MMIN is not set
401# CONFIG_FEATURE_FIND_PERM is not set
402# CONFIG_FEATURE_FIND_TYPE is not set
403# CONFIG_FEATURE_FIND_XDEV is not set
404# CONFIG_FEATURE_FIND_MAXDEPTH is not set
405# CONFIG_FEATURE_FIND_NEWER is not set
406# CONFIG_FEATURE_FIND_INUM is not set
407# CONFIG_FEATURE_FIND_EXEC is not set
408# CONFIG_FEATURE_FIND_USER is not set
409# CONFIG_FEATURE_FIND_GROUP is not set
410# CONFIG_FEATURE_FIND_NOT is not set
411# CONFIG_FEATURE_FIND_DEPTH is not set
412# CONFIG_FEATURE_FIND_PAREN is not set
413# CONFIG_FEATURE_FIND_SIZE is not set
414# CONFIG_FEATURE_FIND_PRUNE is not set
415# CONFIG_FEATURE_FIND_DELETE is not set
416# CONFIG_FEATURE_FIND_PATH is not set
417# CONFIG_FEATURE_FIND_REGEX is not set
418# CONFIG_FEATURE_FIND_CONTEXT is not set
419# CONFIG_FEATURE_FIND_LINKS is not set
420# CONFIG_GREP is not set
421# CONFIG_FEATURE_GREP_EGREP_ALIAS is not set
422# CONFIG_FEATURE_GREP_FGREP_ALIAS is not set
423# CONFIG_FEATURE_GREP_CONTEXT is not set
424CONFIG_XARGS=y
425CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION=y
426CONFIG_FEATURE_XARGS_SUPPORT_QUOTES=y
427CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT=y
428CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM=y
429
430#
431# Init Utilities
432#
433# CONFIG_BOOTCHARTD is not set
434# CONFIG_FEATURE_BOOTCHARTD_BLOATED_HEADER is not set
435# CONFIG_FEATURE_BOOTCHARTD_CONFIG_FILE is not set
436CONFIG_HALT=y
437# CONFIG_FEATURE_CALL_TELINIT is not set
438CONFIG_TELINIT_PATH=""
439CONFIG_INIT=y
440CONFIG_FEATURE_USE_INITTAB=y
441# CONFIG_FEATURE_KILL_REMOVED is not set
442CONFIG_FEATURE_KILL_DELAY=0
443CONFIG_FEATURE_INIT_SCTTY=y
444CONFIG_FEATURE_INIT_SYSLOG=y
445CONFIG_FEATURE_EXTRA_QUIET=y
446CONFIG_FEATURE_INIT_COREDUMPS=y
447CONFIG_FEATURE_INITRD=y
448CONFIG_INIT_TERMINAL_TYPE="linux"
449CONFIG_MESG=y
450CONFIG_FEATURE_MESG_ENABLE_ONLY_GROUP=y
451
452#
453# Login/Password Management Utilities
454#
455# CONFIG_ADD_SHELL is not set
456# CONFIG_REMOVE_SHELL is not set
457# CONFIG_FEATURE_SHADOWPASSWDS is not set
458# CONFIG_USE_BB_PWD_GRP is not set
459# CONFIG_USE_BB_SHADOW is not set
460# CONFIG_USE_BB_CRYPT is not set
461# CONFIG_USE_BB_CRYPT_SHA is not set
462# CONFIG_ADDUSER is not set
463# CONFIG_FEATURE_ADDUSER_LONG_OPTIONS is not set
464# CONFIG_FEATURE_CHECK_NAMES is not set
465CONFIG_FIRST_SYSTEM_ID=0
466CONFIG_LAST_SYSTEM_ID=0
467# CONFIG_ADDGROUP is not set
468# CONFIG_FEATURE_ADDGROUP_LONG_OPTIONS is not set
469# CONFIG_FEATURE_ADDUSER_TO_GROUP is not set
470# CONFIG_DELUSER is not set
471# CONFIG_DELGROUP is not set
472# CONFIG_FEATURE_DEL_USER_FROM_GROUP is not set
473# CONFIG_GETTY is not set
474# CONFIG_LOGIN is not set
475# CONFIG_PAM is not set
476# CONFIG_LOGIN_SCRIPTS is not set
477# CONFIG_FEATURE_NOLOGIN is not set
478# CONFIG_FEATURE_SECURETTY is not set
479# CONFIG_PASSWD is not set
480# CONFIG_FEATURE_PASSWD_WEAK_CHECK is not set
481# CONFIG_CRYPTPW is not set
482# CONFIG_CHPASSWD is not set
483# CONFIG_SU is not set
484# CONFIG_FEATURE_SU_SYSLOG is not set
485# CONFIG_FEATURE_SU_CHECKS_SHELLS is not set
486# CONFIG_SULOGIN is not set
487# CONFIG_VLOCK is not set
488
489#
490# Linux Ext2 FS Progs
491#
492CONFIG_CHATTR=y
493# CONFIG_FSCK is not set
494CONFIG_LSATTR=y
495CONFIG_TUNE2FS=y
496
497#
498# Linux Module Utilities
499#
500CONFIG_MODINFO=y
501CONFIG_MODPROBE_SMALL=y
502CONFIG_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE=y
503CONFIG_FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED=y
504# CONFIG_INSMOD is not set
505# CONFIG_RMMOD is not set
506# CONFIG_LSMOD is not set
507# CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT is not set
508# CONFIG_MODPROBE is not set
509# CONFIG_FEATURE_MODPROBE_BLACKLIST is not set
510# CONFIG_DEPMOD is not set
511
512#
513# Options common to multiple modutils
514#
515# CONFIG_FEATURE_2_4_MODULES is not set
516# CONFIG_FEATURE_INSMOD_TRY_MMAP is not set
517# CONFIG_FEATURE_INSMOD_VERSION_CHECKING is not set
518# CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS is not set
519# CONFIG_FEATURE_INSMOD_LOADINKMEM is not set
520# CONFIG_FEATURE_INSMOD_LOAD_MAP is not set
521# CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL is not set
522# CONFIG_FEATURE_CHECK_TAINTED_MODULE is not set
523# CONFIG_FEATURE_MODUTILS_ALIAS is not set
524# CONFIG_FEATURE_MODUTILS_SYMBOLS is not set
525CONFIG_DEFAULT_MODULES_DIR="/lib/modules"
526CONFIG_DEFAULT_DEPMOD_FILE="modules.dep"
527
528#
529# Linux System Utilities
530#
531CONFIG_BLOCKDEV=y
532CONFIG_REV=y
533# CONFIG_ACPID is not set
534# CONFIG_FEATURE_ACPID_COMPAT is not set
535CONFIG_BLKID=y
536# CONFIG_FEATURE_BLKID_TYPE is not set
537CONFIG_DMESG=y
538CONFIG_FEATURE_DMESG_PRETTY=y
539CONFIG_FBSET=y
540CONFIG_FEATURE_FBSET_FANCY=y
541CONFIG_FEATURE_FBSET_READMODE=y
542CONFIG_FDFLUSH=y
543CONFIG_FDFORMAT=y
544CONFIG_FDISK=y
545CONFIG_FDISK_SUPPORT_LARGE_DISKS=y
546CONFIG_FEATURE_FDISK_WRITABLE=y
547# CONFIG_FEATURE_AIX_LABEL is not set
548# CONFIG_FEATURE_SGI_LABEL is not set
549# CONFIG_FEATURE_SUN_LABEL is not set
550# CONFIG_FEATURE_OSF_LABEL is not set
551# CONFIG_FEATURE_GPT_LABEL is not set
552CONFIG_FEATURE_FDISK_ADVANCED=y
553CONFIG_FINDFS=y
554CONFIG_FLOCK=y
555CONFIG_FREERAMDISK=y
556# CONFIG_FSCK_MINIX is not set
557# CONFIG_MKFS_EXT2 is not set
558# CONFIG_MKFS_MINIX is not set
559# CONFIG_FEATURE_MINIX2 is not set
560# CONFIG_MKFS_REISER is not set
561# CONFIG_MKFS_VFAT is not set
562CONFIG_GETOPT=y
563CONFIG_FEATURE_GETOPT_LONG=y
564CONFIG_HEXDUMP=y
565CONFIG_FEATURE_HEXDUMP_REVERSE=y
566CONFIG_HD=y
567# CONFIG_HWCLOCK is not set
568# CONFIG_FEATURE_HWCLOCK_LONG_OPTIONS is not set
569# CONFIG_FEATURE_HWCLOCK_ADJTIME_FHS is not set
570# CONFIG_IPCRM is not set
571# CONFIG_IPCS is not set
572CONFIG_LOSETUP=y
573CONFIG_LSPCI=y
574CONFIG_LSUSB=y
575# CONFIG_MDEV is not set
576# CONFIG_FEATURE_MDEV_CONF is not set
577# CONFIG_FEATURE_MDEV_RENAME is not set
578# CONFIG_FEATURE_MDEV_RENAME_REGEXP is not set
579# CONFIG_FEATURE_MDEV_EXEC is not set
580# CONFIG_FEATURE_MDEV_LOAD_FIRMWARE is not set
581CONFIG_MKSWAP=y
582CONFIG_FEATURE_MKSWAP_UUID=y
583CONFIG_MORE=y
584# CONFIG_MOUNT is not set
585# CONFIG_FEATURE_MOUNT_FAKE is not set
586# CONFIG_FEATURE_MOUNT_VERBOSE is not set
587# CONFIG_FEATURE_MOUNT_HELPERS is not set
588# CONFIG_FEATURE_MOUNT_LABEL is not set
589# CONFIG_FEATURE_MOUNT_NFS is not set
590# CONFIG_FEATURE_MOUNT_CIFS is not set
591# CONFIG_FEATURE_MOUNT_FLAGS is not set
592# CONFIG_FEATURE_MOUNT_FSTAB is not set
593# CONFIG_PIVOT_ROOT is not set
594# CONFIG_RDATE is not set
595CONFIG_RDEV=y
596CONFIG_READPROFILE=y
597CONFIG_RTCWAKE=y
598CONFIG_SCRIPT=y
599CONFIG_SCRIPTREPLAY=y
600# CONFIG_SETARCH is not set
601# CONFIG_SWAPONOFF is not set
602# CONFIG_FEATURE_SWAPON_PRI is not set
603# CONFIG_SWITCH_ROOT is not set
604# CONFIG_UMOUNT is not set
605# CONFIG_FEATURE_UMOUNT_ALL is not set
606# CONFIG_FEATURE_MOUNT_LOOP is not set
607# CONFIG_FEATURE_MOUNT_LOOP_CREATE is not set
608# CONFIG_FEATURE_MTAB_SUPPORT is not set
609CONFIG_VOLUMEID=y
610
611#
612# Filesystem/Volume identification
613#
614CONFIG_FEATURE_VOLUMEID_EXT=y
615CONFIG_FEATURE_VOLUMEID_BTRFS=y
616CONFIG_FEATURE_VOLUMEID_REISERFS=y
617CONFIG_FEATURE_VOLUMEID_FAT=y
618CONFIG_FEATURE_VOLUMEID_HFS=y
619CONFIG_FEATURE_VOLUMEID_JFS=y
620CONFIG_FEATURE_VOLUMEID_XFS=y
621CONFIG_FEATURE_VOLUMEID_NTFS=y
622CONFIG_FEATURE_VOLUMEID_ISO9660=y
623CONFIG_FEATURE_VOLUMEID_UDF=y
624CONFIG_FEATURE_VOLUMEID_LUKS=y
625CONFIG_FEATURE_VOLUMEID_LINUXSWAP=y
626CONFIG_FEATURE_VOLUMEID_CRAMFS=y
627CONFIG_FEATURE_VOLUMEID_ROMFS=y
628CONFIG_FEATURE_VOLUMEID_SYSV=y
629CONFIG_FEATURE_VOLUMEID_OCFS2=y
630CONFIG_FEATURE_VOLUMEID_LINUXRAID=y
631
632#
633# Miscellaneous Utilities
634#
635# CONFIG_CONSPY is not set
636# CONFIG_NANDWRITE is not set
637CONFIG_NANDDUMP=y
638CONFIG_SETSERIAL=y
639# CONFIG_UBIATTACH is not set
640# CONFIG_UBIDETACH is not set
641# CONFIG_UBIMKVOL is not set
642# CONFIG_UBIRMVOL is not set
643# CONFIG_UBIRSVOL is not set
644# CONFIG_UBIUPDATEVOL is not set
645# CONFIG_ADJTIMEX is not set
646# CONFIG_BBCONFIG is not set
647# CONFIG_FEATURE_COMPRESS_BBCONFIG is not set
648CONFIG_BEEP=y
649CONFIG_FEATURE_BEEP_FREQ=4000
650CONFIG_FEATURE_BEEP_LENGTH_MS=30
651CONFIG_CHAT=y
652CONFIG_FEATURE_CHAT_NOFAIL=y
653# CONFIG_FEATURE_CHAT_TTY_HIFI is not set
654CONFIG_FEATURE_CHAT_IMPLICIT_CR=y
655CONFIG_FEATURE_CHAT_SWALLOW_OPTS=y
656CONFIG_FEATURE_CHAT_SEND_ESCAPES=y
657CONFIG_FEATURE_CHAT_VAR_ABORT_LEN=y
658CONFIG_FEATURE_CHAT_CLR_ABORT=y
659CONFIG_CHRT=y
660# CONFIG_CROND is not set
661# CONFIG_FEATURE_CROND_D is not set
662# CONFIG_FEATURE_CROND_CALL_SENDMAIL is not set
663CONFIG_FEATURE_CROND_DIR=""
664# CONFIG_CRONTAB is not set
665CONFIG_DC=y
666CONFIG_FEATURE_DC_LIBM=y
667# CONFIG_DEVFSD is not set
668# CONFIG_DEVFSD_MODLOAD is not set
669# CONFIG_DEVFSD_FG_NP is not set
670# CONFIG_DEVFSD_VERBOSE is not set
671# CONFIG_FEATURE_DEVFS is not set
672CONFIG_DEVMEM=y
673# CONFIG_EJECT is not set
674# CONFIG_FEATURE_EJECT_SCSI is not set
675CONFIG_FBSPLASH=y
676CONFIG_FLASHCP=y
677CONFIG_FLASH_LOCK=y
678CONFIG_FLASH_UNLOCK=y
679# CONFIG_FLASH_ERASEALL is not set
680# CONFIG_IONICE is not set
681CONFIG_INOTIFYD=y
682# CONFIG_LAST is not set
683# CONFIG_FEATURE_LAST_SMALL is not set
684# CONFIG_FEATURE_LAST_FANCY is not set
685# CONFIG_LESS is not set
686CONFIG_FEATURE_LESS_MAXLINES=0
687# CONFIG_FEATURE_LESS_BRACKETS is not set
688# CONFIG_FEATURE_LESS_FLAGS is not set
689# CONFIG_FEATURE_LESS_MARKS is not set
690# CONFIG_FEATURE_LESS_REGEXP is not set
691# CONFIG_FEATURE_LESS_WINCH is not set
692# CONFIG_FEATURE_LESS_DASHCMD is not set
693# CONFIG_FEATURE_LESS_LINENUMS is not set
694CONFIG_HDPARM=y
695CONFIG_FEATURE_HDPARM_GET_IDENTITY=y
696CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF=y
697CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF=y
698CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET=y
699CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF=y
700CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA=y
701CONFIG_MAKEDEVS=y
702# CONFIG_FEATURE_MAKEDEVS_LEAF is not set
703CONFIG_FEATURE_MAKEDEVS_TABLE=y
704CONFIG_MAN=y
705# CONFIG_MICROCOM is not set
706# CONFIG_MOUNTPOINT is not set
707# CONFIG_MT is not set
708CONFIG_RAIDAUTORUN=y
709# CONFIG_READAHEAD is not set
710# CONFIG_RFKILL is not set
711# CONFIG_RUNLEVEL is not set
712CONFIG_RX=y
713CONFIG_SETSID=y
714CONFIG_STRINGS=y
715# CONFIG_TASKSET is not set
716# CONFIG_FEATURE_TASKSET_FANCY is not set
717CONFIG_TIME=y
718CONFIG_TIMEOUT=y
719CONFIG_TTYSIZE=y
720CONFIG_VOLNAME=y
721# CONFIG_WALL is not set
722# CONFIG_WATCHDOG is not set
723
724#
725# Networking Utilities
726#
727# CONFIG_NAMEIF is not set
728# CONFIG_FEATURE_NAMEIF_EXTENDED is not set
729CONFIG_NBDCLIENT=y
730CONFIG_NC=y
731CONFIG_NC_SERVER=y
732CONFIG_NC_EXTRA=y
733# CONFIG_NC_110_COMPAT is not set
734# CONFIG_PING is not set
735# CONFIG_PING6 is not set
736# CONFIG_FEATURE_FANCY_PING is not set
737CONFIG_WHOIS=y
738# CONFIG_FEATURE_IPV6 is not set
739# CONFIG_FEATURE_UNIX_LOCAL is not set
740# CONFIG_FEATURE_PREFER_IPV4_ADDRESS is not set
741# CONFIG_VERBOSE_RESOLUTION_ERRORS is not set
742CONFIG_ARP=y
743# CONFIG_ARPING is not set
744# CONFIG_BRCTL is not set
745# CONFIG_FEATURE_BRCTL_FANCY is not set
746# CONFIG_FEATURE_BRCTL_SHOW is not set
747CONFIG_DNSD=y
748# CONFIG_ETHER_WAKE is not set
749CONFIG_FAKEIDENTD=y
750CONFIG_FTPD=y
751CONFIG_FEATURE_FTP_WRITE=y
752CONFIG_FEATURE_FTPD_ACCEPT_BROKEN_LIST=y
753CONFIG_FTPGET=y
754CONFIG_FTPPUT=y
755# CONFIG_FEATURE_FTPGETPUT_LONG_OPTIONS is not set
756# CONFIG_HOSTNAME is not set
757CONFIG_HTTPD=y
758CONFIG_FEATURE_HTTPD_RANGES=y
759CONFIG_FEATURE_HTTPD_USE_SENDFILE=y
760CONFIG_FEATURE_HTTPD_SETUID=y
761CONFIG_FEATURE_HTTPD_BASIC_AUTH=y
762# CONFIG_FEATURE_HTTPD_AUTH_MD5 is not set
763CONFIG_FEATURE_HTTPD_CGI=y
764CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR=y
765CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV=y
766CONFIG_FEATURE_HTTPD_ENCODE_URL_STR=y
767CONFIG_FEATURE_HTTPD_ERROR_PAGES=y
768CONFIG_FEATURE_HTTPD_PROXY=y
769CONFIG_FEATURE_HTTPD_GZIP=y
770CONFIG_IFCONFIG=y
771CONFIG_FEATURE_IFCONFIG_STATUS=y
772# CONFIG_FEATURE_IFCONFIG_SLIP is not set
773CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ=y
774CONFIG_FEATURE_IFCONFIG_HW=y
775CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS=y
776# CONFIG_IFENSLAVE is not set
777# CONFIG_IFPLUGD is not set
778CONFIG_IFUPDOWN=y
779CONFIG_IFUPDOWN_IFSTATE_PATH="/var/run/ifstate"
780CONFIG_FEATURE_IFUPDOWN_IP=y
781CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN=y
782# CONFIG_FEATURE_IFUPDOWN_IFCONFIG_BUILTIN is not set
783CONFIG_FEATURE_IFUPDOWN_IPV4=y
784# CONFIG_FEATURE_IFUPDOWN_IPV6 is not set
785CONFIG_FEATURE_IFUPDOWN_MAPPING=y
786# CONFIG_FEATURE_IFUPDOWN_EXTERNAL_DHCP is not set
787# CONFIG_INETD is not set
788# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO is not set
789# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD is not set
790# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME is not set
791# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME is not set
792# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN is not set
793# CONFIG_FEATURE_INETD_RPC is not set
794CONFIG_IP=y
795CONFIG_FEATURE_IP_ADDRESS=y
796CONFIG_FEATURE_IP_LINK=y
797CONFIG_FEATURE_IP_ROUTE=y
798CONFIG_FEATURE_IP_TUNNEL=y
799CONFIG_FEATURE_IP_RULE=y
800CONFIG_FEATURE_IP_SHORT_FORMS=y
801# CONFIG_FEATURE_IP_RARE_PROTOCOLS is not set
802CONFIG_IPADDR=y
803CONFIG_IPLINK=y
804CONFIG_IPROUTE=y
805CONFIG_IPTUNNEL=y
806CONFIG_IPRULE=y
807CONFIG_IPCALC=y
808CONFIG_FEATURE_IPCALC_FANCY=y
809# CONFIG_FEATURE_IPCALC_LONG_OPTIONS is not set
810CONFIG_NETSTAT=y
811CONFIG_FEATURE_NETSTAT_WIDE=y
812CONFIG_FEATURE_NETSTAT_PRG=y
813# CONFIG_NSLOOKUP is not set
814# CONFIG_NTPD is not set
815# CONFIG_FEATURE_NTPD_SERVER is not set
816CONFIG_PSCAN=y
817CONFIG_ROUTE=y
818# CONFIG_SLATTACH is not set
819CONFIG_TCPSVD=y
820# CONFIG_TELNET is not set
821# CONFIG_FEATURE_TELNET_TTYPE is not set
822# CONFIG_FEATURE_TELNET_AUTOLOGIN is not set
823# CONFIG_TELNETD is not set
824# CONFIG_FEATURE_TELNETD_STANDALONE is not set
825# CONFIG_FEATURE_TELNETD_INETD_WAIT is not set
826# CONFIG_TFTP is not set
827# CONFIG_TFTPD is not set
828# CONFIG_FEATURE_TFTP_GET is not set
829# CONFIG_FEATURE_TFTP_PUT is not set
830# CONFIG_FEATURE_TFTP_BLOCKSIZE is not set
831# CONFIG_FEATURE_TFTP_PROGRESS_BAR is not set
832# CONFIG_TFTP_DEBUG is not set
833# CONFIG_TRACEROUTE is not set
834# CONFIG_TRACEROUTE6 is not set
835# CONFIG_FEATURE_TRACEROUTE_VERBOSE is not set
836# CONFIG_FEATURE_TRACEROUTE_SOURCE_ROUTE is not set
837# CONFIG_FEATURE_TRACEROUTE_USE_ICMP is not set
838CONFIG_TUNCTL=y
839CONFIG_FEATURE_TUNCTL_UG=y
840# CONFIG_UDHCPD is not set
841# CONFIG_DHCPRELAY is not set
842# CONFIG_DUMPLEASES is not set
843# CONFIG_FEATURE_UDHCPD_WRITE_LEASES_EARLY is not set
844# CONFIG_FEATURE_UDHCPD_BASE_IP_ON_MAC is not set
845CONFIG_DHCPD_LEASES_FILE=""
846CONFIG_UDHCPC=y
847CONFIG_FEATURE_UDHCPC_ARPING=y
848# CONFIG_FEATURE_UDHCP_PORT is not set
849CONFIG_UDHCP_DEBUG=9
850CONFIG_FEATURE_UDHCP_RFC3397=y
851CONFIG_FEATURE_UDHCP_8021Q=y
852CONFIG_UDHCPC_DEFAULT_SCRIPT="/usr/share/udhcpc/default.script"
853CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS=80
854CONFIG_IFUPDOWN_UDHCPC_CMD_OPTIONS="-R -n"
855# CONFIG_UDPSVD is not set
856# CONFIG_VCONFIG is not set
857CONFIG_WGET=y
858CONFIG_FEATURE_WGET_STATUSBAR=y
859CONFIG_FEATURE_WGET_AUTHENTICATION=y
860# CONFIG_FEATURE_WGET_LONG_OPTIONS is not set
861CONFIG_FEATURE_WGET_TIMEOUT=y
862# CONFIG_ZCIP is not set
863
864#
865# Print Utilities
866#
867CONFIG_LPD=y
868CONFIG_LPR=y
869CONFIG_LPQ=y
870
871#
872# Mail Utilities
873#
874CONFIG_MAKEMIME=y
875CONFIG_FEATURE_MIME_CHARSET="us-ascii"
876CONFIG_POPMAILDIR=y
877CONFIG_FEATURE_POPMAILDIR_DELIVERY=y
878CONFIG_REFORMIME=y
879CONFIG_FEATURE_REFORMIME_COMPAT=y
880CONFIG_SENDMAIL=y
881
882#
883# Process Utilities
884#
885CONFIG_IOSTAT=y
886CONFIG_MPSTAT=y
887CONFIG_NMETER=y
888CONFIG_PMAP=y
889CONFIG_POWERTOP=y
890CONFIG_PSTREE=y
891CONFIG_PWDX=y
892CONFIG_SMEMCAP=y
893# CONFIG_FREE is not set
894CONFIG_FUSER=y
895# CONFIG_KILL is not set
896# CONFIG_KILLALL is not set
897# CONFIG_KILLALL5 is not set
898# CONFIG_PGREP is not set
899CONFIG_PIDOF=y
900CONFIG_FEATURE_PIDOF_SINGLE=y
901CONFIG_FEATURE_PIDOF_OMIT=y
902# CONFIG_PKILL is not set
903# CONFIG_PS is not set
904# CONFIG_FEATURE_PS_WIDE is not set
905# CONFIG_FEATURE_PS_TIME is not set
906# CONFIG_FEATURE_PS_ADDITIONAL_COLUMNS is not set
907# CONFIG_FEATURE_PS_UNUSUAL_SYSTEMS is not set
908CONFIG_RENICE=y
909CONFIG_BB_SYSCTL=y
910CONFIG_TOP=y
911CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE=y
912CONFIG_FEATURE_TOP_CPU_GLOBAL_PERCENTS=y
913CONFIG_FEATURE_TOP_SMP_CPU=y
914CONFIG_FEATURE_TOP_DECIMALS=y
915CONFIG_FEATURE_TOP_SMP_PROCESS=y
916CONFIG_FEATURE_TOPMEM=y
917CONFIG_FEATURE_SHOW_THREADS=y
918# CONFIG_UPTIME is not set
919CONFIG_WATCH=y
920
921#
922# Runit Utilities
923#
924CONFIG_RUNSV=y
925CONFIG_RUNSVDIR=y
926# CONFIG_FEATURE_RUNSVDIR_LOG is not set
927CONFIG_SV=y
928CONFIG_SV_DEFAULT_SERVICE_DIR="/var/service"
929CONFIG_SVLOGD=y
930CONFIG_CHPST=y
931CONFIG_SETUIDGID=y
932CONFIG_ENVUIDGID=y
933CONFIG_ENVDIR=y
934CONFIG_SOFTLIMIT=y
935# CONFIG_CHCON is not set
936# CONFIG_FEATURE_CHCON_LONG_OPTIONS is not set
937# CONFIG_GETENFORCE is not set
938# CONFIG_GETSEBOOL is not set
939# CONFIG_LOAD_POLICY is not set
940# CONFIG_MATCHPATHCON is not set
941# CONFIG_RESTORECON is not set
942# CONFIG_RUNCON is not set
943# CONFIG_FEATURE_RUNCON_LONG_OPTIONS is not set
944# CONFIG_SELINUXENABLED is not set
945# CONFIG_SETENFORCE is not set
946# CONFIG_SETFILES is not set
947# CONFIG_FEATURE_SETFILES_CHECK_OPTION is not set
948# CONFIG_SETSEBOOL is not set
949# CONFIG_SESTATUS is not set
950
951#
952# Shells
953#
954# CONFIG_ASH is not set
955# CONFIG_ASH_BASH_COMPAT is not set
956# CONFIG_ASH_IDLE_TIMEOUT is not set
957# CONFIG_ASH_JOB_CONTROL is not set
958# CONFIG_ASH_ALIAS is not set
959# CONFIG_ASH_GETOPTS is not set
960# CONFIG_ASH_BUILTIN_ECHO is not set
961# CONFIG_ASH_BUILTIN_PRINTF is not set
962# CONFIG_ASH_BUILTIN_TEST is not set
963# CONFIG_ASH_CMDCMD is not set
964# CONFIG_ASH_MAIL is not set
965# CONFIG_ASH_OPTIMIZE_FOR_SIZE is not set
966# CONFIG_ASH_RANDOM_SUPPORT is not set
967# CONFIG_ASH_EXPAND_PRMT is not set
968CONFIG_CTTYHACK=y
969# CONFIG_HUSH is not set
970# CONFIG_HUSH_BASH_COMPAT is not set
971# CONFIG_HUSH_BRACE_EXPANSION is not set
972# CONFIG_HUSH_HELP is not set
973# CONFIG_HUSH_INTERACTIVE is not set
974# CONFIG_HUSH_SAVEHISTORY is not set
975# CONFIG_HUSH_JOB is not set
976# CONFIG_HUSH_TICK is not set
977# CONFIG_HUSH_IF is not set
978# CONFIG_HUSH_LOOPS is not set
979# CONFIG_HUSH_CASE is not set
980# CONFIG_HUSH_FUNCTIONS is not set
981# CONFIG_HUSH_LOCAL is not set
982# CONFIG_HUSH_RANDOM_SUPPORT is not set
983# CONFIG_HUSH_EXPORT_N is not set
984# CONFIG_HUSH_MODE_X is not set
985# CONFIG_MSH is not set
986# CONFIG_FEATURE_SH_IS_ASH is not set
987# CONFIG_FEATURE_SH_IS_HUSH is not set
988CONFIG_FEATURE_SH_IS_NONE=y
989# CONFIG_FEATURE_BASH_IS_ASH is not set
990# CONFIG_FEATURE_BASH_IS_HUSH is not set
991CONFIG_FEATURE_BASH_IS_NONE=y
992# CONFIG_SH_MATH_SUPPORT is not set
993# CONFIG_SH_MATH_SUPPORT_64 is not set
994# CONFIG_FEATURE_SH_EXTRA_QUIET is not set
995# CONFIG_FEATURE_SH_STANDALONE is not set
996# CONFIG_FEATURE_SH_NOFORK is not set
997# CONFIG_FEATURE_SH_HISTFILESIZE is not set
998
999#
1000# System Logging Utilities
1001#
1002# CONFIG_SYSLOGD is not set
1003# CONFIG_FEATURE_ROTATE_LOGFILE is not set
1004# CONFIG_FEATURE_REMOTE_LOG is not set
1005# CONFIG_FEATURE_SYSLOGD_DUP is not set
1006# CONFIG_FEATURE_SYSLOGD_CFG is not set
1007CONFIG_FEATURE_SYSLOGD_READ_BUFFER_SIZE=0
1008# CONFIG_FEATURE_IPC_SYSLOG is not set
1009CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=0
1010# CONFIG_LOGREAD is not set
1011# CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING is not set
1012CONFIG_KLOGD=y
1013CONFIG_FEATURE_KLOGD_KLOGCTL=y
1014# CONFIG_LOGGER is not set
diff --git a/configs/cygwin_defconfig b/configs/cygwin_defconfig
new file mode 100644
index 000000000..cc2d643e1
--- /dev/null
+++ b/configs/cygwin_defconfig
@@ -0,0 +1,997 @@
1#
2# Automatically generated make config: don't edit
3# Busybox version: 1.19.0.git
4# Sun Jul 10 12:48:50 2011
5#
6CONFIG_HAVE_DOT_CONFIG=y
7
8#
9# Busybox Settings
10#
11
12#
13# General Configuration
14#
15CONFIG_DESKTOP=y
16# CONFIG_EXTRA_COMPAT is not set
17CONFIG_INCLUDE_SUSv2=y
18# CONFIG_USE_PORTABLE_CODE is not set
19CONFIG_PLATFORM_LINUX=y
20CONFIG_FEATURE_BUFFERS_USE_MALLOC=y
21# CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set
22# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set
23CONFIG_SHOW_USAGE=y
24CONFIG_FEATURE_VERBOSE_USAGE=y
25CONFIG_FEATURE_COMPRESS_USAGE=y
26CONFIG_FEATURE_INSTALLER=y
27# CONFIG_INSTALL_NO_USR is not set
28# CONFIG_LOCALE_SUPPORT is not set
29CONFIG_UNICODE_SUPPORT=y
30# CONFIG_UNICODE_USING_LOCALE is not set
31# CONFIG_FEATURE_CHECK_UNICODE_IN_ENV is not set
32CONFIG_SUBST_WCHAR=65533
33CONFIG_LAST_SUPPORTED_WCHAR=0
34# CONFIG_UNICODE_COMBINING_WCHARS is not set
35# CONFIG_UNICODE_WIDE_WCHARS is not set
36# CONFIG_UNICODE_BIDI_SUPPORT is not set
37# CONFIG_UNICODE_NEUTRAL_TABLE is not set
38# CONFIG_UNICODE_PRESERVE_BROKEN is not set
39CONFIG_LONG_OPTS=y
40CONFIG_FEATURE_DEVPTS=y
41# CONFIG_FEATURE_CLEAN_UP is not set
42# CONFIG_FEATURE_UTMP is not set
43# CONFIG_FEATURE_WTMP is not set
44CONFIG_FEATURE_PIDFILE=y
45CONFIG_FEATURE_SUID=y
46# CONFIG_FEATURE_SUID_CONFIG is not set
47# CONFIG_FEATURE_SUID_CONFIG_QUIET is not set
48# CONFIG_SELINUX is not set
49# CONFIG_FEATURE_PREFER_APPLETS is not set
50CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe"
51CONFIG_FEATURE_SYSLOG=y
52# CONFIG_FEATURE_HAVE_RPC is not set
53
54#
55# Build Options
56#
57# CONFIG_STATIC is not set
58# CONFIG_PIE is not set
59# CONFIG_NOMMU is not set
60# CONFIG_BUILD_LIBBUSYBOX is not set
61# CONFIG_FEATURE_INDIVIDUAL is not set
62# CONFIG_FEATURE_SHARED_BUSYBOX is not set
63CONFIG_LFS=y
64CONFIG_CROSS_COMPILER_PREFIX=""
65CONFIG_EXTRA_CFLAGS=""
66
67#
68# Debugging Options
69#
70# CONFIG_DEBUG is not set
71# CONFIG_DEBUG_PESSIMIZE is not set
72# CONFIG_WERROR is not set
73CONFIG_NO_DEBUG_LIB=y
74# CONFIG_DMALLOC is not set
75# CONFIG_EFENCE is not set
76
77#
78# Installation Options ("make install" behavior)
79#
80CONFIG_INSTALL_APPLET_SYMLINKS=y
81# CONFIG_INSTALL_APPLET_HARDLINKS is not set
82# CONFIG_INSTALL_APPLET_SCRIPT_WRAPPERS is not set
83# CONFIG_INSTALL_APPLET_DONT is not set
84# CONFIG_INSTALL_SH_APPLET_SYMLINK is not set
85# CONFIG_INSTALL_SH_APPLET_HARDLINK is not set
86# CONFIG_INSTALL_SH_APPLET_SCRIPT_WRAPPER is not set
87CONFIG_PREFIX="./_install"
88
89#
90# Busybox Library Tuning
91#
92# CONFIG_FEATURE_SYSTEMD is not set
93CONFIG_FEATURE_RTMINMAX=y
94CONFIG_PASSWORD_MINLEN=6
95CONFIG_MD5_SIZE_VS_SPEED=2
96CONFIG_FEATURE_FAST_TOP=y
97# CONFIG_FEATURE_ETC_NETWORKS is not set
98CONFIG_FEATURE_USE_TERMIOS=y
99CONFIG_FEATURE_EDITING=y
100CONFIG_FEATURE_EDITING_MAX_LEN=1024
101# CONFIG_FEATURE_EDITING_VI is not set
102CONFIG_FEATURE_EDITING_HISTORY=255
103CONFIG_FEATURE_EDITING_SAVEHISTORY=y
104CONFIG_FEATURE_TAB_COMPLETION=y
105# CONFIG_FEATURE_USERNAME_COMPLETION is not set
106CONFIG_FEATURE_EDITING_FANCY_PROMPT=y
107# CONFIG_FEATURE_EDITING_ASK_TERMINAL is not set
108CONFIG_FEATURE_NON_POSIX_CP=y
109# CONFIG_FEATURE_VERBOSE_CP_MESSAGE is not set
110CONFIG_FEATURE_COPYBUF_KB=4
111CONFIG_FEATURE_SKIP_ROOTFS=y
112# CONFIG_MONOTONIC_SYSCALL is not set
113CONFIG_IOCTL_HEX2STR_ERROR=y
114CONFIG_FEATURE_HWIB=y
115
116#
117# Applets
118#
119
120#
121# Archival Utilities
122#
123CONFIG_FEATURE_SEAMLESS_XZ=y
124CONFIG_FEATURE_SEAMLESS_LZMA=y
125CONFIG_FEATURE_SEAMLESS_BZ2=y
126CONFIG_FEATURE_SEAMLESS_GZ=y
127# CONFIG_FEATURE_SEAMLESS_Z is not set
128# CONFIG_AR is not set
129# CONFIG_FEATURE_AR_LONG_FILENAMES is not set
130# CONFIG_FEATURE_AR_CREATE is not set
131CONFIG_BUNZIP2=y
132CONFIG_BZIP2=y
133CONFIG_CPIO=y
134CONFIG_FEATURE_CPIO_O=y
135CONFIG_FEATURE_CPIO_P=y
136# CONFIG_DPKG is not set
137# CONFIG_DPKG_DEB is not set
138# CONFIG_FEATURE_DPKG_DEB_EXTRACT_ONLY is not set
139CONFIG_GUNZIP=y
140CONFIG_GZIP=y
141CONFIG_FEATURE_GZIP_LONG_OPTIONS=y
142CONFIG_LZOP=y
143# CONFIG_LZOP_COMPR_HIGH is not set
144CONFIG_RPM2CPIO=y
145CONFIG_RPM=y
146CONFIG_TAR=y
147CONFIG_FEATURE_TAR_CREATE=y
148CONFIG_FEATURE_TAR_AUTODETECT=y
149CONFIG_FEATURE_TAR_FROM=y
150CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY=y
151CONFIG_FEATURE_TAR_OLDSUN_COMPATIBILITY=y
152CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y
153CONFIG_FEATURE_TAR_LONG_OPTIONS=y
154CONFIG_FEATURE_TAR_TO_COMMAND=y
155CONFIG_FEATURE_TAR_UNAME_GNAME=y
156CONFIG_FEATURE_TAR_NOPRESERVE_TIME=y
157# CONFIG_FEATURE_TAR_SELINUX is not set
158# CONFIG_UNCOMPRESS is not set
159CONFIG_UNLZMA=y
160CONFIG_FEATURE_LZMA_FAST=y
161CONFIG_LZMA=y
162CONFIG_UNXZ=y
163CONFIG_XZ=y
164CONFIG_UNZIP=y
165
166#
167# Coreutils
168#
169CONFIG_BASENAME=y
170CONFIG_CAT=y
171CONFIG_DATE=y
172CONFIG_FEATURE_DATE_ISOFMT=y
173# CONFIG_FEATURE_DATE_NANO is not set
174CONFIG_FEATURE_DATE_COMPAT=y
175CONFIG_ID=y
176CONFIG_GROUPS=y
177CONFIG_TEST=y
178CONFIG_FEATURE_TEST_64=y
179CONFIG_TOUCH=y
180CONFIG_TR=y
181CONFIG_FEATURE_TR_CLASSES=y
182CONFIG_FEATURE_TR_EQUIV=y
183CONFIG_BASE64=y
184CONFIG_CAL=y
185CONFIG_CATV=y
186CONFIG_CHGRP=y
187CONFIG_CHMOD=y
188CONFIG_CHOWN=y
189CONFIG_FEATURE_CHOWN_LONG_OPTIONS=y
190CONFIG_CHROOT=y
191CONFIG_CKSUM=y
192CONFIG_COMM=y
193CONFIG_CP=y
194CONFIG_FEATURE_CP_LONG_OPTIONS=y
195CONFIG_CUT=y
196CONFIG_DD=y
197CONFIG_FEATURE_DD_SIGNAL_HANDLING=y
198CONFIG_FEATURE_DD_THIRD_STATUS_LINE=y
199CONFIG_FEATURE_DD_IBS_OBS=y
200CONFIG_DF=y
201CONFIG_FEATURE_DF_FANCY=y
202CONFIG_DIRNAME=y
203CONFIG_DOS2UNIX=y
204CONFIG_UNIX2DOS=y
205CONFIG_DU=y
206# CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K is not set
207CONFIG_ECHO=y
208CONFIG_FEATURE_FANCY_ECHO=y
209CONFIG_ENV=y
210CONFIG_FEATURE_ENV_LONG_OPTIONS=y
211CONFIG_EXPAND=y
212CONFIG_FEATURE_EXPAND_LONG_OPTIONS=y
213CONFIG_EXPR=y
214CONFIG_EXPR_MATH_SUPPORT_64=y
215CONFIG_FALSE=y
216CONFIG_FOLD=y
217CONFIG_FSYNC=y
218CONFIG_HEAD=y
219CONFIG_FEATURE_FANCY_HEAD=y
220CONFIG_HOSTID=y
221CONFIG_INSTALL=y
222CONFIG_FEATURE_INSTALL_LONG_OPTIONS=y
223CONFIG_LN=y
224CONFIG_LOGNAME=y
225CONFIG_LS=y
226CONFIG_FEATURE_LS_FILETYPES=y
227CONFIG_FEATURE_LS_FOLLOWLINKS=y
228CONFIG_FEATURE_LS_RECURSIVE=y
229CONFIG_FEATURE_LS_SORTFILES=y
230CONFIG_FEATURE_LS_TIMESTAMPS=y
231CONFIG_FEATURE_LS_USERNAME=y
232CONFIG_FEATURE_LS_COLOR=y
233CONFIG_FEATURE_LS_COLOR_IS_DEFAULT=y
234CONFIG_MD5SUM=y
235CONFIG_MKDIR=y
236CONFIG_FEATURE_MKDIR_LONG_OPTIONS=y
237CONFIG_MKFIFO=y
238CONFIG_MKNOD=y
239CONFIG_MV=y
240CONFIG_FEATURE_MV_LONG_OPTIONS=y
241CONFIG_NICE=y
242CONFIG_NOHUP=y
243CONFIG_OD=y
244CONFIG_PRINTENV=y
245CONFIG_PRINTF=y
246CONFIG_PWD=y
247CONFIG_READLINK=y
248CONFIG_FEATURE_READLINK_FOLLOW=y
249CONFIG_REALPATH=y
250CONFIG_RM=y
251CONFIG_RMDIR=y
252CONFIG_FEATURE_RMDIR_LONG_OPTIONS=y
253CONFIG_SEQ=y
254CONFIG_SHA1SUM=y
255CONFIG_SHA256SUM=y
256CONFIG_SHA512SUM=y
257CONFIG_SLEEP=y
258CONFIG_FEATURE_FANCY_SLEEP=y
259CONFIG_FEATURE_FLOAT_SLEEP=y
260CONFIG_SORT=y
261CONFIG_FEATURE_SORT_BIG=y
262CONFIG_SPLIT=y
263CONFIG_FEATURE_SPLIT_FANCY=y
264# CONFIG_STAT is not set
265# CONFIG_FEATURE_STAT_FORMAT is not set
266CONFIG_STTY=y
267CONFIG_SUM=y
268CONFIG_SYNC=y
269CONFIG_TAC=y
270CONFIG_TAIL=y
271CONFIG_FEATURE_FANCY_TAIL=y
272CONFIG_TEE=y
273CONFIG_FEATURE_TEE_USE_BLOCK_IO=y
274CONFIG_TRUE=y
275CONFIG_TTY=y
276CONFIG_UNAME=y
277CONFIG_UNEXPAND=y
278CONFIG_FEATURE_UNEXPAND_LONG_OPTIONS=y
279CONFIG_UNIQ=y
280CONFIG_USLEEP=y
281CONFIG_UUDECODE=y
282CONFIG_UUENCODE=y
283CONFIG_WC=y
284CONFIG_FEATURE_WC_LARGE=y
285# CONFIG_WHO is not set
286CONFIG_WHOAMI=y
287CONFIG_YES=y
288
289#
290# Common options for cp and mv
291#
292CONFIG_FEATURE_PRESERVE_HARDLINKS=y
293
294#
295# Common options for ls, more and telnet
296#
297CONFIG_FEATURE_AUTOWIDTH=y
298
299#
300# Common options for df, du, ls
301#
302CONFIG_FEATURE_HUMAN_READABLE=y
303
304#
305# Common options for md5sum, sha1sum, sha256sum, sha512sum
306#
307CONFIG_FEATURE_MD5_SHA1_SUM_CHECK=y
308
309#
310# Console Utilities
311#
312# CONFIG_CHVT is not set
313# CONFIG_FGCONSOLE is not set
314CONFIG_CLEAR=y
315# CONFIG_DEALLOCVT is not set
316# CONFIG_DUMPKMAP is not set
317# CONFIG_KBD_MODE is not set
318# CONFIG_LOADFONT is not set
319# CONFIG_LOADKMAP is not set
320# CONFIG_OPENVT is not set
321CONFIG_RESET=y
322CONFIG_RESIZE=y
323CONFIG_FEATURE_RESIZE_PRINT=y
324# CONFIG_SETCONSOLE is not set
325# CONFIG_FEATURE_SETCONSOLE_LONG_OPTIONS is not set
326# CONFIG_SETFONT is not set
327# CONFIG_FEATURE_SETFONT_TEXTUAL_MAP is not set
328CONFIG_DEFAULT_SETFONT_DIR=""
329# CONFIG_SETKEYCODES is not set
330# CONFIG_SETLOGCONS is not set
331# CONFIG_SHOWKEY is not set
332# CONFIG_FEATURE_LOADFONT_PSF2 is not set
333# CONFIG_FEATURE_LOADFONT_RAW is not set
334
335#
336# Debian Utilities
337#
338CONFIG_MKTEMP=y
339CONFIG_PIPE_PROGRESS=y
340CONFIG_RUN_PARTS=y
341CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS=y
342CONFIG_FEATURE_RUN_PARTS_FANCY=y
343CONFIG_START_STOP_DAEMON=y
344CONFIG_FEATURE_START_STOP_DAEMON_FANCY=y
345CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS=y
346CONFIG_WHICH=y
347
348#
349# Editors
350#
351CONFIG_PATCH=y
352CONFIG_VI=y
353CONFIG_FEATURE_VI_MAX_LEN=4096
354# CONFIG_FEATURE_VI_8BIT is not set
355CONFIG_FEATURE_VI_COLON=y
356CONFIG_FEATURE_VI_YANKMARK=y
357CONFIG_FEATURE_VI_SEARCH=y
358# CONFIG_FEATURE_VI_REGEX_SEARCH is not set
359CONFIG_FEATURE_VI_USE_SIGNALS=y
360CONFIG_FEATURE_VI_DOT_CMD=y
361CONFIG_FEATURE_VI_READONLY=y
362CONFIG_FEATURE_VI_SETOPTS=y
363CONFIG_FEATURE_VI_SET=y
364CONFIG_FEATURE_VI_WIN_RESIZE=y
365CONFIG_FEATURE_VI_ASK_TERMINAL=y
366CONFIG_FEATURE_VI_OPTIMIZE_CURSOR=y
367CONFIG_AWK=y
368CONFIG_FEATURE_AWK_LIBM=y
369CONFIG_CMP=y
370CONFIG_DIFF=y
371CONFIG_FEATURE_DIFF_LONG_OPTIONS=y
372CONFIG_FEATURE_DIFF_DIR=y
373CONFIG_ED=y
374CONFIG_SED=y
375CONFIG_FEATURE_ALLOW_EXEC=y
376
377#
378# Finding Utilities
379#
380CONFIG_FIND=y
381CONFIG_FEATURE_FIND_PRINT0=y
382CONFIG_FEATURE_FIND_MTIME=y
383CONFIG_FEATURE_FIND_MMIN=y
384CONFIG_FEATURE_FIND_PERM=y
385CONFIG_FEATURE_FIND_TYPE=y
386CONFIG_FEATURE_FIND_XDEV=y
387CONFIG_FEATURE_FIND_MAXDEPTH=y
388CONFIG_FEATURE_FIND_NEWER=y
389CONFIG_FEATURE_FIND_INUM=y
390CONFIG_FEATURE_FIND_EXEC=y
391CONFIG_FEATURE_FIND_USER=y
392CONFIG_FEATURE_FIND_GROUP=y
393CONFIG_FEATURE_FIND_NOT=y
394CONFIG_FEATURE_FIND_DEPTH=y
395CONFIG_FEATURE_FIND_PAREN=y
396CONFIG_FEATURE_FIND_SIZE=y
397CONFIG_FEATURE_FIND_PRUNE=y
398CONFIG_FEATURE_FIND_DELETE=y
399CONFIG_FEATURE_FIND_PATH=y
400CONFIG_FEATURE_FIND_REGEX=y
401# CONFIG_FEATURE_FIND_CONTEXT is not set
402CONFIG_FEATURE_FIND_LINKS=y
403CONFIG_GREP=y
404CONFIG_FEATURE_GREP_EGREP_ALIAS=y
405CONFIG_FEATURE_GREP_FGREP_ALIAS=y
406CONFIG_FEATURE_GREP_CONTEXT=y
407CONFIG_XARGS=y
408CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION=y
409CONFIG_FEATURE_XARGS_SUPPORT_QUOTES=y
410CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT=y
411CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM=y
412
413#
414# Init Utilities
415#
416# CONFIG_BOOTCHARTD is not set
417# CONFIG_FEATURE_BOOTCHARTD_BLOATED_HEADER is not set
418# CONFIG_FEATURE_BOOTCHARTD_CONFIG_FILE is not set
419# CONFIG_HALT is not set
420# CONFIG_FEATURE_CALL_TELINIT is not set
421CONFIG_TELINIT_PATH=""
422# CONFIG_INIT is not set
423# CONFIG_FEATURE_USE_INITTAB is not set
424# CONFIG_FEATURE_KILL_REMOVED is not set
425CONFIG_FEATURE_KILL_DELAY=0
426# CONFIG_FEATURE_INIT_SCTTY is not set
427# CONFIG_FEATURE_INIT_SYSLOG is not set
428# CONFIG_FEATURE_EXTRA_QUIET is not set
429# CONFIG_FEATURE_INIT_COREDUMPS is not set
430# CONFIG_FEATURE_INITRD is not set
431CONFIG_INIT_TERMINAL_TYPE=""
432CONFIG_MESG=y
433CONFIG_FEATURE_MESG_ENABLE_ONLY_GROUP=y
434
435#
436# Login/Password Management Utilities
437#
438CONFIG_ADD_SHELL=y
439CONFIG_REMOVE_SHELL=y
440CONFIG_FEATURE_SHADOWPASSWDS=y
441CONFIG_USE_BB_PWD_GRP=y
442CONFIG_USE_BB_SHADOW=y
443CONFIG_USE_BB_CRYPT=y
444CONFIG_USE_BB_CRYPT_SHA=y
445CONFIG_ADDUSER=y
446CONFIG_FEATURE_ADDUSER_LONG_OPTIONS=y
447# CONFIG_FEATURE_CHECK_NAMES is not set
448CONFIG_FIRST_SYSTEM_ID=100
449CONFIG_LAST_SYSTEM_ID=999
450CONFIG_ADDGROUP=y
451CONFIG_FEATURE_ADDGROUP_LONG_OPTIONS=y
452CONFIG_FEATURE_ADDUSER_TO_GROUP=y
453CONFIG_DELUSER=y
454CONFIG_DELGROUP=y
455CONFIG_FEATURE_DEL_USER_FROM_GROUP=y
456# CONFIG_GETTY is not set
457CONFIG_LOGIN=y
458# CONFIG_PAM is not set
459CONFIG_LOGIN_SCRIPTS=y
460CONFIG_FEATURE_NOLOGIN=y
461CONFIG_FEATURE_SECURETTY=y
462CONFIG_PASSWD=y
463CONFIG_FEATURE_PASSWD_WEAK_CHECK=y
464CONFIG_CRYPTPW=y
465CONFIG_CHPASSWD=y
466CONFIG_SU=y
467CONFIG_FEATURE_SU_SYSLOG=y
468CONFIG_FEATURE_SU_CHECKS_SHELLS=y
469CONFIG_SULOGIN=y
470CONFIG_VLOCK=y
471
472#
473# Linux Ext2 FS Progs
474#
475CONFIG_CHATTR=y
476# CONFIG_FSCK is not set
477# CONFIG_LSATTR is not set
478# CONFIG_TUNE2FS is not set
479
480#
481# Linux Module Utilities
482#
483# CONFIG_MODINFO is not set
484# CONFIG_MODPROBE_SMALL is not set
485# CONFIG_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE is not set
486# CONFIG_FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED is not set
487# CONFIG_INSMOD is not set
488# CONFIG_RMMOD is not set
489# CONFIG_LSMOD is not set
490# CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT is not set
491# CONFIG_MODPROBE is not set
492# CONFIG_FEATURE_MODPROBE_BLACKLIST is not set
493# CONFIG_DEPMOD is not set
494
495#
496# Options common to multiple modutils
497#
498# CONFIG_FEATURE_2_4_MODULES is not set
499# CONFIG_FEATURE_INSMOD_TRY_MMAP is not set
500# CONFIG_FEATURE_INSMOD_VERSION_CHECKING is not set
501# CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS is not set
502# CONFIG_FEATURE_INSMOD_LOADINKMEM is not set
503# CONFIG_FEATURE_INSMOD_LOAD_MAP is not set
504# CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL is not set
505# CONFIG_FEATURE_CHECK_TAINTED_MODULE is not set
506# CONFIG_FEATURE_MODUTILS_ALIAS is not set
507# CONFIG_FEATURE_MODUTILS_SYMBOLS is not set
508CONFIG_DEFAULT_MODULES_DIR=""
509CONFIG_DEFAULT_DEPMOD_FILE=""
510
511#
512# Linux System Utilities
513#
514# CONFIG_BLOCKDEV is not set
515CONFIG_REV=y
516# CONFIG_ACPID is not set
517# CONFIG_FEATURE_ACPID_COMPAT is not set
518# CONFIG_BLKID is not set
519# CONFIG_FEATURE_BLKID_TYPE is not set
520# CONFIG_DMESG is not set
521# CONFIG_FEATURE_DMESG_PRETTY is not set
522# CONFIG_FBSET is not set
523# CONFIG_FEATURE_FBSET_FANCY is not set
524# CONFIG_FEATURE_FBSET_READMODE is not set
525# CONFIG_FDFLUSH is not set
526# CONFIG_FDFORMAT is not set
527# CONFIG_FDISK is not set
528# CONFIG_FDISK_SUPPORT_LARGE_DISKS is not set
529# CONFIG_FEATURE_FDISK_WRITABLE is not set
530# CONFIG_FEATURE_AIX_LABEL is not set
531# CONFIG_FEATURE_SGI_LABEL is not set
532# CONFIG_FEATURE_SUN_LABEL is not set
533# CONFIG_FEATURE_OSF_LABEL is not set
534# CONFIG_FEATURE_GPT_LABEL is not set
535# CONFIG_FEATURE_FDISK_ADVANCED is not set
536# CONFIG_FINDFS is not set
537CONFIG_FLOCK=y
538# CONFIG_FREERAMDISK is not set
539CONFIG_FSCK_MINIX=y
540# CONFIG_MKFS_EXT2 is not set
541# CONFIG_MKFS_MINIX is not set
542CONFIG_FEATURE_MINIX2=y
543# CONFIG_MKFS_REISER is not set
544# CONFIG_MKFS_VFAT is not set
545CONFIG_GETOPT=y
546CONFIG_FEATURE_GETOPT_LONG=y
547CONFIG_HEXDUMP=y
548CONFIG_FEATURE_HEXDUMP_REVERSE=y
549CONFIG_HD=y
550# CONFIG_HWCLOCK is not set
551# CONFIG_FEATURE_HWCLOCK_LONG_OPTIONS is not set
552# CONFIG_FEATURE_HWCLOCK_ADJTIME_FHS is not set
553CONFIG_IPCRM=y
554# CONFIG_IPCS is not set
555# CONFIG_LOSETUP is not set
556# CONFIG_LSPCI is not set
557# CONFIG_LSUSB is not set
558# CONFIG_MDEV is not set
559# CONFIG_FEATURE_MDEV_CONF is not set
560# CONFIG_FEATURE_MDEV_RENAME is not set
561# CONFIG_FEATURE_MDEV_RENAME_REGEXP is not set
562# CONFIG_FEATURE_MDEV_EXEC is not set
563# CONFIG_FEATURE_MDEV_LOAD_FIRMWARE is not set
564CONFIG_MKSWAP=y
565CONFIG_FEATURE_MKSWAP_UUID=y
566CONFIG_MORE=y
567# CONFIG_MOUNT is not set
568# CONFIG_FEATURE_MOUNT_FAKE is not set
569# CONFIG_FEATURE_MOUNT_VERBOSE is not set
570# CONFIG_FEATURE_MOUNT_HELPERS is not set
571# CONFIG_FEATURE_MOUNT_LABEL is not set
572# CONFIG_FEATURE_MOUNT_NFS is not set
573# CONFIG_FEATURE_MOUNT_CIFS is not set
574# CONFIG_FEATURE_MOUNT_FLAGS is not set
575# CONFIG_FEATURE_MOUNT_FSTAB is not set
576# CONFIG_PIVOT_ROOT is not set
577# CONFIG_RDATE is not set
578CONFIG_RDEV=y
579CONFIG_READPROFILE=y
580# CONFIG_RTCWAKE is not set
581CONFIG_SCRIPT=y
582CONFIG_SCRIPTREPLAY=y
583# CONFIG_SETARCH is not set
584# CONFIG_SWAPONOFF is not set
585# CONFIG_FEATURE_SWAPON_PRI is not set
586# CONFIG_SWITCH_ROOT is not set
587# CONFIG_UMOUNT is not set
588# CONFIG_FEATURE_UMOUNT_ALL is not set
589# CONFIG_FEATURE_MOUNT_LOOP is not set
590# CONFIG_FEATURE_MOUNT_LOOP_CREATE is not set
591# CONFIG_FEATURE_MTAB_SUPPORT is not set
592# CONFIG_VOLUMEID is not set
593# CONFIG_FEATURE_VOLUMEID_EXT is not set
594# CONFIG_FEATURE_VOLUMEID_BTRFS is not set
595# CONFIG_FEATURE_VOLUMEID_REISERFS is not set
596# CONFIG_FEATURE_VOLUMEID_FAT is not set
597# CONFIG_FEATURE_VOLUMEID_HFS is not set
598# CONFIG_FEATURE_VOLUMEID_JFS is not set
599# CONFIG_FEATURE_VOLUMEID_XFS is not set
600# CONFIG_FEATURE_VOLUMEID_NTFS is not set
601# CONFIG_FEATURE_VOLUMEID_ISO9660 is not set
602# CONFIG_FEATURE_VOLUMEID_UDF is not set
603# CONFIG_FEATURE_VOLUMEID_LUKS is not set
604# CONFIG_FEATURE_VOLUMEID_LINUXSWAP is not set
605# CONFIG_FEATURE_VOLUMEID_CRAMFS is not set
606# CONFIG_FEATURE_VOLUMEID_ROMFS is not set
607# CONFIG_FEATURE_VOLUMEID_SYSV is not set
608# CONFIG_FEATURE_VOLUMEID_OCFS2 is not set
609# CONFIG_FEATURE_VOLUMEID_LINUXRAID is not set
610
611#
612# Miscellaneous Utilities
613#
614# CONFIG_CONSPY is not set
615# CONFIG_NANDWRITE is not set
616# CONFIG_NANDDUMP is not set
617# CONFIG_SETSERIAL is not set
618# CONFIG_UBIATTACH is not set
619# CONFIG_UBIDETACH is not set
620# CONFIG_UBIMKVOL is not set
621# CONFIG_UBIRMVOL is not set
622# CONFIG_UBIRSVOL is not set
623# CONFIG_UBIUPDATEVOL is not set
624# CONFIG_ADJTIMEX is not set
625# CONFIG_BBCONFIG is not set
626# CONFIG_FEATURE_COMPRESS_BBCONFIG is not set
627# CONFIG_BEEP is not set
628CONFIG_FEATURE_BEEP_FREQ=0
629CONFIG_FEATURE_BEEP_LENGTH_MS=0
630CONFIG_CHAT=y
631CONFIG_FEATURE_CHAT_NOFAIL=y
632# CONFIG_FEATURE_CHAT_TTY_HIFI is not set
633CONFIG_FEATURE_CHAT_IMPLICIT_CR=y
634CONFIG_FEATURE_CHAT_SWALLOW_OPTS=y
635CONFIG_FEATURE_CHAT_SEND_ESCAPES=y
636CONFIG_FEATURE_CHAT_VAR_ABORT_LEN=y
637CONFIG_FEATURE_CHAT_CLR_ABORT=y
638CONFIG_CHRT=y
639CONFIG_CROND=y
640CONFIG_FEATURE_CROND_D=y
641CONFIG_FEATURE_CROND_CALL_SENDMAIL=y
642CONFIG_FEATURE_CROND_DIR="/var/spool/cron"
643CONFIG_CRONTAB=y
644CONFIG_DC=y
645CONFIG_FEATURE_DC_LIBM=y
646# CONFIG_DEVFSD is not set
647# CONFIG_DEVFSD_MODLOAD is not set
648# CONFIG_DEVFSD_FG_NP is not set
649# CONFIG_DEVFSD_VERBOSE is not set
650# CONFIG_FEATURE_DEVFS is not set
651CONFIG_DEVMEM=y
652# CONFIG_EJECT is not set
653# CONFIG_FEATURE_EJECT_SCSI is not set
654# CONFIG_FBSPLASH is not set
655# CONFIG_FLASHCP is not set
656# CONFIG_FLASH_LOCK is not set
657# CONFIG_FLASH_UNLOCK is not set
658# CONFIG_FLASH_ERASEALL is not set
659# CONFIG_IONICE is not set
660# CONFIG_INOTIFYD is not set
661# CONFIG_LAST is not set
662# CONFIG_FEATURE_LAST_SMALL is not set
663# CONFIG_FEATURE_LAST_FANCY is not set
664CONFIG_LESS=y
665CONFIG_FEATURE_LESS_MAXLINES=9999999
666CONFIG_FEATURE_LESS_BRACKETS=y
667CONFIG_FEATURE_LESS_FLAGS=y
668CONFIG_FEATURE_LESS_MARKS=y
669CONFIG_FEATURE_LESS_REGEXP=y
670CONFIG_FEATURE_LESS_WINCH=y
671CONFIG_FEATURE_LESS_DASHCMD=y
672CONFIG_FEATURE_LESS_LINENUMS=y
673# CONFIG_HDPARM is not set
674# CONFIG_FEATURE_HDPARM_GET_IDENTITY is not set
675# CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF is not set
676# CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF is not set
677# CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET is not set
678# CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF is not set
679# CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA is not set
680# CONFIG_MAKEDEVS is not set
681# CONFIG_FEATURE_MAKEDEVS_LEAF is not set
682# CONFIG_FEATURE_MAKEDEVS_TABLE is not set
683CONFIG_MAN=y
684# CONFIG_MICROCOM is not set
685# CONFIG_MOUNTPOINT is not set
686CONFIG_MT=y
687# CONFIG_RAIDAUTORUN is not set
688# CONFIG_READAHEAD is not set
689# CONFIG_RFKILL is not set
690# CONFIG_RUNLEVEL is not set
691# CONFIG_RX is not set
692CONFIG_SETSID=y
693CONFIG_STRINGS=y
694# CONFIG_TASKSET is not set
695# CONFIG_FEATURE_TASKSET_FANCY is not set
696CONFIG_TIME=y
697CONFIG_TIMEOUT=y
698CONFIG_TTYSIZE=y
699CONFIG_VOLNAME=y
700# CONFIG_WALL is not set
701# CONFIG_WATCHDOG is not set
702
703#
704# Networking Utilities
705#
706# CONFIG_NAMEIF is not set
707# CONFIG_FEATURE_NAMEIF_EXTENDED is not set
708# CONFIG_NBDCLIENT is not set
709CONFIG_NC=y
710CONFIG_NC_SERVER=y
711CONFIG_NC_EXTRA=y
712# CONFIG_NC_110_COMPAT is not set
713# CONFIG_PING is not set
714# CONFIG_PING6 is not set
715# CONFIG_FEATURE_FANCY_PING is not set
716CONFIG_WHOIS=y
717CONFIG_FEATURE_IPV6=y
718# CONFIG_FEATURE_UNIX_LOCAL is not set
719CONFIG_FEATURE_PREFER_IPV4_ADDRESS=y
720# CONFIG_VERBOSE_RESOLUTION_ERRORS is not set
721# CONFIG_ARP is not set
722# CONFIG_ARPING is not set
723# CONFIG_BRCTL is not set
724# CONFIG_FEATURE_BRCTL_FANCY is not set
725# CONFIG_FEATURE_BRCTL_SHOW is not set
726CONFIG_DNSD=y
727# CONFIG_ETHER_WAKE is not set
728CONFIG_FAKEIDENTD=y
729CONFIG_FTPD=y
730CONFIG_FEATURE_FTP_WRITE=y
731CONFIG_FEATURE_FTPD_ACCEPT_BROKEN_LIST=y
732CONFIG_FTPGET=y
733CONFIG_FTPPUT=y
734CONFIG_FEATURE_FTPGETPUT_LONG_OPTIONS=y
735CONFIG_HOSTNAME=y
736CONFIG_HTTPD=y
737CONFIG_FEATURE_HTTPD_RANGES=y
738# CONFIG_FEATURE_HTTPD_USE_SENDFILE is not set
739CONFIG_FEATURE_HTTPD_SETUID=y
740CONFIG_FEATURE_HTTPD_BASIC_AUTH=y
741CONFIG_FEATURE_HTTPD_AUTH_MD5=y
742CONFIG_FEATURE_HTTPD_CGI=y
743CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR=y
744CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV=y
745CONFIG_FEATURE_HTTPD_ENCODE_URL_STR=y
746CONFIG_FEATURE_HTTPD_ERROR_PAGES=y
747CONFIG_FEATURE_HTTPD_PROXY=y
748CONFIG_FEATURE_HTTPD_GZIP=y
749# CONFIG_IFCONFIG is not set
750# CONFIG_FEATURE_IFCONFIG_STATUS is not set
751# CONFIG_FEATURE_IFCONFIG_SLIP is not set
752# CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ is not set
753# CONFIG_FEATURE_IFCONFIG_HW is not set
754# CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS is not set
755# CONFIG_IFENSLAVE is not set
756# CONFIG_IFPLUGD is not set
757# CONFIG_IFUPDOWN is not set
758CONFIG_IFUPDOWN_IFSTATE_PATH=""
759# CONFIG_FEATURE_IFUPDOWN_IP is not set
760# CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN is not set
761# CONFIG_FEATURE_IFUPDOWN_IFCONFIG_BUILTIN is not set
762# CONFIG_FEATURE_IFUPDOWN_IPV4 is not set
763# CONFIG_FEATURE_IFUPDOWN_IPV6 is not set
764# CONFIG_FEATURE_IFUPDOWN_MAPPING is not set
765# CONFIG_FEATURE_IFUPDOWN_EXTERNAL_DHCP is not set
766CONFIG_INETD=y
767CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO=y
768CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD=y
769CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME=y
770CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME=y
771CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN=y
772# CONFIG_FEATURE_INETD_RPC is not set
773# CONFIG_IP is not set
774# CONFIG_FEATURE_IP_ADDRESS is not set
775# CONFIG_FEATURE_IP_LINK is not set
776# CONFIG_FEATURE_IP_ROUTE is not set
777# CONFIG_FEATURE_IP_TUNNEL is not set
778# CONFIG_FEATURE_IP_RULE is not set
779# CONFIG_FEATURE_IP_SHORT_FORMS is not set
780# CONFIG_FEATURE_IP_RARE_PROTOCOLS is not set
781# CONFIG_IPADDR is not set
782# CONFIG_IPLINK is not set
783# CONFIG_IPROUTE is not set
784# CONFIG_IPTUNNEL is not set
785# CONFIG_IPRULE is not set
786CONFIG_IPCALC=y
787CONFIG_FEATURE_IPCALC_FANCY=y
788CONFIG_FEATURE_IPCALC_LONG_OPTIONS=y
789# CONFIG_NETSTAT is not set
790# CONFIG_FEATURE_NETSTAT_WIDE is not set
791# CONFIG_FEATURE_NETSTAT_PRG is not set
792# CONFIG_NSLOOKUP is not set
793# CONFIG_NTPD is not set
794# CONFIG_FEATURE_NTPD_SERVER is not set
795CONFIG_PSCAN=y
796# CONFIG_ROUTE is not set
797# CONFIG_SLATTACH is not set
798CONFIG_TCPSVD=y
799CONFIG_TELNET=y
800CONFIG_FEATURE_TELNET_TTYPE=y
801CONFIG_FEATURE_TELNET_AUTOLOGIN=y
802CONFIG_TELNETD=y
803CONFIG_FEATURE_TELNETD_STANDALONE=y
804CONFIG_FEATURE_TELNETD_INETD_WAIT=y
805CONFIG_TFTP=y
806CONFIG_TFTPD=y
807
808#
809# Common options for tftp/tftpd
810#
811CONFIG_FEATURE_TFTP_GET=y
812CONFIG_FEATURE_TFTP_PUT=y
813CONFIG_FEATURE_TFTP_BLOCKSIZE=y
814CONFIG_FEATURE_TFTP_PROGRESS_BAR=y
815# CONFIG_TFTP_DEBUG is not set
816# CONFIG_TRACEROUTE is not set
817# CONFIG_TRACEROUTE6 is not set
818# CONFIG_FEATURE_TRACEROUTE_VERBOSE is not set
819# CONFIG_FEATURE_TRACEROUTE_SOURCE_ROUTE is not set
820# CONFIG_FEATURE_TRACEROUTE_USE_ICMP is not set
821# CONFIG_TUNCTL is not set
822# CONFIG_FEATURE_TUNCTL_UG is not set
823# CONFIG_UDHCPD is not set
824# CONFIG_DHCPRELAY is not set
825# CONFIG_DUMPLEASES is not set
826# CONFIG_FEATURE_UDHCPD_WRITE_LEASES_EARLY is not set
827# CONFIG_FEATURE_UDHCPD_BASE_IP_ON_MAC is not set
828CONFIG_DHCPD_LEASES_FILE=""
829# CONFIG_UDHCPC is not set
830# CONFIG_FEATURE_UDHCPC_ARPING is not set
831# CONFIG_FEATURE_UDHCP_PORT is not set
832CONFIG_UDHCP_DEBUG=0
833# CONFIG_FEATURE_UDHCP_RFC3397 is not set
834# CONFIG_FEATURE_UDHCP_8021Q is not set
835CONFIG_UDHCPC_DEFAULT_SCRIPT=""
836CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS=0
837CONFIG_IFUPDOWN_UDHCPC_CMD_OPTIONS=""
838CONFIG_UDPSVD=y
839# CONFIG_VCONFIG is not set
840CONFIG_WGET=y
841CONFIG_FEATURE_WGET_STATUSBAR=y
842CONFIG_FEATURE_WGET_AUTHENTICATION=y
843CONFIG_FEATURE_WGET_LONG_OPTIONS=y
844CONFIG_FEATURE_WGET_TIMEOUT=y
845# CONFIG_ZCIP is not set
846
847#
848# Print Utilities
849#
850CONFIG_LPD=y
851CONFIG_LPR=y
852CONFIG_LPQ=y
853
854#
855# Mail Utilities
856#
857CONFIG_MAKEMIME=y
858CONFIG_FEATURE_MIME_CHARSET="us-ascii"
859CONFIG_POPMAILDIR=y
860CONFIG_FEATURE_POPMAILDIR_DELIVERY=y
861CONFIG_REFORMIME=y
862CONFIG_FEATURE_REFORMIME_COMPAT=y
863CONFIG_SENDMAIL=y
864
865#
866# Process Utilities
867#
868CONFIG_IOSTAT=y
869CONFIG_MPSTAT=y
870CONFIG_NMETER=y
871# CONFIG_PMAP is not set
872# CONFIG_POWERTOP is not set
873CONFIG_PSTREE=y
874CONFIG_PWDX=y
875CONFIG_SMEMCAP=y
876# CONFIG_FREE is not set
877CONFIG_FUSER=y
878CONFIG_KILL=y
879CONFIG_KILLALL=y
880CONFIG_KILLALL5=y
881CONFIG_PGREP=y
882CONFIG_PIDOF=y
883CONFIG_FEATURE_PIDOF_SINGLE=y
884CONFIG_FEATURE_PIDOF_OMIT=y
885CONFIG_PKILL=y
886CONFIG_PS=y
887CONFIG_FEATURE_PS_WIDE=y
888# CONFIG_FEATURE_PS_TIME is not set
889CONFIG_FEATURE_PS_ADDITIONAL_COLUMNS=y
890# CONFIG_FEATURE_PS_UNUSUAL_SYSTEMS is not set
891CONFIG_RENICE=y
892CONFIG_BB_SYSCTL=y
893CONFIG_TOP=y
894CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE=y
895CONFIG_FEATURE_TOP_CPU_GLOBAL_PERCENTS=y
896CONFIG_FEATURE_TOP_SMP_CPU=y
897CONFIG_FEATURE_TOP_DECIMALS=y
898CONFIG_FEATURE_TOP_SMP_PROCESS=y
899CONFIG_FEATURE_TOPMEM=y
900# CONFIG_FEATURE_SHOW_THREADS is not set
901# CONFIG_UPTIME is not set
902CONFIG_WATCH=y
903
904#
905# Runit Utilities
906#
907CONFIG_RUNSV=y
908CONFIG_RUNSVDIR=y
909# CONFIG_FEATURE_RUNSVDIR_LOG is not set
910CONFIG_SV=y
911CONFIG_SV_DEFAULT_SERVICE_DIR="/var/service"
912CONFIG_SVLOGD=y
913CONFIG_CHPST=y
914CONFIG_SETUIDGID=y
915CONFIG_ENVUIDGID=y
916CONFIG_ENVDIR=y
917CONFIG_SOFTLIMIT=y
918# CONFIG_CHCON is not set
919# CONFIG_FEATURE_CHCON_LONG_OPTIONS is not set
920# CONFIG_GETENFORCE is not set
921# CONFIG_GETSEBOOL is not set
922# CONFIG_LOAD_POLICY is not set
923# CONFIG_MATCHPATHCON is not set
924# CONFIG_RESTORECON is not set
925# CONFIG_RUNCON is not set
926# CONFIG_FEATURE_RUNCON_LONG_OPTIONS is not set
927# CONFIG_SELINUXENABLED is not set
928# CONFIG_SETENFORCE is not set
929# CONFIG_SETFILES is not set
930# CONFIG_FEATURE_SETFILES_CHECK_OPTION is not set
931# CONFIG_SETSEBOOL is not set
932# CONFIG_SESTATUS is not set
933
934#
935# Shells
936#
937CONFIG_ASH=y
938CONFIG_ASH_BASH_COMPAT=y
939# CONFIG_ASH_IDLE_TIMEOUT is not set
940CONFIG_ASH_JOB_CONTROL=y
941CONFIG_ASH_ALIAS=y
942CONFIG_ASH_GETOPTS=y
943CONFIG_ASH_BUILTIN_ECHO=y
944CONFIG_ASH_BUILTIN_PRINTF=y
945CONFIG_ASH_BUILTIN_TEST=y
946CONFIG_ASH_CMDCMD=y
947# CONFIG_ASH_MAIL is not set
948CONFIG_ASH_OPTIMIZE_FOR_SIZE=y
949CONFIG_ASH_RANDOM_SUPPORT=y
950CONFIG_ASH_EXPAND_PRMT=y
951# CONFIG_CTTYHACK is not set
952CONFIG_HUSH=y
953CONFIG_HUSH_BASH_COMPAT=y
954CONFIG_HUSH_BRACE_EXPANSION=y
955CONFIG_HUSH_HELP=y
956CONFIG_HUSH_INTERACTIVE=y
957CONFIG_HUSH_SAVEHISTORY=y
958CONFIG_HUSH_JOB=y
959CONFIG_HUSH_TICK=y
960CONFIG_HUSH_IF=y
961CONFIG_HUSH_LOOPS=y
962CONFIG_HUSH_CASE=y
963CONFIG_HUSH_FUNCTIONS=y
964CONFIG_HUSH_LOCAL=y
965CONFIG_HUSH_RANDOM_SUPPORT=y
966CONFIG_HUSH_EXPORT_N=y
967CONFIG_HUSH_MODE_X=y
968# CONFIG_MSH is not set
969CONFIG_FEATURE_SH_IS_ASH=y
970# CONFIG_FEATURE_SH_IS_HUSH is not set
971# CONFIG_FEATURE_SH_IS_NONE is not set
972# CONFIG_FEATURE_BASH_IS_ASH is not set
973# CONFIG_FEATURE_BASH_IS_HUSH is not set
974CONFIG_FEATURE_BASH_IS_NONE=y
975CONFIG_SH_MATH_SUPPORT=y
976CONFIG_SH_MATH_SUPPORT_64=y
977CONFIG_FEATURE_SH_EXTRA_QUIET=y
978# CONFIG_FEATURE_SH_STANDALONE is not set
979# CONFIG_FEATURE_SH_NOFORK is not set
980CONFIG_FEATURE_SH_HISTFILESIZE=y
981
982#
983# System Logging Utilities
984#
985CONFIG_SYSLOGD=y
986CONFIG_FEATURE_ROTATE_LOGFILE=y
987CONFIG_FEATURE_REMOTE_LOG=y
988CONFIG_FEATURE_SYSLOGD_DUP=y
989CONFIG_FEATURE_SYSLOGD_CFG=y
990CONFIG_FEATURE_SYSLOGD_READ_BUFFER_SIZE=256
991CONFIG_FEATURE_IPC_SYSLOG=y
992CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=16
993CONFIG_LOGREAD=y
994CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING=y
995# CONFIG_KLOGD is not set
996# CONFIG_FEATURE_KLOGD_KLOGCTL is not set
997CONFIG_LOGGER=y
diff --git a/configs/freebsd_defconfig b/configs/freebsd_defconfig
new file mode 100644
index 000000000..5f2985be1
--- /dev/null
+++ b/configs/freebsd_defconfig
@@ -0,0 +1,970 @@
1#
2# Automatically generated make config: don't edit
3# Busybox version: 1.18.1
4# Tue Dec 21 19:47:40 2010
5#
6CONFIG_HAVE_DOT_CONFIG=y
7
8#
9# Busybox Settings
10#
11
12#
13# General Configuration
14#
15# CONFIG_DESKTOP is not set
16# CONFIG_EXTRA_COMPAT is not set
17CONFIG_INCLUDE_SUSv2=y
18CONFIG_USE_PORTABLE_CODE=y
19# CONFIG_PLATFORM_LINUX is not set
20CONFIG_FEATURE_BUFFERS_USE_MALLOC=y
21# CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set
22# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set
23CONFIG_SHOW_USAGE=y
24CONFIG_FEATURE_VERBOSE_USAGE=y
25CONFIG_FEATURE_COMPRESS_USAGE=y
26CONFIG_FEATURE_INSTALLER=y
27# CONFIG_INSTALL_NO_USR is not set
28CONFIG_LOCALE_SUPPORT=y
29CONFIG_UNICODE_SUPPORT=y
30# CONFIG_UNICODE_USING_LOCALE is not set
31# CONFIG_FEATURE_CHECK_UNICODE_IN_ENV is not set
32CONFIG_SUBST_WCHAR=63
33CONFIG_LAST_SUPPORTED_WCHAR=767
34# CONFIG_UNICODE_COMBINING_WCHARS is not set
35# CONFIG_UNICODE_WIDE_WCHARS is not set
36# CONFIG_UNICODE_BIDI_SUPPORT is not set
37# CONFIG_UNICODE_NEUTRAL_TABLE is not set
38# CONFIG_UNICODE_PRESERVE_BROKEN is not set
39CONFIG_LONG_OPTS=y
40CONFIG_FEATURE_DEVPTS=y
41# CONFIG_FEATURE_CLEAN_UP is not set
42# CONFIG_FEATURE_WTMP is not set
43# CONFIG_FEATURE_UTMP is not set
44CONFIG_FEATURE_PIDFILE=y
45CONFIG_FEATURE_SUID=y
46CONFIG_FEATURE_SUID_CONFIG=y
47CONFIG_FEATURE_SUID_CONFIG_QUIET=y
48# CONFIG_SELINUX is not set
49# CONFIG_FEATURE_PREFER_APPLETS is not set
50CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe"
51CONFIG_FEATURE_SYSLOG=y
52# CONFIG_FEATURE_HAVE_RPC is not set
53
54#
55# Build Options
56#
57# CONFIG_STATIC is not set
58# CONFIG_PIE is not set
59# CONFIG_NOMMU is not set
60# CONFIG_BUILD_LIBBUSYBOX is not set
61# CONFIG_FEATURE_INDIVIDUAL is not set
62# CONFIG_FEATURE_SHARED_BUSYBOX is not set
63CONFIG_LFS=y
64CONFIG_CROSS_COMPILER_PREFIX=""
65CONFIG_EXTRA_CFLAGS=""
66
67#
68# Debugging Options
69#
70# CONFIG_DEBUG is not set
71# CONFIG_DEBUG_PESSIMIZE is not set
72# CONFIG_WERROR is not set
73CONFIG_NO_DEBUG_LIB=y
74# CONFIG_DMALLOC is not set
75# CONFIG_EFENCE is not set
76
77#
78# Installation Options ("make install" behavior)
79#
80CONFIG_INSTALL_APPLET_SYMLINKS=y
81# CONFIG_INSTALL_APPLET_HARDLINKS is not set
82# CONFIG_INSTALL_APPLET_SCRIPT_WRAPPERS is not set
83# CONFIG_INSTALL_APPLET_DONT is not set
84# CONFIG_INSTALL_SH_APPLET_SYMLINK is not set
85# CONFIG_INSTALL_SH_APPLET_HARDLINK is not set
86# CONFIG_INSTALL_SH_APPLET_SCRIPT_WRAPPER is not set
87CONFIG_PREFIX="./_install"
88
89#
90# Busybox Library Tuning
91#
92CONFIG_PASSWORD_MINLEN=6
93CONFIG_MD5_SIZE_VS_SPEED=2
94CONFIG_FEATURE_FAST_TOP=y
95# CONFIG_FEATURE_ETC_NETWORKS is not set
96CONFIG_FEATURE_USE_TERMIOS=y
97CONFIG_FEATURE_EDITING=y
98CONFIG_FEATURE_EDITING_MAX_LEN=1024
99# CONFIG_FEATURE_EDITING_VI is not set
100CONFIG_FEATURE_EDITING_HISTORY=30
101# CONFIG_FEATURE_EDITING_SAVEHISTORY is not set
102CONFIG_FEATURE_TAB_COMPLETION=y
103# CONFIG_FEATURE_USERNAME_COMPLETION is not set
104# CONFIG_FEATURE_EDITING_FANCY_PROMPT is not set
105# CONFIG_FEATURE_EDITING_ASK_TERMINAL is not set
106CONFIG_FEATURE_NON_POSIX_CP=y
107# CONFIG_FEATURE_VERBOSE_CP_MESSAGE is not set
108CONFIG_FEATURE_COPYBUF_KB=4
109# CONFIG_MONOTONIC_SYSCALL is not set
110CONFIG_IOCTL_HEX2STR_ERROR=y
111CONFIG_FEATURE_HWIB=y
112
113#
114# Applets
115#
116
117#
118# Archival Utilities
119#
120CONFIG_FEATURE_SEAMLESS_XZ=y
121CONFIG_FEATURE_SEAMLESS_LZMA=y
122CONFIG_FEATURE_SEAMLESS_BZ2=y
123CONFIG_FEATURE_SEAMLESS_GZ=y
124CONFIG_FEATURE_SEAMLESS_Z=y
125CONFIG_AR=y
126CONFIG_FEATURE_AR_LONG_FILENAMES=y
127CONFIG_FEATURE_AR_CREATE=y
128CONFIG_BUNZIP2=y
129CONFIG_BZIP2=y
130CONFIG_CPIO=y
131# CONFIG_FEATURE_CPIO_O is not set
132# CONFIG_FEATURE_CPIO_P is not set
133# CONFIG_DPKG is not set
134# CONFIG_DPKG_DEB is not set
135# CONFIG_FEATURE_DPKG_DEB_EXTRACT_ONLY is not set
136CONFIG_GUNZIP=y
137CONFIG_GZIP=y
138CONFIG_FEATURE_GZIP_LONG_OPTIONS=y
139CONFIG_LZOP=y
140# CONFIG_LZOP_COMPR_HIGH is not set
141CONFIG_RPM2CPIO=y
142CONFIG_RPM=y
143CONFIG_TAR=y
144CONFIG_FEATURE_TAR_CREATE=y
145CONFIG_FEATURE_TAR_AUTODETECT=y
146CONFIG_FEATURE_TAR_FROM=y
147CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY=y
148CONFIG_FEATURE_TAR_OLDSUN_COMPATIBILITY=y
149CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y
150CONFIG_FEATURE_TAR_LONG_OPTIONS=y
151CONFIG_FEATURE_TAR_TO_COMMAND=y
152# CONFIG_FEATURE_TAR_UNAME_GNAME is not set
153CONFIG_FEATURE_TAR_NOPRESERVE_TIME=y
154# CONFIG_FEATURE_TAR_SELINUX is not set
155CONFIG_UNCOMPRESS=y
156CONFIG_UNLZMA=y
157CONFIG_FEATURE_LZMA_FAST=y
158CONFIG_LZMA=y
159CONFIG_UNXZ=y
160CONFIG_XZ=y
161CONFIG_UNZIP=y
162
163#
164# Coreutils
165#
166CONFIG_BASENAME=y
167CONFIG_CAT=y
168# CONFIG_DATE is not set
169# CONFIG_FEATURE_DATE_ISOFMT is not set
170# CONFIG_FEATURE_DATE_NANO is not set
171# CONFIG_FEATURE_DATE_COMPAT is not set
172CONFIG_TEST=y
173CONFIG_FEATURE_TEST_64=y
174CONFIG_TR=y
175CONFIG_FEATURE_TR_CLASSES=y
176CONFIG_FEATURE_TR_EQUIV=y
177# CONFIG_BASE64 is not set
178CONFIG_CAL=y
179CONFIG_CATV=y
180CONFIG_CHGRP=y
181CONFIG_CHMOD=y
182CONFIG_CHOWN=y
183CONFIG_FEATURE_CHOWN_LONG_OPTIONS=y
184CONFIG_CHROOT=y
185CONFIG_CKSUM=y
186CONFIG_COMM=y
187CONFIG_CP=y
188CONFIG_FEATURE_CP_LONG_OPTIONS=y
189CONFIG_CUT=y
190CONFIG_DD=y
191CONFIG_FEATURE_DD_SIGNAL_HANDLING=y
192CONFIG_FEATURE_DD_THIRD_STATUS_LINE=y
193CONFIG_FEATURE_DD_IBS_OBS=y
194# CONFIG_DF is not set
195# CONFIG_FEATURE_DF_FANCY is not set
196CONFIG_DIRNAME=y
197CONFIG_DOS2UNIX=y
198CONFIG_UNIX2DOS=y
199CONFIG_DU=y
200CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K=y
201CONFIG_ECHO=y
202CONFIG_FEATURE_FANCY_ECHO=y
203CONFIG_ENV=y
204CONFIG_FEATURE_ENV_LONG_OPTIONS=y
205CONFIG_EXPAND=y
206CONFIG_FEATURE_EXPAND_LONG_OPTIONS=y
207CONFIG_EXPR=y
208CONFIG_EXPR_MATH_SUPPORT_64=y
209CONFIG_FALSE=y
210CONFIG_FOLD=y
211CONFIG_FSYNC=y
212CONFIG_HEAD=y
213CONFIG_FEATURE_FANCY_HEAD=y
214CONFIG_HOSTID=y
215CONFIG_ID=y
216CONFIG_INSTALL=y
217CONFIG_FEATURE_INSTALL_LONG_OPTIONS=y
218CONFIG_LENGTH=y
219CONFIG_LN=y
220CONFIG_LOGNAME=y
221CONFIG_LS=y
222CONFIG_FEATURE_LS_FILETYPES=y
223CONFIG_FEATURE_LS_FOLLOWLINKS=y
224CONFIG_FEATURE_LS_RECURSIVE=y
225CONFIG_FEATURE_LS_SORTFILES=y
226CONFIG_FEATURE_LS_TIMESTAMPS=y
227CONFIG_FEATURE_LS_USERNAME=y
228CONFIG_FEATURE_LS_COLOR=y
229CONFIG_FEATURE_LS_COLOR_IS_DEFAULT=y
230CONFIG_MD5SUM=y
231CONFIG_MKDIR=y
232CONFIG_FEATURE_MKDIR_LONG_OPTIONS=y
233CONFIG_MKFIFO=y
234# CONFIG_MKNOD is not set
235CONFIG_MV=y
236CONFIG_FEATURE_MV_LONG_OPTIONS=y
237CONFIG_NICE=y
238CONFIG_NOHUP=y
239CONFIG_OD=y
240CONFIG_PRINTENV=y
241CONFIG_PRINTF=y
242CONFIG_PWD=y
243CONFIG_READLINK=y
244CONFIG_FEATURE_READLINK_FOLLOW=y
245CONFIG_REALPATH=y
246CONFIG_RM=y
247CONFIG_RMDIR=y
248# CONFIG_FEATURE_RMDIR_LONG_OPTIONS is not set
249CONFIG_SEQ=y
250CONFIG_SHA1SUM=y
251CONFIG_SHA256SUM=y
252CONFIG_SHA512SUM=y
253CONFIG_SLEEP=y
254CONFIG_FEATURE_FANCY_SLEEP=y
255CONFIG_FEATURE_FLOAT_SLEEP=y
256CONFIG_SORT=y
257CONFIG_FEATURE_SORT_BIG=y
258CONFIG_SPLIT=y
259CONFIG_FEATURE_SPLIT_FANCY=y
260# CONFIG_STAT is not set
261# CONFIG_FEATURE_STAT_FORMAT is not set
262# CONFIG_STTY is not set
263CONFIG_SUM=y
264CONFIG_SYNC=y
265# CONFIG_TAC is not set
266CONFIG_TAIL=y
267CONFIG_FEATURE_FANCY_TAIL=y
268CONFIG_TEE=y
269CONFIG_FEATURE_TEE_USE_BLOCK_IO=y
270CONFIG_TOUCH=y
271CONFIG_TRUE=y
272CONFIG_TTY=y
273CONFIG_UNAME=y
274CONFIG_UNEXPAND=y
275CONFIG_FEATURE_UNEXPAND_LONG_OPTIONS=y
276CONFIG_UNIQ=y
277CONFIG_USLEEP=y
278CONFIG_UUDECODE=y
279CONFIG_UUENCODE=y
280CONFIG_WC=y
281CONFIG_FEATURE_WC_LARGE=y
282# CONFIG_WHO is not set
283CONFIG_WHOAMI=y
284CONFIG_YES=y
285
286#
287# Common options for cp and mv
288#
289CONFIG_FEATURE_PRESERVE_HARDLINKS=y
290
291#
292# Common options for ls, more and telnet
293#
294CONFIG_FEATURE_AUTOWIDTH=y
295
296#
297# Common options for df, du, ls
298#
299CONFIG_FEATURE_HUMAN_READABLE=y
300
301#
302# Common options for md5sum, sha1sum, sha256sum, sha512sum
303#
304CONFIG_FEATURE_MD5_SHA1_SUM_CHECK=y
305
306#
307# Console Utilities
308#
309# CONFIG_CHVT is not set
310# CONFIG_FGCONSOLE is not set
311CONFIG_CLEAR=y
312# CONFIG_DEALLOCVT is not set
313# CONFIG_DUMPKMAP is not set
314# CONFIG_KBD_MODE is not set
315# CONFIG_LOADFONT is not set
316# CONFIG_LOADKMAP is not set
317# CONFIG_OPENVT is not set
318CONFIG_RESET=y
319CONFIG_RESIZE=y
320CONFIG_FEATURE_RESIZE_PRINT=y
321# CONFIG_SETCONSOLE is not set
322# CONFIG_FEATURE_SETCONSOLE_LONG_OPTIONS is not set
323# CONFIG_SETFONT is not set
324# CONFIG_FEATURE_SETFONT_TEXTUAL_MAP is not set
325CONFIG_DEFAULT_SETFONT_DIR=""
326# CONFIG_SETKEYCODES is not set
327# CONFIG_SETLOGCONS is not set
328# CONFIG_SHOWKEY is not set
329# CONFIG_FEATURE_LOADFONT_PSF2 is not set
330# CONFIG_FEATURE_LOADFONT_RAW is not set
331
332#
333# Debian Utilities
334#
335CONFIG_MKTEMP=y
336CONFIG_PIPE_PROGRESS=y
337CONFIG_RUN_PARTS=y
338CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS=y
339CONFIG_FEATURE_RUN_PARTS_FANCY=y
340# CONFIG_START_STOP_DAEMON is not set
341# CONFIG_FEATURE_START_STOP_DAEMON_FANCY is not set
342# CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS is not set
343CONFIG_WHICH=y
344
345#
346# Editors
347#
348CONFIG_PATCH=y
349CONFIG_AWK=y
350CONFIG_FEATURE_AWK_LIBM=y
351CONFIG_CMP=y
352CONFIG_DIFF=y
353CONFIG_FEATURE_DIFF_LONG_OPTIONS=y
354CONFIG_FEATURE_DIFF_DIR=y
355CONFIG_ED=y
356CONFIG_SED=y
357CONFIG_VI=y
358CONFIG_FEATURE_VI_MAX_LEN=1024
359CONFIG_FEATURE_VI_8BIT=y
360CONFIG_FEATURE_VI_COLON=y
361CONFIG_FEATURE_VI_YANKMARK=y
362CONFIG_FEATURE_VI_SEARCH=y
363CONFIG_FEATURE_VI_USE_SIGNALS=y
364CONFIG_FEATURE_VI_DOT_CMD=y
365CONFIG_FEATURE_VI_READONLY=y
366CONFIG_FEATURE_VI_SETOPTS=y
367CONFIG_FEATURE_VI_SET=y
368CONFIG_FEATURE_VI_WIN_RESIZE=y
369CONFIG_FEATURE_VI_ASK_TERMINAL=y
370CONFIG_FEATURE_VI_OPTIMIZE_CURSOR=y
371CONFIG_FEATURE_ALLOW_EXEC=y
372
373#
374# Finding Utilities
375#
376CONFIG_FIND=y
377CONFIG_FEATURE_FIND_PRINT0=y
378CONFIG_FEATURE_FIND_MTIME=y
379CONFIG_FEATURE_FIND_MMIN=y
380CONFIG_FEATURE_FIND_PERM=y
381CONFIG_FEATURE_FIND_TYPE=y
382CONFIG_FEATURE_FIND_XDEV=y
383CONFIG_FEATURE_FIND_MAXDEPTH=y
384CONFIG_FEATURE_FIND_NEWER=y
385CONFIG_FEATURE_FIND_INUM=y
386CONFIG_FEATURE_FIND_EXEC=y
387CONFIG_FEATURE_FIND_USER=y
388CONFIG_FEATURE_FIND_GROUP=y
389CONFIG_FEATURE_FIND_NOT=y
390CONFIG_FEATURE_FIND_DEPTH=y
391CONFIG_FEATURE_FIND_PAREN=y
392CONFIG_FEATURE_FIND_SIZE=y
393CONFIG_FEATURE_FIND_PRUNE=y
394CONFIG_FEATURE_FIND_DELETE=y
395CONFIG_FEATURE_FIND_PATH=y
396CONFIG_FEATURE_FIND_REGEX=y
397# CONFIG_FEATURE_FIND_CONTEXT is not set
398CONFIG_FEATURE_FIND_LINKS=y
399CONFIG_GREP=y
400CONFIG_FEATURE_GREP_EGREP_ALIAS=y
401CONFIG_FEATURE_GREP_FGREP_ALIAS=y
402CONFIG_FEATURE_GREP_CONTEXT=y
403CONFIG_XARGS=y
404CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION=y
405CONFIG_FEATURE_XARGS_SUPPORT_QUOTES=y
406CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT=y
407CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM=y
408
409#
410# Init Utilities
411#
412# CONFIG_BOOTCHARTD is not set
413# CONFIG_FEATURE_BOOTCHARTD_BLOATED_HEADER is not set
414# CONFIG_FEATURE_BOOTCHARTD_CONFIG_FILE is not set
415# CONFIG_HALT is not set
416# CONFIG_FEATURE_CALL_TELINIT is not set
417CONFIG_TELINIT_PATH=""
418# CONFIG_INIT is not set
419# CONFIG_FEATURE_USE_INITTAB is not set
420# CONFIG_FEATURE_KILL_REMOVED is not set
421CONFIG_FEATURE_KILL_DELAY=0
422# CONFIG_FEATURE_INIT_SCTTY is not set
423# CONFIG_FEATURE_INIT_SYSLOG is not set
424# CONFIG_FEATURE_EXTRA_QUIET is not set
425# CONFIG_FEATURE_INIT_COREDUMPS is not set
426# CONFIG_FEATURE_INITRD is not set
427CONFIG_INIT_TERMINAL_TYPE=""
428# CONFIG_MESG is not set
429
430#
431# Login/Password Management Utilities
432#
433# CONFIG_ADD_SHELL is not set
434# CONFIG_REMOVE_SHELL is not set
435# CONFIG_FEATURE_SHADOWPASSWDS is not set
436CONFIG_USE_BB_PWD_GRP=y
437# CONFIG_USE_BB_SHADOW is not set
438# CONFIG_USE_BB_CRYPT is not set
439# CONFIG_USE_BB_CRYPT_SHA is not set
440# CONFIG_ADDUSER is not set
441# CONFIG_FEATURE_ADDUSER_LONG_OPTIONS is not set
442# CONFIG_FEATURE_CHECK_NAMES is not set
443CONFIG_FIRST_SYSTEM_ID=100
444CONFIG_LAST_SYSTEM_ID=999
445CONFIG_ADDGROUP=y
446CONFIG_FEATURE_ADDGROUP_LONG_OPTIONS=y
447CONFIG_FEATURE_ADDUSER_TO_GROUP=y
448# CONFIG_DELUSER is not set
449CONFIG_DELGROUP=y
450CONFIG_FEATURE_DEL_USER_FROM_GROUP=y
451# CONFIG_GETTY is not set
452# CONFIG_LOGIN is not set
453# CONFIG_PAM is not set
454# CONFIG_LOGIN_SCRIPTS is not set
455# CONFIG_FEATURE_NOLOGIN is not set
456# CONFIG_FEATURE_SECURETTY is not set
457# CONFIG_PASSWD is not set
458# CONFIG_FEATURE_PASSWD_WEAK_CHECK is not set
459# CONFIG_CRYPTPW is not set
460# CONFIG_CHPASSWD is not set
461# CONFIG_SU is not set
462# CONFIG_FEATURE_SU_SYSLOG is not set
463# CONFIG_FEATURE_SU_CHECKS_SHELLS is not set
464# CONFIG_SULOGIN is not set
465# CONFIG_VLOCK is not set
466
467#
468# Linux Ext2 FS Progs
469#
470CONFIG_CHATTR=y
471# CONFIG_FSCK is not set
472# CONFIG_LSATTR is not set
473# CONFIG_TUNE2FS is not set
474# CONFIG_MODINFO is not set
475# CONFIG_MODPROBE_SMALL is not set
476# CONFIG_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE is not set
477# CONFIG_FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED is not set
478# CONFIG_INSMOD is not set
479# CONFIG_RMMOD is not set
480# CONFIG_LSMOD is not set
481# CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT is not set
482# CONFIG_MODPROBE is not set
483# CONFIG_FEATURE_MODPROBE_BLACKLIST is not set
484# CONFIG_DEPMOD is not set
485# CONFIG_FEATURE_2_4_MODULES is not set
486# CONFIG_FEATURE_INSMOD_TRY_MMAP is not set
487# CONFIG_FEATURE_INSMOD_VERSION_CHECKING is not set
488# CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS is not set
489# CONFIG_FEATURE_INSMOD_LOADINKMEM is not set
490# CONFIG_FEATURE_INSMOD_LOAD_MAP is not set
491# CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL is not set
492# CONFIG_FEATURE_CHECK_TAINTED_MODULE is not set
493# CONFIG_FEATURE_MODUTILS_ALIAS is not set
494# CONFIG_FEATURE_MODUTILS_SYMBOLS is not set
495CONFIG_DEFAULT_MODULES_DIR=""
496CONFIG_DEFAULT_DEPMOD_FILE=""
497
498#
499# Linux System Utilities
500#
501# CONFIG_BLOCKDEV is not set
502CONFIG_REV=y
503# CONFIG_ACPID is not set
504# CONFIG_FEATURE_ACPID_COMPAT is not set
505# CONFIG_BLKID is not set
506# CONFIG_DMESG is not set
507# CONFIG_FEATURE_DMESG_PRETTY is not set
508# CONFIG_FBSET is not set
509# CONFIG_FEATURE_FBSET_FANCY is not set
510# CONFIG_FEATURE_FBSET_READMODE is not set
511# CONFIG_FDFLUSH is not set
512# CONFIG_FDFORMAT is not set
513# CONFIG_FDISK is not set
514CONFIG_FDISK_SUPPORT_LARGE_DISKS=y
515# CONFIG_FEATURE_FDISK_WRITABLE is not set
516# CONFIG_FEATURE_AIX_LABEL is not set
517# CONFIG_FEATURE_SGI_LABEL is not set
518# CONFIG_FEATURE_SUN_LABEL is not set
519# CONFIG_FEATURE_OSF_LABEL is not set
520# CONFIG_FEATURE_GPT_LABEL is not set
521# CONFIG_FEATURE_FDISK_ADVANCED is not set
522# CONFIG_FINDFS is not set
523CONFIG_FLOCK=y
524# CONFIG_FREERAMDISK is not set
525# CONFIG_FSCK_MINIX is not set
526# CONFIG_MKFS_EXT2 is not set
527# CONFIG_MKFS_MINIX is not set
528# CONFIG_FEATURE_MINIX2 is not set
529# CONFIG_MKFS_REISER is not set
530# CONFIG_MKFS_VFAT is not set
531CONFIG_GETOPT=y
532CONFIG_FEATURE_GETOPT_LONG=y
533CONFIG_HEXDUMP=y
534# CONFIG_FEATURE_HEXDUMP_REVERSE is not set
535CONFIG_HD=y
536# CONFIG_HWCLOCK is not set
537# CONFIG_FEATURE_HWCLOCK_LONG_OPTIONS is not set
538# CONFIG_FEATURE_HWCLOCK_ADJTIME_FHS is not set
539# CONFIG_IPCRM is not set
540# CONFIG_IPCS is not set
541# CONFIG_LOSETUP is not set
542CONFIG_LSPCI=y
543CONFIG_LSUSB=y
544# CONFIG_MDEV is not set
545# CONFIG_FEATURE_MDEV_CONF is not set
546# CONFIG_FEATURE_MDEV_RENAME is not set
547# CONFIG_FEATURE_MDEV_RENAME_REGEXP is not set
548# CONFIG_FEATURE_MDEV_EXEC is not set
549# CONFIG_FEATURE_MDEV_LOAD_FIRMWARE is not set
550# CONFIG_MKSWAP is not set
551# CONFIG_FEATURE_MKSWAP_UUID is not set
552CONFIG_MORE=y
553# CONFIG_MOUNT is not set
554# CONFIG_FEATURE_MOUNT_FAKE is not set
555# CONFIG_FEATURE_MOUNT_VERBOSE is not set
556# CONFIG_FEATURE_MOUNT_HELPERS is not set
557# CONFIG_FEATURE_MOUNT_LABEL is not set
558# CONFIG_FEATURE_MOUNT_NFS is not set
559# CONFIG_FEATURE_MOUNT_CIFS is not set
560# CONFIG_FEATURE_MOUNT_FLAGS is not set
561# CONFIG_FEATURE_MOUNT_FSTAB is not set
562# CONFIG_PIVOT_ROOT is not set
563# CONFIG_RDATE is not set
564# CONFIG_RDEV is not set
565CONFIG_READPROFILE=y
566# CONFIG_RTCWAKE is not set
567# CONFIG_SCRIPT is not set
568CONFIG_SCRIPTREPLAY=y
569# CONFIG_SETARCH is not set
570# CONFIG_SWAPONOFF is not set
571# CONFIG_FEATURE_SWAPON_PRI is not set
572# CONFIG_SWITCH_ROOT is not set
573# CONFIG_UMOUNT is not set
574# CONFIG_FEATURE_UMOUNT_ALL is not set
575# CONFIG_FEATURE_MOUNT_LOOP is not set
576# CONFIG_FEATURE_MOUNT_LOOP_CREATE is not set
577# CONFIG_FEATURE_MTAB_SUPPORT is not set
578# CONFIG_VOLUMEID is not set
579# CONFIG_FEATURE_VOLUMEID_EXT is not set
580# CONFIG_FEATURE_VOLUMEID_BTRFS is not set
581# CONFIG_FEATURE_VOLUMEID_REISERFS is not set
582# CONFIG_FEATURE_VOLUMEID_FAT is not set
583# CONFIG_FEATURE_VOLUMEID_HFS is not set
584# CONFIG_FEATURE_VOLUMEID_JFS is not set
585# CONFIG_FEATURE_VOLUMEID_XFS is not set
586# CONFIG_FEATURE_VOLUMEID_NTFS is not set
587# CONFIG_FEATURE_VOLUMEID_ISO9660 is not set
588# CONFIG_FEATURE_VOLUMEID_UDF is not set
589# CONFIG_FEATURE_VOLUMEID_LUKS is not set
590# CONFIG_FEATURE_VOLUMEID_LINUXSWAP is not set
591# CONFIG_FEATURE_VOLUMEID_CRAMFS is not set
592# CONFIG_FEATURE_VOLUMEID_ROMFS is not set
593# CONFIG_FEATURE_VOLUMEID_SYSV is not set
594# CONFIG_FEATURE_VOLUMEID_OCFS2 is not set
595# CONFIG_FEATURE_VOLUMEID_LINUXRAID is not set
596
597#
598# Miscellaneous Utilities
599#
600# CONFIG_CONSPY is not set
601# CONFIG_NANDWRITE is not set
602# CONFIG_NANDDUMP is not set
603# CONFIG_UBIATTACH is not set
604# CONFIG_UBIDETACH is not set
605# CONFIG_ADJTIMEX is not set
606# CONFIG_BBCONFIG is not set
607# CONFIG_FEATURE_COMPRESS_BBCONFIG is not set
608# CONFIG_BEEP is not set
609CONFIG_FEATURE_BEEP_FREQ=0
610CONFIG_FEATURE_BEEP_LENGTH_MS=0
611# CONFIG_CHAT is not set
612# CONFIG_FEATURE_CHAT_NOFAIL is not set
613# CONFIG_FEATURE_CHAT_TTY_HIFI is not set
614# CONFIG_FEATURE_CHAT_IMPLICIT_CR is not set
615# CONFIG_FEATURE_CHAT_SWALLOW_OPTS is not set
616# CONFIG_FEATURE_CHAT_SEND_ESCAPES is not set
617# CONFIG_FEATURE_CHAT_VAR_ABORT_LEN is not set
618# CONFIG_FEATURE_CHAT_CLR_ABORT is not set
619CONFIG_CHRT=y
620# CONFIG_CROND is not set
621# CONFIG_FEATURE_CROND_D is not set
622# CONFIG_FEATURE_CROND_CALL_SENDMAIL is not set
623CONFIG_FEATURE_CROND_DIR="/var/spool/cron"
624CONFIG_CRONTAB=y
625CONFIG_DC=y
626CONFIG_FEATURE_DC_LIBM=y
627# CONFIG_DEVFSD is not set
628# CONFIG_DEVFSD_MODLOAD is not set
629# CONFIG_DEVFSD_FG_NP is not set
630# CONFIG_DEVFSD_VERBOSE is not set
631# CONFIG_FEATURE_DEVFS is not set
632# CONFIG_DEVMEM is not set
633# CONFIG_EJECT is not set
634# CONFIG_FEATURE_EJECT_SCSI is not set
635# CONFIG_FBSPLASH is not set
636# CONFIG_FLASHCP is not set
637# CONFIG_FLASH_LOCK is not set
638# CONFIG_FLASH_UNLOCK is not set
639# CONFIG_FLASH_ERASEALL is not set
640# CONFIG_IONICE is not set
641# CONFIG_INOTIFYD is not set
642# CONFIG_LAST is not set
643# CONFIG_FEATURE_LAST_SMALL is not set
644# CONFIG_FEATURE_LAST_FANCY is not set
645CONFIG_LESS=y
646CONFIG_FEATURE_LESS_MAXLINES=9999999
647CONFIG_FEATURE_LESS_BRACKETS=y
648CONFIG_FEATURE_LESS_FLAGS=y
649CONFIG_FEATURE_LESS_MARKS=y
650CONFIG_FEATURE_LESS_REGEXP=y
651# CONFIG_FEATURE_LESS_WINCH is not set
652# CONFIG_FEATURE_LESS_DASHCMD is not set
653# CONFIG_FEATURE_LESS_LINENUMS is not set
654# CONFIG_HDPARM is not set
655# CONFIG_FEATURE_HDPARM_GET_IDENTITY is not set
656# CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF is not set
657# CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF is not set
658# CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET is not set
659# CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF is not set
660# CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA is not set
661# CONFIG_MAKEDEVS is not set
662# CONFIG_FEATURE_MAKEDEVS_LEAF is not set
663# CONFIG_FEATURE_MAKEDEVS_TABLE is not set
664# CONFIG_MAN is not set
665CONFIG_MICROCOM=y
666# CONFIG_MOUNTPOINT is not set
667# CONFIG_MT is not set
668# CONFIG_RAIDAUTORUN is not set
669# CONFIG_READAHEAD is not set
670# CONFIG_RFKILL is not set
671# CONFIG_RUNLEVEL is not set
672# CONFIG_RX is not set
673CONFIG_SETSID=y
674CONFIG_STRINGS=y
675# CONFIG_TASKSET is not set
676# CONFIG_FEATURE_TASKSET_FANCY is not set
677# CONFIG_TIME is not set
678CONFIG_TIMEOUT=y
679CONFIG_TTYSIZE=y
680CONFIG_VOLNAME=y
681# CONFIG_WALL is not set
682# CONFIG_WATCHDOG is not set
683
684#
685# Networking Utilities
686#
687# CONFIG_NBDCLIENT is not set
688CONFIG_NC=y
689# CONFIG_NC_SERVER is not set
690# CONFIG_NC_EXTRA is not set
691# CONFIG_NC_110_COMPAT is not set
692# CONFIG_FEATURE_IPV6 is not set
693# CONFIG_FEATURE_UNIX_LOCAL is not set
694# CONFIG_FEATURE_PREFER_IPV4_ADDRESS is not set
695# CONFIG_VERBOSE_RESOLUTION_ERRORS is not set
696# CONFIG_ARP is not set
697# CONFIG_ARPING is not set
698# CONFIG_BRCTL is not set
699# CONFIG_FEATURE_BRCTL_FANCY is not set
700# CONFIG_FEATURE_BRCTL_SHOW is not set
701CONFIG_DNSD=y
702# CONFIG_ETHER_WAKE is not set
703CONFIG_FAKEIDENTD=y
704CONFIG_FTPD=y
705CONFIG_FEATURE_FTP_WRITE=y
706CONFIG_FEATURE_FTPD_ACCEPT_BROKEN_LIST=y
707CONFIG_FTPGET=y
708CONFIG_FTPPUT=y
709CONFIG_FEATURE_FTPGETPUT_LONG_OPTIONS=y
710CONFIG_HOSTNAME=y
711CONFIG_HTTPD=y
712CONFIG_FEATURE_HTTPD_RANGES=y
713# CONFIG_FEATURE_HTTPD_USE_SENDFILE is not set
714# CONFIG_FEATURE_HTTPD_SETUID is not set
715CONFIG_FEATURE_HTTPD_BASIC_AUTH=y
716CONFIG_FEATURE_HTTPD_AUTH_MD5=y
717CONFIG_FEATURE_HTTPD_CGI=y
718CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR=y
719CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV=y
720CONFIG_FEATURE_HTTPD_ENCODE_URL_STR=y
721CONFIG_FEATURE_HTTPD_ERROR_PAGES=y
722CONFIG_FEATURE_HTTPD_PROXY=y
723CONFIG_FEATURE_HTTPD_GZIP=y
724# CONFIG_IFCONFIG is not set
725# CONFIG_FEATURE_IFCONFIG_STATUS is not set
726# CONFIG_FEATURE_IFCONFIG_SLIP is not set
727# CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ is not set
728# CONFIG_FEATURE_IFCONFIG_HW is not set
729# CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS is not set
730# CONFIG_IFENSLAVE is not set
731# CONFIG_IFPLUGD is not set
732# CONFIG_IFUPDOWN is not set
733CONFIG_IFUPDOWN_IFSTATE_PATH=""
734# CONFIG_FEATURE_IFUPDOWN_IP is not set
735# CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN is not set
736# CONFIG_FEATURE_IFUPDOWN_IFCONFIG_BUILTIN is not set
737# CONFIG_FEATURE_IFUPDOWN_IPV4 is not set
738# CONFIG_FEATURE_IFUPDOWN_IPV6 is not set
739# CONFIG_FEATURE_IFUPDOWN_MAPPING is not set
740# CONFIG_FEATURE_IFUPDOWN_EXTERNAL_DHCP is not set
741# CONFIG_INETD is not set
742# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO is not set
743# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD is not set
744# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME is not set
745# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME is not set
746# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN is not set
747# CONFIG_FEATURE_INETD_RPC is not set
748# CONFIG_IP is not set
749# CONFIG_FEATURE_IP_ADDRESS is not set
750# CONFIG_FEATURE_IP_LINK is not set
751# CONFIG_FEATURE_IP_ROUTE is not set
752# CONFIG_FEATURE_IP_TUNNEL is not set
753# CONFIG_FEATURE_IP_RULE is not set
754# CONFIG_FEATURE_IP_SHORT_FORMS is not set
755# CONFIG_FEATURE_IP_RARE_PROTOCOLS is not set
756# CONFIG_IPADDR is not set
757# CONFIG_IPLINK is not set
758# CONFIG_IPROUTE is not set
759# CONFIG_IPTUNNEL is not set
760# CONFIG_IPRULE is not set
761CONFIG_IPCALC=y
762CONFIG_FEATURE_IPCALC_FANCY=y
763CONFIG_FEATURE_IPCALC_LONG_OPTIONS=y
764# CONFIG_NAMEIF is not set
765# CONFIG_FEATURE_NAMEIF_EXTENDED is not set
766# CONFIG_NETSTAT is not set
767# CONFIG_FEATURE_NETSTAT_WIDE is not set
768# CONFIG_FEATURE_NETSTAT_PRG is not set
769# CONFIG_NSLOOKUP is not set
770# CONFIG_NTPD is not set
771# CONFIG_FEATURE_NTPD_SERVER is not set
772# CONFIG_PING is not set
773# CONFIG_PING6 is not set
774# CONFIG_FEATURE_FANCY_PING is not set
775CONFIG_PSCAN=y
776# CONFIG_ROUTE is not set
777# CONFIG_SLATTACH is not set
778# CONFIG_TCPSVD is not set
779CONFIG_TELNET=y
780CONFIG_FEATURE_TELNET_TTYPE=y
781CONFIG_FEATURE_TELNET_AUTOLOGIN=y
782CONFIG_TELNETD=y
783CONFIG_FEATURE_TELNETD_STANDALONE=y
784CONFIG_FEATURE_TELNETD_INETD_WAIT=y
785CONFIG_TFTP=y
786CONFIG_TFTPD=y
787
788#
789# Common options for tftp/tftpd
790#
791CONFIG_FEATURE_TFTP_GET=y
792CONFIG_FEATURE_TFTP_PUT=y
793CONFIG_FEATURE_TFTP_BLOCKSIZE=y
794CONFIG_FEATURE_TFTP_PROGRESS_BAR=y
795# CONFIG_TFTP_DEBUG is not set
796# CONFIG_TRACEROUTE is not set
797# CONFIG_TRACEROUTE6 is not set
798# CONFIG_FEATURE_TRACEROUTE_VERBOSE is not set
799# CONFIG_FEATURE_TRACEROUTE_SOURCE_ROUTE is not set
800# CONFIG_FEATURE_TRACEROUTE_USE_ICMP is not set
801# CONFIG_TUNCTL is not set
802# CONFIG_FEATURE_TUNCTL_UG is not set
803# CONFIG_UDHCPD is not set
804# CONFIG_DHCPRELAY is not set
805# CONFIG_DUMPLEASES is not set
806# CONFIG_FEATURE_UDHCPD_WRITE_LEASES_EARLY is not set
807CONFIG_DHCPD_LEASES_FILE=""
808# CONFIG_UDHCPC is not set
809# CONFIG_FEATURE_UDHCPC_ARPING is not set
810# CONFIG_FEATURE_UDHCP_PORT is not set
811CONFIG_UDHCP_DEBUG=0
812# CONFIG_FEATURE_UDHCP_RFC3397 is not set
813CONFIG_UDHCPC_DEFAULT_SCRIPT=""
814CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS=0
815CONFIG_IFUPDOWN_UDHCPC_CMD_OPTIONS=""
816# CONFIG_UDPSVD is not set
817# CONFIG_VCONFIG is not set
818CONFIG_WGET=y
819CONFIG_FEATURE_WGET_STATUSBAR=y
820CONFIG_FEATURE_WGET_AUTHENTICATION=y
821CONFIG_FEATURE_WGET_LONG_OPTIONS=y
822CONFIG_FEATURE_WGET_TIMEOUT=y
823# CONFIG_ZCIP is not set
824
825#
826# Print Utilities
827#
828# CONFIG_LPD is not set
829CONFIG_LPR=y
830CONFIG_LPQ=y
831
832#
833# Mail Utilities
834#
835# CONFIG_MAKEMIME is not set
836CONFIG_FEATURE_MIME_CHARSET=""
837# CONFIG_POPMAILDIR is not set
838# CONFIG_FEATURE_POPMAILDIR_DELIVERY is not set
839# CONFIG_REFORMIME is not set
840# CONFIG_FEATURE_REFORMIME_COMPAT is not set
841# CONFIG_SENDMAIL is not set
842
843#
844# Process Utilities
845#
846CONFIG_IOSTAT=y
847CONFIG_MPSTAT=y
848CONFIG_PMAP=y
849CONFIG_POWERTOP=y
850CONFIG_SMEMCAP=y
851# CONFIG_FREE is not set
852# CONFIG_FUSER is not set
853CONFIG_KILL=y
854CONFIG_KILLALL=y
855CONFIG_KILLALL5=y
856# CONFIG_NMETER is not set
857CONFIG_PGREP=y
858# CONFIG_PIDOF is not set
859# CONFIG_FEATURE_PIDOF_SINGLE is not set
860# CONFIG_FEATURE_PIDOF_OMIT is not set
861CONFIG_PKILL=y
862CONFIG_PS=y
863CONFIG_FEATURE_PS_WIDE=y
864# CONFIG_FEATURE_PS_TIME is not set
865# CONFIG_FEATURE_PS_ADDITIONAL_COLUMNS is not set
866# CONFIG_FEATURE_PS_UNUSUAL_SYSTEMS is not set
867CONFIG_RENICE=y
868CONFIG_BB_SYSCTL=y
869# CONFIG_TOP is not set
870# CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE is not set
871# CONFIG_FEATURE_TOP_CPU_GLOBAL_PERCENTS is not set
872# CONFIG_FEATURE_TOP_SMP_CPU is not set
873# CONFIG_FEATURE_TOP_DECIMALS is not set
874# CONFIG_FEATURE_TOP_SMP_PROCESS is not set
875# CONFIG_FEATURE_TOPMEM is not set
876CONFIG_FEATURE_SHOW_THREADS=y
877# CONFIG_UPTIME is not set
878CONFIG_WATCH=y
879
880#
881# Runit Utilities
882#
883# CONFIG_RUNSV is not set
884# CONFIG_RUNSVDIR is not set
885# CONFIG_FEATURE_RUNSVDIR_LOG is not set
886# CONFIG_SV is not set
887CONFIG_SV_DEFAULT_SERVICE_DIR=""
888# CONFIG_SVLOGD is not set
889# CONFIG_CHPST is not set
890# CONFIG_SETUIDGID is not set
891# CONFIG_ENVUIDGID is not set
892# CONFIG_ENVDIR is not set
893# CONFIG_SOFTLIMIT is not set
894# CONFIG_CHCON is not set
895# CONFIG_FEATURE_CHCON_LONG_OPTIONS is not set
896# CONFIG_GETENFORCE is not set
897# CONFIG_GETSEBOOL is not set
898# CONFIG_LOAD_POLICY is not set
899# CONFIG_MATCHPATHCON is not set
900# CONFIG_RESTORECON is not set
901# CONFIG_RUNCON is not set
902# CONFIG_FEATURE_RUNCON_LONG_OPTIONS is not set
903# CONFIG_SELINUXENABLED is not set
904# CONFIG_SETENFORCE is not set
905# CONFIG_SETFILES is not set
906# CONFIG_FEATURE_SETFILES_CHECK_OPTION is not set
907# CONFIG_SETSEBOOL is not set
908# CONFIG_SESTATUS is not set
909
910#
911# Shells
912#
913CONFIG_ASH=y
914# CONFIG_ASH_BASH_COMPAT is not set
915# CONFIG_ASH_JOB_CONTROL is not set
916# CONFIG_ASH_ALIAS is not set
917# CONFIG_ASH_GETOPTS is not set
918# CONFIG_ASH_BUILTIN_ECHO is not set
919# CONFIG_ASH_BUILTIN_PRINTF is not set
920# CONFIG_ASH_BUILTIN_TEST is not set
921# CONFIG_ASH_CMDCMD is not set
922# CONFIG_ASH_MAIL is not set
923# CONFIG_ASH_OPTIMIZE_FOR_SIZE is not set
924# CONFIG_ASH_RANDOM_SUPPORT is not set
925# CONFIG_ASH_EXPAND_PRMT is not set
926# CONFIG_CTTYHACK is not set
927# CONFIG_HUSH is not set
928# CONFIG_HUSH_BASH_COMPAT is not set
929# CONFIG_HUSH_BRACE_EXPANSION is not set
930# CONFIG_HUSH_HELP is not set
931# CONFIG_HUSH_INTERACTIVE is not set
932# CONFIG_HUSH_SAVEHISTORY is not set
933# CONFIG_HUSH_JOB is not set
934# CONFIG_HUSH_TICK is not set
935# CONFIG_HUSH_IF is not set
936# CONFIG_HUSH_LOOPS is not set
937# CONFIG_HUSH_CASE is not set
938# CONFIG_HUSH_FUNCTIONS is not set
939# CONFIG_HUSH_LOCAL is not set
940# CONFIG_HUSH_RANDOM_SUPPORT is not set
941# CONFIG_HUSH_EXPORT_N is not set
942# CONFIG_HUSH_MODE_X is not set
943# CONFIG_MSH is not set
944CONFIG_FEATURE_SH_IS_ASH=y
945# CONFIG_FEATURE_SH_IS_HUSH is not set
946# CONFIG_FEATURE_SH_IS_NONE is not set
947# CONFIG_FEATURE_BASH_IS_ASH is not set
948# CONFIG_FEATURE_BASH_IS_HUSH is not set
949CONFIG_FEATURE_BASH_IS_NONE=y
950CONFIG_SH_MATH_SUPPORT=y
951CONFIG_SH_MATH_SUPPORT_64=y
952# CONFIG_FEATURE_SH_EXTRA_QUIET is not set
953# CONFIG_FEATURE_SH_STANDALONE is not set
954# CONFIG_FEATURE_SH_NOFORK is not set
955
956#
957# System Logging Utilities
958#
959CONFIG_SYSLOGD=y
960CONFIG_FEATURE_ROTATE_LOGFILE=y
961CONFIG_FEATURE_REMOTE_LOG=y
962# CONFIG_FEATURE_SYSLOGD_DUP is not set
963CONFIG_FEATURE_SYSLOGD_READ_BUFFER_SIZE=256
964CONFIG_FEATURE_IPC_SYSLOG=y
965CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=16
966CONFIG_LOGREAD=y
967CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING=y
968# CONFIG_KLOGD is not set
969# CONFIG_FEATURE_KLOGD_KLOGCTL is not set
970CONFIG_LOGGER=y
diff --git a/coreutils/Config.src b/coreutils/Config.src
index dcb5add8f..cff2ce216 100644
--- a/coreutils/Config.src
+++ b/coreutils/Config.src
@@ -728,13 +728,6 @@ config FEATURE_WC_LARGE
728 help 728 help
729 Use "unsigned long long" in wc for counter variables. 729 Use "unsigned long long" in wc for counter variables.
730 730
731config WHO
732 bool "who"
733 default y
734 depends on FEATURE_UTMP
735 help
736 who is used to show who is logged on.
737
738config WHOAMI 731config WHOAMI
739 bool "whoami" 732 bool "whoami"
740 default y 733 default y
diff --git a/coreutils/Kbuild.src b/coreutils/Kbuild.src
index 0681e44b0..53d88b391 100644
--- a/coreutils/Kbuild.src
+++ b/coreutils/Kbuild.src
@@ -82,6 +82,5 @@ lib-$(CONFIG_USLEEP) += usleep.o
82lib-$(CONFIG_UUDECODE) += uudecode.o 82lib-$(CONFIG_UUDECODE) += uudecode.o
83lib-$(CONFIG_UUENCODE) += uuencode.o 83lib-$(CONFIG_UUENCODE) += uuencode.o
84lib-$(CONFIG_WC) += wc.o 84lib-$(CONFIG_WC) += wc.o
85lib-$(CONFIG_WHO) += who.o
86lib-$(CONFIG_WHOAMI) += whoami.o 85lib-$(CONFIG_WHOAMI) += whoami.o
87lib-$(CONFIG_YES) += yes.o 86lib-$(CONFIG_YES) += yes.o
diff --git a/coreutils/df.c b/coreutils/df.c
index 846cb38ad..63dbd61bd 100644
--- a/coreutils/df.c
+++ b/coreutils/df.c
@@ -212,7 +212,7 @@ int df_main(int argc UNUSED_PARAM, char **argv)
212 { 212 {
213 uni_stat_t uni_stat; 213 uni_stat_t uni_stat;
214 char *uni_dev = unicode_conv_to_printable(&uni_stat, device); 214 char *uni_dev = unicode_conv_to_printable(&uni_stat, device);
215 if (uni_stat.unicode_width > 20) { 215 if (uni_stat.unicode_width > 20 && !(opt & OPT_POSIX)) {
216 printf("%s\n%20s", uni_dev, ""); 216 printf("%s\n%20s", uni_dev, "");
217 } else { 217 } else {
218 printf("%s%*s", uni_dev, 20 - (int)uni_stat.unicode_width, ""); 218 printf("%s%*s", uni_dev, 20 - (int)uni_stat.unicode_width, "");
@@ -220,7 +220,7 @@ int df_main(int argc UNUSED_PARAM, char **argv)
220 free(uni_dev); 220 free(uni_dev);
221 } 221 }
222#else 222#else
223 if (printf("\n%-20s" + 1, device) > 20) 223 if (printf("\n%-20s" + 1, device) > 20 && !(opt & OPT_POSIX))
224 printf("\n%-20s", ""); 224 printf("\n%-20s", "");
225#endif 225#endif
226 226
diff --git a/coreutils/ls.c b/coreutils/ls.c
index 4abf84513..9876c2db2 100644
--- a/coreutils/ls.c
+++ b/coreutils/ls.c
@@ -1120,7 +1120,7 @@ int ls_main(int argc UNUSED_PARAM, char **argv)
1120 IF_FEATURE_LS_COLOR(applet_long_options = ls_longopts;) 1120 IF_FEATURE_LS_COLOR(applet_long_options = ls_longopts;)
1121 opt_complementary = 1121 opt_complementary =
1122 /* -e implies -l */ 1122 /* -e implies -l */
1123 "el" 1123 IF_FEATURE_LS_TIMESTAMPS("el")
1124 /* http://pubs.opengroup.org/onlinepubs/9699919799/utilities/ls.html: 1124 /* http://pubs.opengroup.org/onlinepubs/9699919799/utilities/ls.html:
1125 * in some pairs of opts, only last one takes effect: 1125 * in some pairs of opts, only last one takes effect:
1126 */ 1126 */
@@ -1130,7 +1130,7 @@ int ls_main(int argc UNUSED_PARAM, char **argv)
1130 ":C-xl:x-Cl:l-xC" /* bycols/bylines/long */ 1130 ":C-xl:x-Cl:l-xC" /* bycols/bylines/long */
1131 ":C-1:1-C" /* bycols/oneline */ 1131 ":C-1:1-C" /* bycols/oneline */
1132 ":x-1:1-x" /* bylines/oneline (not in SuS, but in GNU coreutils 8.4) */ 1132 ":x-1:1-x" /* bylines/oneline (not in SuS, but in GNU coreutils 8.4) */
1133 ":c-u:u-c" /* mtime/atime */ 1133 IF_FEATURE_LS_TIMESTAMPS(":c-u:u-c") /* mtime/atime */
1134 /* -w NUM: */ 1134 /* -w NUM: */
1135 IF_FEATURE_AUTOWIDTH(":w+"); 1135 IF_FEATURE_AUTOWIDTH(":w+");
1136 opt = getopt32(argv, ls_options 1136 opt = getopt32(argv, ls_options
diff --git a/coreutils/md5_sha1_sum.c b/coreutils/md5_sha1_sum.c
index 53fd4d1a8..2cb6dd43c 100644
--- a/coreutils/md5_sha1_sum.c
+++ b/coreutils/md5_sha1_sum.c
@@ -7,12 +7,11 @@
7 */ 7 */
8 8
9//usage:#define md5sum_trivial_usage 9//usage:#define md5sum_trivial_usage
10//usage: "[FILE]..." 10//usage: IF_FEATURE_MD5_SHA1_SUM_CHECK("[-c[sw]] ")"[FILE]..."
11//usage: IF_FEATURE_MD5_SHA1_SUM_CHECK("\n or: md5sum -c [-sw] [FILE]")
12//usage:#define md5sum_full_usage "\n\n" 11//usage:#define md5sum_full_usage "\n\n"
13//usage: "Print" IF_FEATURE_MD5_SHA1_SUM_CHECK(" or check") " MD5 checksums" 12//usage: "Print" IF_FEATURE_MD5_SHA1_SUM_CHECK(" or check") " MD5 checksums"
14//usage: IF_FEATURE_MD5_SHA1_SUM_CHECK( "\n" 13//usage: IF_FEATURE_MD5_SHA1_SUM_CHECK( "\n"
15//usage: "\n -c Check sums against given list" 14//usage: "\n -c Check sums against list in FILEs"
16//usage: "\n -s Don't output anything, status code shows success" 15//usage: "\n -s Don't output anything, status code shows success"
17//usage: "\n -w Warn about improperly formatted checksum lines" 16//usage: "\n -w Warn about improperly formatted checksum lines"
18//usage: ) 17//usage: )
@@ -28,34 +27,31 @@
28//usage: "^D\n" 27//usage: "^D\n"
29//usage: 28//usage:
30//usage:#define sha1sum_trivial_usage 29//usage:#define sha1sum_trivial_usage
31//usage: "[FILE]..." 30//usage: IF_FEATURE_MD5_SHA1_SUM_CHECK("[-c[sw]] ")"[FILE]..."
32//usage: IF_FEATURE_MD5_SHA1_SUM_CHECK("\n or: sha1sum -c [-sw] [FILE]")
33//usage:#define sha1sum_full_usage "\n\n" 31//usage:#define sha1sum_full_usage "\n\n"
34//usage: "Print" IF_FEATURE_MD5_SHA1_SUM_CHECK(" or check") " SHA1 checksums" 32//usage: "Print" IF_FEATURE_MD5_SHA1_SUM_CHECK(" or check") " SHA1 checksums"
35//usage: IF_FEATURE_MD5_SHA1_SUM_CHECK( "\n" 33//usage: IF_FEATURE_MD5_SHA1_SUM_CHECK( "\n"
36//usage: "\n -c Check sums against given list" 34//usage: "\n -c Check sums against list in FILEs"
37//usage: "\n -s Don't output anything, status code shows success" 35//usage: "\n -s Don't output anything, status code shows success"
38//usage: "\n -w Warn about improperly formatted checksum lines" 36//usage: "\n -w Warn about improperly formatted checksum lines"
39//usage: ) 37//usage: )
40//usage: 38//usage:
41//usage:#define sha256sum_trivial_usage 39//usage:#define sha256sum_trivial_usage
42//usage: "[FILE]..." 40//usage: IF_FEATURE_MD5_SHA1_SUM_CHECK("[-c[sw]] ")"[FILE]..."
43//usage: IF_FEATURE_MD5_SHA1_SUM_CHECK("\n or: sha256sum -c [-sw] [FILE]")
44//usage:#define sha256sum_full_usage "\n\n" 41//usage:#define sha256sum_full_usage "\n\n"
45//usage: "Print" IF_FEATURE_MD5_SHA1_SUM_CHECK(" or check") " SHA256 checksums" 42//usage: "Print" IF_FEATURE_MD5_SHA1_SUM_CHECK(" or check") " SHA256 checksums"
46//usage: IF_FEATURE_MD5_SHA1_SUM_CHECK( "\n" 43//usage: IF_FEATURE_MD5_SHA1_SUM_CHECK( "\n"
47//usage: "\n -c Check sums against given list" 44//usage: "\n -c Check sums against list in FILEs"
48//usage: "\n -s Don't output anything, status code shows success" 45//usage: "\n -s Don't output anything, status code shows success"
49//usage: "\n -w Warn about improperly formatted checksum lines" 46//usage: "\n -w Warn about improperly formatted checksum lines"
50//usage: ) 47//usage: )
51//usage: 48//usage:
52//usage:#define sha512sum_trivial_usage 49//usage:#define sha512sum_trivial_usage
53//usage: "[FILE]..." 50//usage: IF_FEATURE_MD5_SHA1_SUM_CHECK("[-c[sw]] ")"[FILE]..."
54//usage: IF_FEATURE_MD5_SHA1_SUM_CHECK("\n or: sha512sum -c [-sw] [FILE]")
55//usage:#define sha512sum_full_usage "\n\n" 51//usage:#define sha512sum_full_usage "\n\n"
56//usage: "Print" IF_FEATURE_MD5_SHA1_SUM_CHECK(" or check") " SHA512 checksums" 52//usage: "Print" IF_FEATURE_MD5_SHA1_SUM_CHECK(" or check") " SHA512 checksums"
57//usage: IF_FEATURE_MD5_SHA1_SUM_CHECK( "\n" 53//usage: IF_FEATURE_MD5_SHA1_SUM_CHECK( "\n"
58//usage: "\n -c Check sums against given list" 54//usage: "\n -c Check sums against list in FILEs"
59//usage: "\n -s Don't output anything, status code shows success" 55//usage: "\n -s Don't output anything, status code shows success"
60//usage: "\n -w Warn about improperly formatted checksum lines" 56//usage: "\n -w Warn about improperly formatted checksum lines"
61//usage: ) 57//usage: )
@@ -95,7 +91,7 @@ static uint8_t *hash_file(const char *filename)
95 sha1_ctx_t sha1; 91 sha1_ctx_t sha1;
96 md5_ctx_t md5; 92 md5_ctx_t md5;
97 } context; 93 } context;
98 uint8_t *hash_value = NULL; 94 uint8_t *hash_value;
99 void FAST_FUNC (*update)(void*, const void*, size_t); 95 void FAST_FUNC (*update)(void*, const void*, size_t);
100 void FAST_FUNC (*final)(void*, void*); 96 void FAST_FUNC (*final)(void*, void*);
101 char hash_algo; 97 char hash_algo;
@@ -137,6 +133,7 @@ static uint8_t *hash_file(const char *filename)
137 while ((count = safe_read(src_fd, in_buf, 4096)) > 0) { 133 while ((count = safe_read(src_fd, in_buf, 4096)) > 0) {
138 update(&context, in_buf, count); 134 update(&context, in_buf, count);
139 } 135 }
136 hash_value = NULL;
140 if (count == 0) { 137 if (count == 0) {
141 final(&context, in_buf); 138 final(&context, in_buf);
142 hash_value = hash_bin_to_hex(in_buf, hash_len); 139 hash_value = hash_bin_to_hex(in_buf, hash_len);
@@ -178,66 +175,58 @@ int md5_sha1_sum_main(int argc UNUSED_PARAM, char **argv)
178 } 175 }
179 } 176 }
180 177
181 if (ENABLE_FEATURE_MD5_SHA1_SUM_CHECK && (flags & FLAG_CHECK)) { 178 do {
182 FILE *pre_computed_stream; 179 if (ENABLE_FEATURE_MD5_SHA1_SUM_CHECK && (flags & FLAG_CHECK)) {
183 int count_total = 0; 180 FILE *pre_computed_stream;
184 int count_failed = 0; 181 char *line;
185 char *line; 182 int count_total = 0;
183 int count_failed = 0;
186 184
187 if (argv[1]) { 185 pre_computed_stream = xfopen_stdin(*argv);
188 bb_error_msg_and_die("only one argument may be specified with -c");
189 }
190
191 pre_computed_stream = xfopen_stdin(argv[0]);
192 186
193 while ((line = xmalloc_fgetline(pre_computed_stream)) != NULL) { 187 while ((line = xmalloc_fgetline(pre_computed_stream)) != NULL) {
194 uint8_t *hash_value; 188 uint8_t *hash_value;
195 char *filename_ptr; 189 char *filename_ptr;
196 190
197 count_total++; 191 count_total++;
198 filename_ptr = strstr(line, " "); 192 filename_ptr = strstr(line, " ");
199 /* handle format for binary checksums */ 193 /* handle format for binary checksums */
200 if (filename_ptr == NULL) { 194 if (filename_ptr == NULL) {
201 filename_ptr = strstr(line, " *"); 195 filename_ptr = strstr(line, " *");
202 }
203 if (filename_ptr == NULL) {
204 if (flags & FLAG_WARN) {
205 bb_error_msg("invalid format");
206 } 196 }
207 count_failed++; 197 if (filename_ptr == NULL) {
208 return_value = EXIT_FAILURE; 198 if (flags & FLAG_WARN) {
199 bb_error_msg("invalid format");
200 }
201 count_failed++;
202 return_value = EXIT_FAILURE;
203 free(line);
204 continue;
205 }
206 *filename_ptr = '\0';
207 filename_ptr += 2;
208
209 hash_value = hash_file(filename_ptr);
210
211 if (hash_value && (strcmp((char*)hash_value, line) == 0)) {
212 if (!(flags & FLAG_SILENT))
213 printf("%s: OK\n", filename_ptr);
214 } else {
215 if (!(flags & FLAG_SILENT))
216 printf("%s: FAILED\n", filename_ptr);
217 count_failed++;
218 return_value = EXIT_FAILURE;
219 }
220 /* possible free(NULL) */
221 free(hash_value);
209 free(line); 222 free(line);
210 continue;
211 } 223 }
212 *filename_ptr = '\0'; 224 if (count_failed && !(flags & FLAG_SILENT)) {
213 filename_ptr += 2; 225 bb_error_msg("WARNING: %d of %d computed checksums did NOT match",
214 226 count_failed, count_total);
215 hash_value = hash_file(filename_ptr);
216
217 if (hash_value && (strcmp((char*)hash_value, line) == 0)) {
218 if (!(flags & FLAG_SILENT))
219 printf("%s: OK\n", filename_ptr);
220 } else {
221 if (!(flags & FLAG_SILENT))
222 printf("%s: FAILED\n", filename_ptr);
223 count_failed++;
224 return_value = EXIT_FAILURE;
225 } 227 }
226 /* possible free(NULL) */ 228 fclose_if_not_stdin(pre_computed_stream);
227 free(hash_value); 229 } else {
228 free(line);
229 }
230 if (count_failed && !(flags & FLAG_SILENT)) {
231 bb_error_msg("WARNING: %d of %d computed checksums did NOT match",
232 count_failed, count_total);
233 }
234 /*
235 if (fclose_if_not_stdin(pre_computed_stream) == EOF) {
236 bb_perror_msg_and_die("can't close file %s", file_ptr);
237 }
238 */
239 } else {
240 do {
241 uint8_t *hash_value = hash_file(*argv); 230 uint8_t *hash_value = hash_file(*argv);
242 if (hash_value == NULL) { 231 if (hash_value == NULL) {
243 return_value = EXIT_FAILURE; 232 return_value = EXIT_FAILURE;
@@ -245,7 +234,8 @@ int md5_sha1_sum_main(int argc UNUSED_PARAM, char **argv)
245 printf("%s %s\n", hash_value, *argv); 234 printf("%s %s\n", hash_value, *argv);
246 free(hash_value); 235 free(hash_value);
247 } 236 }
248 } while (*++argv); 237 }
249 } 238 } while (*++argv);
239
250 return return_value; 240 return return_value;
251} 241}
diff --git a/coreutils/usleep.c b/coreutils/usleep.c
index 67f94f798..2e4eb5721 100644
--- a/coreutils/usleep.c
+++ b/coreutils/usleep.c
@@ -29,9 +29,7 @@ int usleep_main(int argc UNUSED_PARAM, char **argv)
29 bb_show_usage(); 29 bb_show_usage();
30 } 30 }
31 31
32 if (usleep(xatou(argv[1]))) { 32 usleep(xatou(argv[1]));
33 bb_perror_nomsg_and_die();
34 }
35 33
36 return EXIT_SUCCESS; 34 return EXIT_SUCCESS;
37} 35}
diff --git a/coreutils/who.c b/coreutils/who.c
index 9f37f65fd..c6c925264 100644
--- a/coreutils/who.c
+++ b/coreutils/who.c
@@ -18,6 +18,31 @@
18 */ 18 */
19/* BB_AUDIT SUSv3 _NOT_ compliant -- missing options -b, -d, -l, -m, -p, -q, -r, -s, -t, -T, -u; Missing argument 'file'. */ 19/* BB_AUDIT SUSv3 _NOT_ compliant -- missing options -b, -d, -l, -m, -p, -q, -r, -s, -t, -T, -u; Missing argument 'file'. */
20 20
21//config:config WHO
22//config: bool "who"
23//config: default y
24//config: depends on FEATURE_UTMP
25//config: help
26//config: who is used to show who is logged on.
27
28//config:config USERS
29//config: bool "users"
30//config: default y
31//config: depends on FEATURE_UTMP
32//config: help
33//config: Print users currently logged on.
34
35//applet:IF_USERS(APPLET_ODDNAME(users, who, BB_DIR_USR_BIN, BB_SUID_DROP, users))
36//applet:IF_WHO( APPLET( who, BB_DIR_USR_BIN, BB_SUID_DROP))
37
38//kbuild:lib-$(CONFIG_USERS) += who.o
39//kbuild:lib-$(CONFIG_WHO) += who.o
40
41//usage:#define users_trivial_usage
42//usage: ""
43//usage:#define users_full_usage "\n\n"
44//usage: "Print the users currently logged on"
45
21//usage:#define who_trivial_usage 46//usage:#define who_trivial_usage
22//usage: "[-a]" 47//usage: "[-a]"
23//usage:#define who_full_usage "\n\n" 48//usage:#define who_full_usage "\n\n"
@@ -49,9 +74,11 @@ int who_main(int argc UNUSED_PARAM, char **argv)
49{ 74{
50 struct utmp *ut; 75 struct utmp *ut;
51 unsigned opt; 76 unsigned opt;
77 int do_users = (ENABLE_USERS && (!ENABLE_WHO || applet_name[0] == 'u'));
78 const char *fmt = "%s";
52 79
53 opt_complementary = "=0"; 80 opt_complementary = "=0";
54 opt = getopt32(argv, "aH"); 81 opt = getopt32(argv, do_users ? "" : "aH");
55 if (opt & 2) // -H 82 if (opt & 2) // -H
56 printf("USER\t\tTTY\t\tIDLE\tTIME\t\t HOST\n"); 83 printf("USER\t\tTTY\t\tIDLE\tTIME\t\t HOST\n");
57 84
@@ -60,36 +87,43 @@ int who_main(int argc UNUSED_PARAM, char **argv)
60 if (ut->ut_user[0] 87 if (ut->ut_user[0]
61 && ((opt & 1) || ut->ut_type == USER_PROCESS) 88 && ((opt & 1) || ut->ut_type == USER_PROCESS)
62 ) { 89 ) {
63 char str6[6]; 90 if (!do_users) {
64 char name[sizeof("/dev/") + sizeof(ut->ut_line) + 1]; 91 char str6[6];
65 struct stat st; 92 char name[sizeof("/dev/") + sizeof(ut->ut_line) + 1];
66 time_t seconds; 93 struct stat st;
94 time_t seconds;
67 95
68 str6[0] = '?'; 96 str6[0] = '?';
69 str6[1] = '\0'; 97 str6[1] = '\0';
70 strcpy(name, "/dev/"); 98 strcpy(name, "/dev/");
71 safe_strncpy(ut->ut_line[0] == '/' ? name : name + sizeof("/dev/")-1, 99 safe_strncpy(ut->ut_line[0] == '/' ? name : name + sizeof("/dev/")-1,
72 ut->ut_line, 100 ut->ut_line,
73 sizeof(ut->ut_line)+1 101 sizeof(ut->ut_line)+1
74 ); 102 );
75 if (stat(name, &st) == 0) 103 if (stat(name, &st) == 0)
76 idle_string(str6, st.st_atime); 104 idle_string(str6, st.st_atime);
77 /* manpages say ut_tv.tv_sec *is* time_t, 105 /* manpages say ut_tv.tv_sec *is* time_t,
78 * but some systems have it wrong */ 106 * but some systems have it wrong */
79 seconds = ut->ut_tv.tv_sec; 107 seconds = ut->ut_tv.tv_sec;
80 /* How wide time field can be? 108 /* How wide time field can be?
81 * "Nov 10 19:33:20": 15 chars 109 * "Nov 10 19:33:20": 15 chars
82 * "2010-11-10 19:33": 16 chars 110 * "2010-11-10 19:33": 16 chars
83 */ 111 */
84 printf("%-15.*s %-15.*s %-7s %-16.16s %.*s\n", 112 printf("%-15.*s %-15.*s %-7s %-16.16s %.*s\n",
85 (int)sizeof(ut->ut_user), ut->ut_user, 113 (int)sizeof(ut->ut_user), ut->ut_user,
86 (int)sizeof(ut->ut_line), ut->ut_line, 114 (int)sizeof(ut->ut_line), ut->ut_line,
87 str6, 115 str6,
88 ctime(&seconds) + 4, 116 ctime(&seconds) + 4,
89 (int)sizeof(ut->ut_host), ut->ut_host 117 (int)sizeof(ut->ut_host), ut->ut_host
90 ); 118 );
119 } else {
120 printf(fmt, ut->ut_user);
121 fmt = " %s";
122 }
91 } 123 }
92 } 124 }
125 if (do_users)
126 bb_putchar('\n');
93 if (ENABLE_FEATURE_CLEAN_UP) 127 if (ENABLE_FEATURE_CLEAN_UP)
94 endutent(); 128 endutent();
95 return EXIT_SUCCESS; 129 return EXIT_SUCCESS;
diff --git a/docs/unicode.txt b/docs/unicode.txt
index 32df24dc8..9c159ce2a 100644
--- a/docs/unicode.txt
+++ b/docs/unicode.txt
@@ -29,7 +29,7 @@ But we also need to handle the following problematic moments:
29 Editors (vi, ed) 29 Editors (vi, ed)
30 30
31This case is a bit similar to "shell input", but unlike shell, 31This case is a bit similar to "shell input", but unlike shell,
32editors may encounder many more unexpected unicode sequences 32editors may encounter many more unexpected unicode sequences
33(try to load a random binary file...), and they need to preserve 33(try to load a random binary file...), and they need to preserve
34them, unlike shell which can afford to drop bogus input. 34them, unlike shell which can afford to drop bogus input.
35 35
diff --git a/editors/diff.c b/editors/diff.c
index 8c0a31f47..3a3334640 100644
--- a/editors/diff.c
+++ b/editors/diff.c
@@ -693,10 +693,12 @@ static bool diff(FILE* fp[2], char *file[2])
693 693
694static int diffreg(char *file[2]) 694static int diffreg(char *file[2])
695{ 695{
696 FILE *fp[2] = { stdin, stdin }; 696 FILE *fp[2];
697 bool binary = false, differ = false; 697 bool binary = false, differ = false;
698 int status = STATUS_SAME, i; 698 int status = STATUS_SAME, i;
699 699
700 fp[0] = stdin;
701 fp[1] = stdin;
700 for (i = 0; i < 2; i++) { 702 for (i = 0; i < 2; i++) {
701 int fd = open_or_warn_stdin(file[i]); 703 int fd = open_or_warn_stdin(file[i]);
702 if (fd == -1) 704 if (fd == -1)
diff --git a/editors/vi.c b/editors/vi.c
index deb471d04..9708679b4 100644
--- a/editors/vi.c
+++ b/editors/vi.c
@@ -132,8 +132,8 @@
132//config: help 132//config: help
133//config: If terminal size can't be retrieved and $LINES/$COLUMNS are not set, 133//config: If terminal size can't be retrieved and $LINES/$COLUMNS are not set,
134//config: this option makes vi perform a last-ditch effort to find it: 134//config: this option makes vi perform a last-ditch effort to find it:
135//config: vi positions cursor to 999,999 and asks terminal to report real 135//config: position cursor to 999,999 and ask terminal to report real
136//config: cursor position using "ESC [ 6 n" escape sequence, then reads stdin. 136//config: cursor position using "ESC [ 6 n" escape sequence, then read stdin.
137//config: 137//config:
138//config: This is not clean but helps a lot on serial lines and such. 138//config: This is not clean but helps a lot on serial lines and such.
139//config: 139//config:
diff --git a/examples/android-build b/examples/android-build
new file mode 100755
index 000000000..f5fe49bda
--- /dev/null
+++ b/examples/android-build
@@ -0,0 +1,31 @@
1#!/bin/sh
2# Build Busybox against Android's bionic
3# Originally by Dan Fandrich
4#
5# Configure with android_defconfig
6# This file has been tested on Android Froyo (the lack of ttyname_r in
7# the must be patched around) and Gingerbread.
8
9# Point this to the Android root directory; it's used in the defconfig CFLAGS
10export A="$HOME/android"
11
12# Android product being built
13P=zoom2
14
15# Toolchain version in use by this version of Android
16GCCVER=4.4.3
17
18export PATH="$A/prebuilt/linux-x86/toolchain/arm-eabi-$GCCVER/bin:$PATH"
19
20# Set the linker flags; compiler flags are in the defconfig file
21if grep "^CONFIG_STATIC=y" .config >/dev/null ; then
22 # Static linking
23 LDFLAGS="-static -Xlinker -z -Xlinker muldefs -nostdlib $A/out/target/product/$P/obj/lib/crtbegin_static.o $A/out/target/product/$P/obj/lib/crtend_android.o -L$A/out/target/product/$P/obj/lib -L$A/out/target/product/$P/obj/STATIC_LIBRARIES/libm_intermediates -L$A/out/target/product/$P/obj/STATIC_LIBRARIES/libc_intermediates"
24 LDLIBS="m c gcc"
25else
26 # Dynamic linking
27 LDFLAGS="-Xlinker -z -Xlinker muldefs -nostdlib -Bdynamic -Xlinker -T$A/build/core/armelf.x -Xlinker -dynamic-linker -Xlinker /system/bin/linker -Xlinker -z -Xlinker nocopyreloc -Xlinker --no-undefined $A/out/target/product/$P/obj/lib/crtbegin_dynamic.o $A/out/target/product/$P/obj/lib/crtend_android.o -L$A/out/target/product/$P/obj/lib"
28 LDLIBS="dl m c gcc"
29fi
30
31make EXTRA_LDFLAGS="$LDFLAGS" LDLIBS="$LDLIBS" "$@"
diff --git a/examples/zcip.script b/examples/zcip.script
index 988e542a4..e543c304e 100755
--- a/examples/zcip.script
+++ b/examples/zcip.script
@@ -20,9 +20,9 @@ config)
20 exit 1 20 exit 1
21 fi 21 fi
22 # remember $ip for $interface, to use on restart 22 # remember $ip for $interface, to use on restart
23 if [ "x$IP" != x -a -w "$IP.$interface" ] 23 if [ "x$ip" != x -a -w "$ip.$interface" ]
24 then 24 then
25 echo $ip > "$IP.$interface" 25 echo $ip > "$ip.$interface"
26 fi 26 fi
27 exec ip address add dev $interface \ 27 exec ip address add dev $interface \
28 scope link local "$ip/16" broadcast + 28 scope link local "$ip/16" broadcast +
diff --git a/findutils/find.c b/findutils/find.c
index babcda0ed..05f88d2f0 100644
--- a/findutils/find.c
+++ b/findutils/find.c
@@ -336,6 +336,9 @@
336# define FNM_CASEFOLD 0 336# define FNM_CASEFOLD 0
337#endif 337#endif
338 338
339#define dbg(...) ((void)0)
340/* #define dbg(...) bb_error_msg(__VA_ARGS__) */
341
339/* This is a NOEXEC applet. Be very careful! */ 342/* This is a NOEXEC applet. Be very careful! */
340 343
341 344
@@ -469,10 +472,12 @@ static int exec_actions(action ***appp, const char *fileName, const struct stat
469#if ENABLE_FEATURE_FIND_NOT 472#if ENABLE_FEATURE_FIND_NOT
470 if (ap->invert) rc ^= TRUE; 473 if (ap->invert) rc ^= TRUE;
471#endif 474#endif
475 dbg("grp %d action %d rc:0x%x", cur_group, cur_action, rc);
472 if (rc & TRUE) /* current group failed, try next */ 476 if (rc & TRUE) /* current group failed, try next */
473 break; 477 break;
474 } 478 }
475 } 479 }
480 dbg("returning:0x%x", rc ^ TRUE);
476 return rc ^ TRUE; /* restore TRUE bit */ 481 return rc ^ TRUE; /* restore TRUE bit */
477} 482}
478 483
@@ -910,6 +915,8 @@ static action*** parse_params(char **argv)
910 int parm = index_in_strings(params, arg); 915 int parm = index_in_strings(params, arg);
911 const char *arg1 = argv[1]; 916 const char *arg1 = argv[1];
912 917
918 dbg("arg:'%s' arg1:'%s' parm:%d PARM_type:%d", arg, arg1, parm, PARM_type);
919
913 if (parm >= PARM_name) { 920 if (parm >= PARM_name) {
914 /* All options/actions starting from -name require argument */ 921 /* All options/actions starting from -name require argument */
915 if (!arg1) 922 if (!arg1)
@@ -925,18 +932,22 @@ static action*** parse_params(char **argv)
925 * expression is reached. 932 * expression is reached.
926 */ 933 */
927 /* Options */ 934 /* Options */
935 if (0) { }
928#if ENABLE_FEATURE_FIND_XDEV 936#if ENABLE_FEATURE_FIND_XDEV
929 if (parm == OPT_XDEV) { 937 else if (parm == OPT_XDEV) {
938 dbg("%d", __LINE__);
930 G.xdev_on = 1; 939 G.xdev_on = 1;
931 } 940 }
932#endif 941#endif
933#if ENABLE_FEATURE_FIND_MAXDEPTH 942#if ENABLE_FEATURE_FIND_MAXDEPTH
934 else if (parm == OPT_MINDEPTH || parm == OPT_MINDEPTH + 1) { 943 else if (parm == OPT_MINDEPTH || parm == OPT_MINDEPTH + 1) {
944 dbg("%d", __LINE__);
935 G.minmaxdepth[parm - OPT_MINDEPTH] = xatoi_positive(arg1); 945 G.minmaxdepth[parm - OPT_MINDEPTH] = xatoi_positive(arg1);
936 } 946 }
937#endif 947#endif
938#if ENABLE_FEATURE_FIND_DEPTH 948#if ENABLE_FEATURE_FIND_DEPTH
939 else if (parm == OPT_DEPTH) { 949 else if (parm == OPT_DEPTH) {
950 dbg("%d", __LINE__);
940 G.recurse_flags |= ACTION_DEPTHFIRST; 951 G.recurse_flags |= ACTION_DEPTHFIRST;
941 } 952 }
942#endif 953#endif
@@ -951,9 +962,11 @@ static action*** parse_params(char **argv)
951 */ 962 */
952 /* Operators */ 963 /* Operators */
953 else if (parm == PARM_a IF_DESKTOP(|| parm == PARM_and)) { 964 else if (parm == PARM_a IF_DESKTOP(|| parm == PARM_and)) {
965 dbg("%d", __LINE__);
954 /* no further special handling required */ 966 /* no further special handling required */
955 } 967 }
956 else if (parm == PARM_o IF_DESKTOP(|| parm == PARM_or)) { 968 else if (parm == PARM_o IF_DESKTOP(|| parm == PARM_or)) {
969 dbg("%d", __LINE__);
957 /* start new OR group */ 970 /* start new OR group */
958 cur_group++; 971 cur_group++;
959 appp = xrealloc(appp, (cur_group+2) * sizeof(*appp)); 972 appp = xrealloc(appp, (cur_group+2) * sizeof(*appp));
@@ -965,26 +978,31 @@ static action*** parse_params(char **argv)
965 else if (parm == PARM_char_not IF_DESKTOP(|| parm == PARM_not)) { 978 else if (parm == PARM_char_not IF_DESKTOP(|| parm == PARM_not)) {
966 /* also handles "find ! ! -name 'foo*'" */ 979 /* also handles "find ! ! -name 'foo*'" */
967 invert_flag ^= 1; 980 invert_flag ^= 1;
981 dbg("invert_flag:%d", invert_flag);
968 } 982 }
969#endif 983#endif
970 /* Actions */ 984 /* Actions */
971 else if (parm == PARM_print) { 985 else if (parm == PARM_print) {
986 dbg("%d", __LINE__);
972 G.need_print = 0; 987 G.need_print = 0;
973 (void) ALLOC_ACTION(print); 988 (void) ALLOC_ACTION(print);
974 } 989 }
975#if ENABLE_FEATURE_FIND_PRINT0 990#if ENABLE_FEATURE_FIND_PRINT0
976 else if (parm == PARM_print0) { 991 else if (parm == PARM_print0) {
992 dbg("%d", __LINE__);
977 G.need_print = 0; 993 G.need_print = 0;
978 (void) ALLOC_ACTION(print0); 994 (void) ALLOC_ACTION(print0);
979 } 995 }
980#endif 996#endif
981#if ENABLE_FEATURE_FIND_PRUNE 997#if ENABLE_FEATURE_FIND_PRUNE
982 else if (parm == PARM_prune) { 998 else if (parm == PARM_prune) {
999 dbg("%d", __LINE__);
983 (void) ALLOC_ACTION(prune); 1000 (void) ALLOC_ACTION(prune);
984 } 1001 }
985#endif 1002#endif
986#if ENABLE_FEATURE_FIND_DELETE 1003#if ENABLE_FEATURE_FIND_DELETE
987 else if (parm == PARM_delete) { 1004 else if (parm == PARM_delete) {
1005 dbg("%d", __LINE__);
988 G.need_print = 0; 1006 G.need_print = 0;
989 G.recurse_flags |= ACTION_DEPTHFIRST; 1007 G.recurse_flags |= ACTION_DEPTHFIRST;
990 (void) ALLOC_ACTION(delete); 1008 (void) ALLOC_ACTION(delete);
@@ -994,6 +1012,7 @@ static action*** parse_params(char **argv)
994 else if (parm == PARM_exec) { 1012 else if (parm == PARM_exec) {
995 int i; 1013 int i;
996 action_exec *ap; 1014 action_exec *ap;
1015 dbg("%d", __LINE__);
997 G.need_print = 0; 1016 G.need_print = 0;
998 ap = ALLOC_ACTION(exec); 1017 ap = ALLOC_ACTION(exec);
999 ap->exec_argv = ++argv; /* first arg after -exec */ 1018 ap->exec_argv = ++argv; /* first arg after -exec */
@@ -1028,6 +1047,7 @@ static action*** parse_params(char **argv)
1028 char **endarg; 1047 char **endarg;
1029 unsigned nested = 1; 1048 unsigned nested = 1;
1030 1049
1050 dbg("%d", __LINE__);
1031 endarg = argv; 1051 endarg = argv;
1032 while (1) { 1052 while (1) {
1033 if (!*++endarg) 1053 if (!*++endarg)
@@ -1047,6 +1067,7 @@ static action*** parse_params(char **argv)
1047#endif 1067#endif
1048 else if (parm == PARM_name || parm == PARM_iname) { 1068 else if (parm == PARM_name || parm == PARM_iname) {
1049 action_name *ap; 1069 action_name *ap;
1070 dbg("%d", __LINE__);
1050 ap = ALLOC_ACTION(name); 1071 ap = ALLOC_ACTION(name);
1051 ap->pattern = arg1; 1072 ap->pattern = arg1;
1052 ap->iname = (parm == PARM_iname); 1073 ap->iname = (parm == PARM_iname);
@@ -1054,6 +1075,7 @@ static action*** parse_params(char **argv)
1054#if ENABLE_FEATURE_FIND_PATH 1075#if ENABLE_FEATURE_FIND_PATH
1055 else if (parm == PARM_path || parm == PARM_ipath) { 1076 else if (parm == PARM_path || parm == PARM_ipath) {
1056 action_path *ap; 1077 action_path *ap;
1078 dbg("%d", __LINE__);
1057 ap = ALLOC_ACTION(path); 1079 ap = ALLOC_ACTION(path);
1058 ap->pattern = arg1; 1080 ap->pattern = arg1;
1059 ap->ipath = (parm == PARM_ipath); 1081 ap->ipath = (parm == PARM_ipath);
@@ -1062,6 +1084,7 @@ static action*** parse_params(char **argv)
1062#if ENABLE_FEATURE_FIND_REGEX 1084#if ENABLE_FEATURE_FIND_REGEX
1063 else if (parm == PARM_regex) { 1085 else if (parm == PARM_regex) {
1064 action_regex *ap; 1086 action_regex *ap;
1087 dbg("%d", __LINE__);
1065 ap = ALLOC_ACTION(regex); 1088 ap = ALLOC_ACTION(regex);
1066 xregcomp(&ap->compiled_pattern, arg1, 0 /*cflags*/); 1089 xregcomp(&ap->compiled_pattern, arg1, 0 /*cflags*/);
1067 } 1090 }
@@ -1071,6 +1094,7 @@ static action*** parse_params(char **argv)
1071 action_type *ap; 1094 action_type *ap;
1072 ap = ALLOC_ACTION(type); 1095 ap = ALLOC_ACTION(type);
1073 ap->type_mask = find_type(arg1); 1096 ap->type_mask = find_type(arg1);
1097 dbg("created:type mask:%x", ap->type_mask);
1074 } 1098 }
1075#endif 1099#endif
1076#if ENABLE_FEATURE_FIND_PERM 1100#if ENABLE_FEATURE_FIND_PERM
@@ -1081,6 +1105,7 @@ static action*** parse_params(char **argv)
1081 */ 1105 */
1082 else if (parm == PARM_perm) { 1106 else if (parm == PARM_perm) {
1083 action_perm *ap; 1107 action_perm *ap;
1108 dbg("%d", __LINE__);
1084 ap = ALLOC_ACTION(perm); 1109 ap = ALLOC_ACTION(perm);
1085 ap->perm_char = arg1[0]; 1110 ap->perm_char = arg1[0];
1086 arg1 = plus_minus_num(arg1); 1111 arg1 = plus_minus_num(arg1);
@@ -1092,6 +1117,7 @@ static action*** parse_params(char **argv)
1092#if ENABLE_FEATURE_FIND_MTIME 1117#if ENABLE_FEATURE_FIND_MTIME
1093 else if (parm == PARM_mtime) { 1118 else if (parm == PARM_mtime) {
1094 action_mtime *ap; 1119 action_mtime *ap;
1120 dbg("%d", __LINE__);
1095 ap = ALLOC_ACTION(mtime); 1121 ap = ALLOC_ACTION(mtime);
1096 ap->mtime_char = arg1[0]; 1122 ap->mtime_char = arg1[0];
1097 ap->mtime_days = xatoul(plus_minus_num(arg1)); 1123 ap->mtime_days = xatoul(plus_minus_num(arg1));
@@ -1100,6 +1126,7 @@ static action*** parse_params(char **argv)
1100#if ENABLE_FEATURE_FIND_MMIN 1126#if ENABLE_FEATURE_FIND_MMIN
1101 else if (parm == PARM_mmin) { 1127 else if (parm == PARM_mmin) {
1102 action_mmin *ap; 1128 action_mmin *ap;
1129 dbg("%d", __LINE__);
1103 ap = ALLOC_ACTION(mmin); 1130 ap = ALLOC_ACTION(mmin);
1104 ap->mmin_char = arg1[0]; 1131 ap->mmin_char = arg1[0];
1105 ap->mmin_mins = xatoul(plus_minus_num(arg1)); 1132 ap->mmin_mins = xatoul(plus_minus_num(arg1));
@@ -1109,6 +1136,7 @@ static action*** parse_params(char **argv)
1109 else if (parm == PARM_newer) { 1136 else if (parm == PARM_newer) {
1110 struct stat stat_newer; 1137 struct stat stat_newer;
1111 action_newer *ap; 1138 action_newer *ap;
1139 dbg("%d", __LINE__);
1112 ap = ALLOC_ACTION(newer); 1140 ap = ALLOC_ACTION(newer);
1113 xstat(arg1, &stat_newer); 1141 xstat(arg1, &stat_newer);
1114 ap->newer_mtime = stat_newer.st_mtime; 1142 ap->newer_mtime = stat_newer.st_mtime;
@@ -1117,6 +1145,7 @@ static action*** parse_params(char **argv)
1117#if ENABLE_FEATURE_FIND_INUM 1145#if ENABLE_FEATURE_FIND_INUM
1118 else if (parm == PARM_inum) { 1146 else if (parm == PARM_inum) {
1119 action_inum *ap; 1147 action_inum *ap;
1148 dbg("%d", __LINE__);
1120 ap = ALLOC_ACTION(inum); 1149 ap = ALLOC_ACTION(inum);
1121 ap->inode_num = xatoul(arg1); 1150 ap->inode_num = xatoul(arg1);
1122 } 1151 }
@@ -1124,6 +1153,7 @@ static action*** parse_params(char **argv)
1124#if ENABLE_FEATURE_FIND_USER 1153#if ENABLE_FEATURE_FIND_USER
1125 else if (parm == PARM_user) { 1154 else if (parm == PARM_user) {
1126 action_user *ap; 1155 action_user *ap;
1156 dbg("%d", __LINE__);
1127 ap = ALLOC_ACTION(user); 1157 ap = ALLOC_ACTION(user);
1128 ap->uid = bb_strtou(arg1, NULL, 10); 1158 ap->uid = bb_strtou(arg1, NULL, 10);
1129 if (errno) 1159 if (errno)
@@ -1133,6 +1163,7 @@ static action*** parse_params(char **argv)
1133#if ENABLE_FEATURE_FIND_GROUP 1163#if ENABLE_FEATURE_FIND_GROUP
1134 else if (parm == PARM_group) { 1164 else if (parm == PARM_group) {
1135 action_group *ap; 1165 action_group *ap;
1166 dbg("%d", __LINE__);
1136 ap = ALLOC_ACTION(group); 1167 ap = ALLOC_ACTION(group);
1137 ap->gid = bb_strtou(arg1, NULL, 10); 1168 ap->gid = bb_strtou(arg1, NULL, 10);
1138 if (errno) 1169 if (errno)
@@ -1161,6 +1192,7 @@ static action*** parse_params(char **argv)
1161 { "", 0 } 1192 { "", 0 }
1162 }; 1193 };
1163 action_size *ap; 1194 action_size *ap;
1195 dbg("%d", __LINE__);
1164 ap = ALLOC_ACTION(size); 1196 ap = ALLOC_ACTION(size);
1165 ap->size_char = arg1[0]; 1197 ap->size_char = arg1[0];
1166 ap->size = XATOU_SFX(plus_minus_num(arg1), find_suffixes); 1198 ap->size = XATOU_SFX(plus_minus_num(arg1), find_suffixes);
@@ -1169,6 +1201,7 @@ static action*** parse_params(char **argv)
1169#if ENABLE_FEATURE_FIND_CONTEXT 1201#if ENABLE_FEATURE_FIND_CONTEXT
1170 else if (parm == PARM_context) { 1202 else if (parm == PARM_context) {
1171 action_context *ap; 1203 action_context *ap;
1204 dbg("%d", __LINE__);
1172 ap = ALLOC_ACTION(context); 1205 ap = ALLOC_ACTION(context);
1173 /*ap->context = NULL; - ALLOC_ACTION did it */ 1206 /*ap->context = NULL; - ALLOC_ACTION did it */
1174 /* SELinux headers erroneously declare non-const parameter */ 1207 /* SELinux headers erroneously declare non-const parameter */
@@ -1179,6 +1212,7 @@ static action*** parse_params(char **argv)
1179#if ENABLE_FEATURE_FIND_LINKS 1212#if ENABLE_FEATURE_FIND_LINKS
1180 else if (parm == PARM_links) { 1213 else if (parm == PARM_links) {
1181 action_links *ap; 1214 action_links *ap;
1215 dbg("%d", __LINE__);
1182 ap = ALLOC_ACTION(links); 1216 ap = ALLOC_ACTION(links);
1183 ap->links_char = arg1[0]; 1217 ap->links_char = arg1[0];
1184 ap->links_count = xatoul(plus_minus_num(arg1)); 1218 ap->links_count = xatoul(plus_minus_num(arg1));
@@ -1190,6 +1224,7 @@ static action*** parse_params(char **argv)
1190 } 1224 }
1191 argv++; 1225 argv++;
1192 } 1226 }
1227 dbg("exiting %s", __func__);
1193 return appp; 1228 return appp;
1194#undef ALLOC_ACTION 1229#undef ALLOC_ACTION
1195} 1230}
diff --git a/include/applets.src.h b/include/applets.src.h
index 2d55ffec7..87d9cbb7b 100644
--- a/include/applets.src.h
+++ b/include/applets.src.h
@@ -409,7 +409,6 @@ IF_WATCHDOG(APPLET(watchdog, BB_DIR_SBIN, BB_SUID_DROP))
409IF_WC(APPLET(wc, BB_DIR_USR_BIN, BB_SUID_DROP)) 409IF_WC(APPLET(wc, BB_DIR_USR_BIN, BB_SUID_DROP))
410IF_WGET(APPLET(wget, BB_DIR_USR_BIN, BB_SUID_DROP)) 410IF_WGET(APPLET(wget, BB_DIR_USR_BIN, BB_SUID_DROP))
411IF_WHICH(APPLET(which, BB_DIR_USR_BIN, BB_SUID_DROP)) 411IF_WHICH(APPLET(which, BB_DIR_USR_BIN, BB_SUID_DROP))
412IF_WHO(APPLET(who, BB_DIR_USR_BIN, BB_SUID_DROP))
413IF_WHOAMI(APPLET_NOFORK(whoami, whoami, BB_DIR_USR_BIN, BB_SUID_DROP, whoami)) 412IF_WHOAMI(APPLET_NOFORK(whoami, whoami, BB_DIR_USR_BIN, BB_SUID_DROP, whoami))
414IF_UNXZ(APPLET_ODDNAME(xzcat, unxz, BB_DIR_USR_BIN, BB_SUID_DROP, xzcat)) 413IF_UNXZ(APPLET_ODDNAME(xzcat, unxz, BB_DIR_USR_BIN, BB_SUID_DROP, xzcat))
415IF_XZ(APPLET_ODDNAME(xz, unxz, BB_DIR_USR_BIN, BB_SUID_DROP, xz)) 414IF_XZ(APPLET_ODDNAME(xz, unxz, BB_DIR_USR_BIN, BB_SUID_DROP, xz))
diff --git a/include/libbb.h b/include/libbb.h
index 363fe53df..6e63e65f5 100644
--- a/include/libbb.h
+++ b/include/libbb.h
@@ -52,6 +52,12 @@
52#ifdef HAVE_SYS_STATFS_H 52#ifdef HAVE_SYS_STATFS_H
53# include <sys/statfs.h> 53# include <sys/statfs.h>
54#endif 54#endif
55/* Don't do this here:
56 * #include <sys/sysinfo.h>
57 * Some linux/ includes pull in conflicting definition
58 * of struct sysinfo (only in some toolchanins), which breaks build.
59 * Include sys/sysinfo.h only in those files which need it.
60 */
55#if ENABLE_SELINUX 61#if ENABLE_SELINUX
56# include <selinux/selinux.h> 62# include <selinux/selinux.h>
57# include <selinux/context.h> 63# include <selinux/context.h>
@@ -142,25 +148,6 @@ int klogctl(int type, char *b, int len);
142#if !defined __FreeBSD__ 148#if !defined __FreeBSD__
143char *dirname(char *path); 149char *dirname(char *path);
144#endif 150#endif
145/* Include our own copy of struct sysinfo to avoid binary compatibility
146 * problems with Linux 2.4, which changed things. Grumble, grumble. */
147struct sysinfo {
148 long uptime; /* Seconds since boot */
149 unsigned long loads[3]; /* 1, 5, and 15 minute load averages */
150 unsigned long totalram; /* Total usable main memory size */
151 unsigned long freeram; /* Available memory size */
152 unsigned long sharedram; /* Amount of shared memory */
153 unsigned long bufferram; /* Memory used by buffers */
154 unsigned long totalswap; /* Total swap space size */
155 unsigned long freeswap; /* swap space still available */
156 unsigned short procs; /* Number of current processes */
157 unsigned short pad; /* Padding needed for m68k */
158 unsigned long totalhigh; /* Total high memory size */
159 unsigned long freehigh; /* Available high memory size */
160 unsigned int mem_unit; /* Memory unit size in bytes */
161 char _f[20 - 2 * sizeof(long) - sizeof(int)]; /* Padding: libc5 uses this.. */
162};
163int sysinfo(struct sysinfo* info);
164#ifndef PATH_MAX 151#ifndef PATH_MAX
165# define PATH_MAX 256 152# define PATH_MAX 256
166#endif 153#endif
diff --git a/include/platform.h b/include/platform.h
index 319ef4a9e..e22c42007 100644
--- a/include/platform.h
+++ b/include/platform.h
@@ -125,7 +125,7 @@
125 125
126/* Make all declarations hidden (-fvisibility flag only affects definitions) */ 126/* Make all declarations hidden (-fvisibility flag only affects definitions) */
127/* (don't include system headers after this until corresponding pop!) */ 127/* (don't include system headers after this until corresponding pop!) */
128#if __GNUC_PREREQ(4,1) && !ENABLE_PLATFORM_MINGW32 128#if __GNUC_PREREQ(4,1) && !defined(__CYGWIN__) && !ENABLE_PLATFORM_MINGW32
129# define PUSH_AND_SET_FUNCTION_VISIBILITY_TO_HIDDEN _Pragma("GCC visibility push(hidden)") 129# define PUSH_AND_SET_FUNCTION_VISIBILITY_TO_HIDDEN _Pragma("GCC visibility push(hidden)")
130# define POP_SAVED_FUNCTION_VISIBILITY _Pragma("GCC visibility pop") 130# define POP_SAVED_FUNCTION_VISIBILITY _Pragma("GCC visibility pop")
131#else 131#else
@@ -283,6 +283,7 @@ typedef unsigned smalluint;
283#if defined __GLIBC__ \ 283#if defined __GLIBC__ \
284 || defined __UCLIBC__ \ 284 || defined __UCLIBC__ \
285 || defined __dietlibc__ \ 285 || defined __dietlibc__ \
286 || defined __BIONIC__ \
286 || defined _NEWLIB_VERSION 287 || defined _NEWLIB_VERSION
287# include <features.h> 288# include <features.h>
288#endif 289#endif
@@ -346,6 +347,10 @@ typedef unsigned smalluint;
346# endif 347# endif
347#endif 348#endif
348 349
350#if defined(__CYGWIN__)
351# define MAXSYMLINKS SYMLOOP_MAX
352#endif
353
349 354
350/* ---- Who misses what? ------------------------------------ */ 355/* ---- Who misses what? ------------------------------------ */
351 356
@@ -423,6 +428,15 @@ typedef unsigned smalluint;
423# undef HAVE_NET_ETHERNET_H 428# undef HAVE_NET_ETHERNET_H
424#endif 429#endif
425 430
431#if defined(__CYGWIN__)
432# undef HAVE_CLEARENV
433# undef HAVE_FDPRINTF
434# undef HAVE_MEMRCHR
435# undef HAVE_PTSNAME_R
436# undef HAVE_STRVERSCMP
437# undef HAVE_UNLOCKED_LINE_OPS
438#endif
439
426/* These BSD-derived OSes share many similarities */ 440/* These BSD-derived OSes share many similarities */
427#if (defined __digital__ && defined __unix__) \ 441#if (defined __digital__ && defined __unix__) \
428 || defined __APPLE__ \ 442 || defined __APPLE__ \
@@ -515,7 +529,8 @@ extern int vasprintf(char **string_ptr, const char *format, va_list p) FAST_FUNC
515#endif 529#endif
516 530
517#ifndef HAVE_GETLINE 531#ifndef HAVE_GETLINE
518#include <stdio.h> /* for FILE */ 532# include <stdio.h> /* for FILE */
533# include <sys/types.h> /* size_t */
519extern ssize_t getline(char **lineptr, size_t *n, FILE *stream) FAST_FUNC; 534extern ssize_t getline(char **lineptr, size_t *n, FILE *stream) FAST_FUNC;
520#endif 535#endif
521 536
diff --git a/init/halt.c b/init/halt.c
index 1aac0faf9..7974adb17 100644
--- a/init/halt.c
+++ b/init/halt.c
@@ -159,7 +159,7 @@ int halt_main(int argc UNUSED_PARAM, char **argv)
159 which == 2 ? "6" : "0", 159 which == 2 ? "6" : "0",
160 (char *)NULL 160 (char *)NULL
161 ); 161 );
162 perror_msg_and_die("can't execute '%s'", 162 bb_perror_msg_and_die("can't execute '%s'",
163 CONFIG_TELINIT_PATH); 163 CONFIG_TELINIT_PATH);
164 } 164 }
165 } 165 }
diff --git a/init/init.c b/init/init.c
index ff9dc06a4..645f694c0 100644
--- a/init/init.c
+++ b/init/init.c
@@ -113,7 +113,8 @@
113#include <paths.h> 113#include <paths.h>
114#include <sys/resource.h> 114#include <sys/resource.h>
115#ifdef __linux__ 115#ifdef __linux__
116#include <linux/vt.h> 116# include <linux/vt.h>
117# include <sys/sysinfo.h>
117#endif 118#endif
118#include "reboot.h" /* reboot() constants */ 119#include "reboot.h" /* reboot() constants */
119 120
diff --git a/libbb/Config.src b/libbb/Config.src
index 0ea8f43ab..aa442365a 100644
--- a/libbb/Config.src
+++ b/libbb/Config.src
@@ -94,6 +94,14 @@ config FEATURE_EDITING_SAVEHISTORY
94 help 94 help
95 Enable history saving in shells. 95 Enable history saving in shells.
96 96
97config FEATURE_REVERSE_SEARCH
98 bool "Reverse history search"
99 default y
100 depends on FEATURE_EDITING_SAVEHISTORY
101 help
102 Enable readline-like Ctrl-R combination for reverse history search.
103 Increases code by about 0.5k.
104
97config FEATURE_TAB_COMPLETION 105config FEATURE_TAB_COMPLETION
98 bool "Tab completion" 106 bool "Tab completion"
99 default y 107 default y
diff --git a/libbb/Kbuild.src b/libbb/Kbuild.src
index fcab184e0..b5e9afc78 100644
--- a/libbb/Kbuild.src
+++ b/libbb/Kbuild.src
@@ -128,6 +128,15 @@ lib-$(CONFIG_FEATURE_MTAB_SUPPORT) += mtab.o
128lib-$(CONFIG_UNICODE_SUPPORT) += unicode.o 128lib-$(CONFIG_UNICODE_SUPPORT) += unicode.o
129lib-$(CONFIG_FEATURE_CHECK_NAMES) += die_if_bad_username.o 129lib-$(CONFIG_FEATURE_CHECK_NAMES) += die_if_bad_username.o
130 130
131lib-$(CONFIG_NC) += udp_io.o
132lib-$(CONFIG_DNSD) += udp_io.o
133lib-$(CONFIG_NTPD) += udp_io.o
134lib-$(CONFIG_TFTP) += udp_io.o
135lib-$(CONFIG_TFTPD) += udp_io.o
136lib-$(CONFIG_TCPSVD) += udp_io.o
137lib-$(CONFIG_UDPSVD) += udp_io.o
138lib-$(CONFIG_TRACEROUTE) += udp_io.o
139
131lib-$(CONFIG_LOSETUP) += loop.o 140lib-$(CONFIG_LOSETUP) += loop.o
132lib-$(CONFIG_FEATURE_MOUNT_LOOP) += loop.o 141lib-$(CONFIG_FEATURE_MOUNT_LOOP) += loop.o
133 142
diff --git a/libbb/appletlib.c b/libbb/appletlib.c
index b824b4775..6d002b0dd 100644
--- a/libbb/appletlib.c
+++ b/libbb/appletlib.c
@@ -627,7 +627,7 @@ static int busybox_main(char **argv)
627 full_write2_str(bb_banner); /* reuse const string */ 627 full_write2_str(bb_banner); /* reuse const string */
628 full_write2_str(" multi-call binary.\n"); /* reuse */ 628 full_write2_str(" multi-call binary.\n"); /* reuse */
629 full_write2_str( 629 full_write2_str(
630 "Copyright (C) 1998-2009 Erik Andersen, Rob Landley, Denys Vlasenko\n" 630 "Copyright (C) 1998-2011 Erik Andersen, Rob Landley, Denys Vlasenko\n"
631 "and others. Licensed under GPLv2.\n" 631 "and others. Licensed under GPLv2.\n"
632 "See source distribution for full notice.\n" 632 "See source distribution for full notice.\n"
633 "\n" 633 "\n"
diff --git a/libbb/die_if_bad_username.c b/libbb/die_if_bad_username.c
index 9946e3a1d..cf1297bd6 100644
--- a/libbb/die_if_bad_username.c
+++ b/libbb/die_if_bad_username.c
@@ -18,23 +18,45 @@
18 18
19void FAST_FUNC die_if_bad_username(const char *name) 19void FAST_FUNC die_if_bad_username(const char *name)
20{ 20{
21 /* 1st char being dash or dot isn't valid: */ 21 const char *start = name;
22 goto skip; 22
23 /* For example, name like ".." can make adduser 23 /* 1st char being dash or dot isn't valid:
24 * chown "/home/.." recursively - NOT GOOD 24 * for example, name like ".." can make adduser
25 * chown "/home/.." recursively - NOT GOOD.
26 * Name of just a single "$" is also rejected.
25 */ 27 */
28 goto skip;
26 29
27 do { 30 do {
28 if (*name == '-' || *name == '.') 31 unsigned char ch;
32
33 /* These chars are valid unless they are at the 1st pos: */
34 if (*name == '-'
35 || *name == '.'
36 /* $ is allowed if it's the last char: */
37 || (*name == '$' && !name[1])
38 ) {
29 continue; 39 continue;
40 }
30 skip: 41 skip:
31 if (isalnum(*name) 42 ch = *name;
32 || *name == '_' 43 if (ch == '_'
33 || *name == '@' 44 /* || ch == '@' -- we disallow this too. Think about "user@host" */
34 || (*name == '$' && !name[1]) 45 /* open-coded isalnum: */
46 || (ch >= '0' && ch <= '9')
47 || ((ch|0x20) >= 'a' && (ch|0x20) <= 'z')
35 ) { 48 ) {
36 continue; 49 continue;
37 } 50 }
38 bb_error_msg_and_die("illegal character '%c'", *name); 51 bb_error_msg_and_die("illegal character with code %u at position %u",
52 (unsigned)ch, (unsigned)(name - start));
39 } while (*++name); 53 } while (*++name);
54
55 /* The minimum size of the login name is one char or two if
56 * last char is the '$'. Violations of this are caught above.
57 * The maximum size of the login name is LOGIN_NAME_MAX
58 * including the terminating null byte.
59 */
60 if (name - start >= LOGIN_NAME_MAX)
61 bb_error_msg_and_die("name is too long");
40} 62}
diff --git a/libbb/getopt32.c b/libbb/getopt32.c
index 02cbefec9..ae019b26b 100644
--- a/libbb/getopt32.c
+++ b/libbb/getopt32.c
@@ -467,13 +467,17 @@ getopt32(char **argv, const char *applet_opts, ...)
467 } 467 }
468 for (on_off = complementary; on_off->opt_char; on_off++) 468 for (on_off = complementary; on_off->opt_char; on_off++)
469 if (on_off->opt_char == *s) 469 if (on_off->opt_char == *s)
470 break; 470 goto found_opt;
471 /* Without this, diagnostic of such bugs is not easy */
472 bb_error_msg_and_die("NO OPT %c!", *s);
473 found_opt:
471 if (c == ':' && s[2] == ':') { 474 if (c == ':' && s[2] == ':') {
472 on_off->param_type = PARAM_LIST; 475 on_off->param_type = PARAM_LIST;
473 continue; 476 continue;
474 } 477 }
475 if (c == '+' && (s[2] == ':' || s[2] == '\0')) { 478 if (c == '+' && (s[2] == ':' || s[2] == '\0')) {
476 on_off->param_type = PARAM_INT; 479 on_off->param_type = PARAM_INT;
480 s++;
477 continue; 481 continue;
478 } 482 }
479 if (c == ':' || c == '\0') { 483 if (c == ':' || c == '\0') {
diff --git a/libbb/inet_common.c b/libbb/inet_common.c
index 207720e96..7208db9ea 100644
--- a/libbb/inet_common.c
+++ b/libbb/inet_common.c
@@ -175,7 +175,8 @@ int FAST_FUNC INET6_resolve(const char *name, struct sockaddr_in6 *sin6)
175 return -1; 175 return -1;
176 } 176 }
177 memcpy(sin6, ai->ai_addr, sizeof(*sin6)); 177 memcpy(sin6, ai->ai_addr, sizeof(*sin6));
178 freeaddrinfo(ai); 178 if (ai)
179 freeaddrinfo(ai);
179 return 0; 180 return 0;
180} 181}
181 182
diff --git a/libbb/lineedit.c b/libbb/lineedit.c
index e443c7a3e..1b97e8609 100644
--- a/libbb/lineedit.c
+++ b/libbb/lineedit.c
@@ -207,18 +207,21 @@ static void deinit_S(void)
207 207
208 208
209#if ENABLE_UNICODE_SUPPORT 209#if ENABLE_UNICODE_SUPPORT
210static size_t load_string(const char *src, int maxsize) 210static size_t load_string(const char *src)
211{ 211{
212 if (unicode_status == UNICODE_ON) { 212 if (unicode_status == UNICODE_ON) {
213 ssize_t len = mbstowcs(command_ps, src, maxsize - 1); 213 ssize_t len = mbstowcs(command_ps, src, S.maxsize - 1);
214 if (len < 0) 214 if (len < 0)
215 len = 0; 215 len = 0;
216 command_ps[len] = BB_NUL; 216 command_ps[len] = BB_NUL;
217 return len; 217 return len;
218 } else { 218 } else {
219 unsigned i = 0; 219 unsigned i = 0;
220 while ((command_ps[i] = src[i]) != 0) 220 while (src[i] && i < S.maxsize - 1) {
221 command_ps[i] = src[i];
221 i++; 222 i++;
223 }
224 command_ps[i] = BB_NUL;
222 return i; 225 return i;
223 } 226 }
224} 227}
@@ -319,9 +322,9 @@ static wchar_t adjust_width_and_validate_wc(wchar_t wc)
319 return wc; 322 return wc;
320} 323}
321#else /* !UNICODE */ 324#else /* !UNICODE */
322static size_t load_string(const char *src, int maxsize) 325static size_t load_string(const char *src)
323{ 326{
324 safe_strncpy(command_ps, src, maxsize); 327 safe_strncpy(command_ps, src, S.maxsize);
325 return strlen(command_ps); 328 return strlen(command_ps);
326} 329}
327# if ENABLE_FEATURE_TAB_COMPLETION 330# if ENABLE_FEATURE_TAB_COMPLETION
@@ -1232,10 +1235,10 @@ static NOINLINE void input_tab(smallint *lastWasTab)
1232 strcpy(match_buf, &command[cursor_mb]); 1235 strcpy(match_buf, &command[cursor_mb]);
1233 /* where do we want to have cursor after all? */ 1236 /* where do we want to have cursor after all? */
1234 strcpy(&command[cursor_mb], chosen_match + match_pfx_len); 1237 strcpy(&command[cursor_mb], chosen_match + match_pfx_len);
1235 len = load_string(command, S.maxsize); 1238 len = load_string(command);
1236 /* add match and tail */ 1239 /* add match and tail */
1237 sprintf(&command[cursor_mb], "%s%s", chosen_match + match_pfx_len, match_buf); 1240 sprintf(&command[cursor_mb], "%s%s", chosen_match + match_pfx_len, match_buf);
1238 command_len = load_string(command, S.maxsize); 1241 command_len = load_string(command);
1239 /* write out the matched command */ 1242 /* write out the matched command */
1240 /* paranoia: load_string can return 0 on conv error, 1243 /* paranoia: load_string can return 0 on conv error,
1241 * prevent passing pos = (0 - 12) to redraw */ 1244 * prevent passing pos = (0 - 12) to redraw */
@@ -1956,6 +1959,140 @@ static int isrtl_str(void)
1956#undef CTRL 1959#undef CTRL
1957#define CTRL(a) ((a) & ~0x40) 1960#define CTRL(a) ((a) & ~0x40)
1958 1961
1962enum {
1963 VI_CMDMODE_BIT = 0x40000000,
1964 /* 0x80000000 bit flags KEYCODE_xxx */
1965};
1966
1967#if ENABLE_FEATURE_REVERSE_SEARCH
1968/* Mimic readline Ctrl-R reverse history search.
1969 * When invoked, it shows the following prompt:
1970 * (reverse-i-search)'': user_input [cursor pos unchanged by Ctrl-R]
1971 * and typing results in search being performed:
1972 * (reverse-i-search)'tmp': cd /tmp [cursor under t in /tmp]
1973 * Search is performed by looking at progressively older lines in history.
1974 * Ctrl-R again searches for the next match in history.
1975 * Backspace deletes last matched char.
1976 * Control keys exit search and return to normal editing (at current history line).
1977 */
1978static int32_t reverse_i_search(void)
1979{
1980 char match_buf[128]; /* for user input */
1981 char read_key_buffer[KEYCODE_BUFFER_SIZE];
1982 const char *matched_history_line;
1983 const char *saved_prompt;
1984 int32_t ic;
1985
1986 matched_history_line = NULL;
1987 read_key_buffer[0] = 0;
1988 match_buf[0] = '\0';
1989
1990 /* Save and replace the prompt */
1991 saved_prompt = cmdedit_prompt;
1992 goto set_prompt;
1993
1994 while (1) {
1995 int h;
1996 unsigned match_buf_len = strlen(match_buf);
1997
1998 fflush_all();
1999//FIXME: correct timeout?
2000 ic = lineedit_read_key(read_key_buffer, -1);
2001
2002 switch (ic) {
2003 case CTRL('R'): /* searching for the next match */
2004 break;
2005
2006 case '\b':
2007 case '\x7f':
2008 /* Backspace */
2009 if (unicode_status == UNICODE_ON) {
2010 while (match_buf_len != 0) {
2011 uint8_t c = match_buf[--match_buf_len];
2012 if ((c & 0xc0) != 0x80) /* start of UTF-8 char? */
2013 break; /* yes */
2014 }
2015 } else {
2016 if (match_buf_len != 0)
2017 match_buf_len--;
2018 }
2019 match_buf[match_buf_len] = '\0';
2020 break;
2021
2022 default:
2023 if (ic < ' '
2024 || (!ENABLE_UNICODE_SUPPORT && ic >= 256)
2025 || (ENABLE_UNICODE_SUPPORT && ic >= VI_CMDMODE_BIT)
2026 ) {
2027 goto ret;
2028 }
2029
2030 /* Append this char */
2031#if ENABLE_UNICODE_SUPPORT
2032 if (unicode_status == UNICODE_ON) {
2033 mbstate_t mbstate = { 0 };
2034 char buf[MB_CUR_MAX + 1];
2035 int len = wcrtomb(buf, ic, &mbstate);
2036 if (len > 0) {
2037 buf[len] = '\0';
2038 if (match_buf_len + len < sizeof(match_buf))
2039 strcpy(match_buf + match_buf_len, buf);
2040 }
2041 } else
2042#endif
2043 if (match_buf_len < sizeof(match_buf) - 1) {
2044 match_buf[match_buf_len] = ic;
2045 match_buf[match_buf_len + 1] = '\0';
2046 }
2047 break;
2048 } /* switch (ic) */
2049
2050 /* Search in history for match_buf */
2051 h = state->cur_history;
2052 if (ic == CTRL('R'))
2053 h--;
2054 while (h >= 0) {
2055 if (state->history[h]) {
2056 char *match = strstr(state->history[h], match_buf);
2057 if (match) {
2058 state->cur_history = h;
2059 matched_history_line = state->history[h];
2060 command_len = load_string(matched_history_line);
2061 cursor = match - matched_history_line;
2062//FIXME: cursor position for Unicode case
2063
2064 free((char*)cmdedit_prompt);
2065 set_prompt:
2066 cmdedit_prompt = xasprintf("(reverse-i-search)'%s': ", match_buf);
2067 cmdedit_prmt_len = strlen(cmdedit_prompt);
2068 goto do_redraw;
2069 }
2070 }
2071 h--;
2072 }
2073
2074 /* Not found */
2075 match_buf[match_buf_len] = '\0';
2076 beep();
2077 continue;
2078
2079 do_redraw:
2080 redraw(cmdedit_y, command_len - cursor);
2081 } /* while (1) */
2082
2083 ret:
2084 if (matched_history_line)
2085 command_len = load_string(matched_history_line);
2086
2087 free((char*)cmdedit_prompt);
2088 cmdedit_prompt = saved_prompt;
2089 cmdedit_prmt_len = strlen(cmdedit_prompt);
2090 redraw(cmdedit_y, command_len - cursor);
2091
2092 return ic;
2093}
2094#endif
2095
1959/* maxsize must be >= 2. 2096/* maxsize must be >= 2.
1960 * Returns: 2097 * Returns:
1961 * -1 on read errors or EOF, or on bare Ctrl-D, 2098 * -1 on read errors or EOF, or on bare Ctrl-D,
@@ -2077,15 +2214,14 @@ int FAST_FUNC read_line_input(line_input_t *st, const char *prompt, char *comman
2077 * clutters the big switch a bit, but keeps all the code 2214 * clutters the big switch a bit, but keeps all the code
2078 * in one place. 2215 * in one place.
2079 */ 2216 */
2080 enum {
2081 VI_CMDMODE_BIT = 0x40000000,
2082 /* 0x80000000 bit flags KEYCODE_xxx */
2083 };
2084 int32_t ic, ic_raw; 2217 int32_t ic, ic_raw;
2085 2218
2086 fflush_all(); 2219 fflush_all();
2087 ic = ic_raw = lineedit_read_key(read_key_buffer, timeout); 2220 ic = ic_raw = lineedit_read_key(read_key_buffer, timeout);
2088 2221
2222#if ENABLE_FEATURE_REVERSE_SEARCH
2223 again:
2224#endif
2089#if ENABLE_FEATURE_EDITING_VI 2225#if ENABLE_FEATURE_EDITING_VI
2090 newdelflag = 1; 2226 newdelflag = 1;
2091 if (vi_cmdmode) { 2227 if (vi_cmdmode) {
@@ -2189,6 +2325,11 @@ int FAST_FUNC read_line_input(line_input_t *st, const char *prompt, char *comman
2189 while (cursor > 0 && !BB_isspace(command_ps[cursor-1])) 2325 while (cursor > 0 && !BB_isspace(command_ps[cursor-1]))
2190 input_backspace(); 2326 input_backspace();
2191 break; 2327 break;
2328#if ENABLE_FEATURE_REVERSE_SEARCH
2329 case CTRL('R'):
2330 ic = ic_raw = reverse_i_search();
2331 goto again;
2332#endif
2192 2333
2193#if ENABLE_FEATURE_EDITING_VI 2334#if ENABLE_FEATURE_EDITING_VI
2194 case 'i'|VI_CMDMODE_BIT: 2335 case 'i'|VI_CMDMODE_BIT:
@@ -2342,7 +2483,7 @@ int FAST_FUNC read_line_input(line_input_t *st, const char *prompt, char *comman
2342 /* Rewrite the line with the selected history item */ 2483 /* Rewrite the line with the selected history item */
2343 /* change command */ 2484 /* change command */
2344 command_len = load_string(state->history[state->cur_history] ? 2485 command_len = load_string(state->history[state->cur_history] ?
2345 state->history[state->cur_history] : "", maxsize); 2486 state->history[state->cur_history] : "");
2346 /* redraw and go to eol (bol, in vi) */ 2487 /* redraw and go to eol (bol, in vi) */
2347 redraw(cmdedit_y, (state->flags & VI_MODE) ? 9999 : 0); 2488 redraw(cmdedit_y, (state->flags & VI_MODE) ? 9999 : 0);
2348 break; 2489 break;
diff --git a/libbb/obscure.c b/libbb/obscure.c
index dd8cd319a..9ecc1f672 100644
--- a/libbb/obscure.c
+++ b/libbb/obscure.c
@@ -109,10 +109,12 @@ static const char *obscure_msg(const char *old_p, const char *new_p, const struc
109 if (string_checker(new_p, pw->pw_name)) { 109 if (string_checker(new_p, pw->pw_name)) {
110 return "similar to username"; 110 return "similar to username";
111 } 111 }
112#ifndef __BIONIC__
112 /* no gecos as-is, as sub-string, reversed, capitalized, doubled */ 113 /* no gecos as-is, as sub-string, reversed, capitalized, doubled */
113 if (pw->pw_gecos[0] && string_checker(new_p, pw->pw_gecos)) { 114 if (pw->pw_gecos[0] && string_checker(new_p, pw->pw_gecos)) {
114 return "similar to gecos"; 115 return "similar to gecos";
115 } 116 }
117#endif
116 /* hostname as-is, as sub-string, reversed, capitalized, doubled */ 118 /* hostname as-is, as sub-string, reversed, capitalized, doubled */
117 hostname = safe_gethostname(); 119 hostname = safe_gethostname();
118 i = string_checker(new_p, hostname); 120 i = string_checker(new_p, hostname);
diff --git a/libbb/read_key.c b/libbb/read_key.c
index 840325c99..5dcd19c3f 100644
--- a/libbb/read_key.c
+++ b/libbb/read_key.c
@@ -214,7 +214,10 @@ int64_t FAST_FUNC read_key(int fd, char *buffer, int timeout)
214 } 214 }
215 n++; 215 n++;
216 /* Try to decipher "ESC [ NNN ; NNN R" sequence */ 216 /* Try to decipher "ESC [ NNN ; NNN R" sequence */
217 if ((ENABLE_FEATURE_EDITING_ASK_TERMINAL || ENABLE_FEATURE_VI_ASK_TERMINAL) 217 if ((ENABLE_FEATURE_EDITING_ASK_TERMINAL
218 || ENABLE_FEATURE_VI_ASK_TERMINAL
219 || ENABLE_FEATURE_LESS_ASK_TERMINAL
220 )
218 && n >= 5 221 && n >= 5
219 && buffer[0] == '[' 222 && buffer[0] == '['
220 && buffer[n-1] == 'R' 223 && buffer[n-1] == 'R'
diff --git a/miscutils/Config.src b/miscutils/Config.src
index 61529141d..b9fc196d8 100644
--- a/miscutils/Config.src
+++ b/miscutils/Config.src
@@ -360,72 +360,6 @@ config FEATURE_LAST_FANCY
360 logged into the system (mimics sysvinit last). +900 bytes. 360 logged into the system (mimics sysvinit last). +900 bytes.
361endchoice 361endchoice
362 362
363config LESS
364 bool "less"
365 default y
366 help
367 'less' is a pager, meaning that it displays text files. It possesses
368 a wide array of features, and is an improvement over 'more'.
369
370config FEATURE_LESS_MAXLINES
371 int "Max number of input lines less will try to eat"
372 default 9999999
373 depends on LESS
374
375config FEATURE_LESS_BRACKETS
376 bool "Enable bracket searching"
377 default y
378 depends on LESS
379 help
380 This option adds the capability to search for matching left and right
381 brackets, facilitating programming.
382
383config FEATURE_LESS_FLAGS
384 bool "Enable extra flags"
385 default y
386 depends on LESS
387 help
388 The extra flags provided do the following:
389
390 The -M flag enables a more sophisticated status line.
391 The -m flag enables a simpler status line with a percentage.
392
393config FEATURE_LESS_MARKS
394 bool "Enable marks"
395 default y
396 depends on LESS
397 help
398 Marks enable positions in a file to be stored for easy reference.
399
400config FEATURE_LESS_REGEXP
401 bool "Enable regular expressions"
402 default y
403 depends on LESS
404 help
405 Enable regular expressions, allowing complex file searches.
406
407config FEATURE_LESS_WINCH
408 bool "Enable automatic resizing on window size changes"
409 default y
410 depends on LESS
411 help
412 Makes less track window size changes.
413
414config FEATURE_LESS_DASHCMD
415 bool "Enable flag changes ('-' command)"
416 default y
417 depends on LESS
418 help
419 This enables the ability to change command-line flags within
420 less itself ('-' keyboard command).
421
422config FEATURE_LESS_LINENUMS
423 bool "Enable dynamic switching of line numbers"
424 default y
425 depends on FEATURE_LESS_DASHCMD
426 help
427 Enables "-N" command.
428
429config HDPARM 363config HDPARM
430 bool "hdparm" 364 bool "hdparm"
431 default y 365 default y
diff --git a/miscutils/adjtimex.c b/miscutils/adjtimex.c
index 98b6ccfbf..c8816e9e7 100644
--- a/miscutils/adjtimex.c
+++ b/miscutils/adjtimex.c
@@ -23,7 +23,11 @@
23//usage: "\n -p TCONST" 23//usage: "\n -p TCONST"
24 24
25#include "libbb.h" 25#include "libbb.h"
26#include <sys/timex.h> 26#ifdef __BIONIC__
27# include <linux/timex.h>
28#else
29# include <sys/timex.h>
30#endif
27 31
28static const uint16_t statlist_bit[] = { 32static const uint16_t statlist_bit[] = {
29 STA_PLL, 33 STA_PLL,
diff --git a/miscutils/dc.c b/miscutils/dc.c
index b080ba133..6903761e4 100644
--- a/miscutils/dc.c
+++ b/miscutils/dc.c
@@ -15,7 +15,7 @@
15//usage: "p - print top of the stack (without popping),\n" 15//usage: "p - print top of the stack (without popping),\n"
16//usage: "f - print entire stack,\n" 16//usage: "f - print entire stack,\n"
17//usage: "o - pop the value and set output radix (must be 10, 16, 8 or 2).\n" 17//usage: "o - pop the value and set output radix (must be 10, 16, 8 or 2).\n"
18//usage: "Examples: 'dc 2 2 add' -> 4, 'dc 8 8 * 2 2 + /' -> 16" 18//usage: "Examples: 'dc 2 2 add p' -> 4, 'dc 8 8 * 2 2 + / p' -> 16"
19//usage: 19//usage:
20//usage:#define dc_example_usage 20//usage:#define dc_example_usage
21//usage: "$ dc 2 2 + p\n" 21//usage: "$ dc 2 2 + p\n"
@@ -245,19 +245,6 @@ static void stack_machine(const char *argument)
245 bb_error_msg_and_die("syntax error at '%s'", argument); 245 bb_error_msg_and_die("syntax error at '%s'", argument);
246} 246}
247 247
248/* return pointer to next token in buffer and set *buffer to one char
249 * past the end of the above mentioned token
250 */
251static char *get_token(char **buffer)
252{
253 char *current = skip_whitespace(*buffer);
254 if (*current != '\0') {
255 *buffer = skip_non_whitespace(current);
256 return current;
257 }
258 return NULL;
259}
260
261int dc_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; 248int dc_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
262int dc_main(int argc UNUSED_PARAM, char **argv) 249int dc_main(int argc UNUSED_PARAM, char **argv)
263{ 250{
@@ -272,16 +259,18 @@ int dc_main(int argc UNUSED_PARAM, char **argv)
272 while ((line = xmalloc_fgetline(stdin)) != NULL) { 259 while ((line = xmalloc_fgetline(stdin)) != NULL) {
273 cursor = line; 260 cursor = line;
274 while (1) { 261 while (1) {
275 token = get_token(&cursor); 262 token = skip_whitespace(cursor);
276 if (!token) 263 if (*token == '\0')
277 break; 264 break;
278 *cursor++ = '\0'; 265 cursor = skip_non_whitespace(token);
266 if (*cursor != '\0')
267 *cursor++ = '\0';
279 stack_machine(token); 268 stack_machine(token);
280 } 269 }
281 free(line); 270 free(line);
282 } 271 }
283 } else { 272 } else {
284 // why? it breaks "dc -2 2 * p" 273 // why? it breaks "dc -2 2 + p"
285 //if (argv[0][0] == '-') 274 //if (argv[0][0] == '-')
286 // bb_show_usage(); 275 // bb_show_usage();
287 do { 276 do {
diff --git a/miscutils/less.c b/miscutils/less.c
index 46024f9f7..9543fb9f9 100644
--- a/miscutils/less.c
+++ b/miscutils/less.c
@@ -21,6 +21,85 @@
21 * redirected input has been read from stdin 21 * redirected input has been read from stdin
22 */ 22 */
23 23
24//config:config LESS
25//config: bool "less"
26//config: default y
27//config: help
28//config: 'less' is a pager, meaning that it displays text files. It possesses
29//config: a wide array of features, and is an improvement over 'more'.
30//config:
31//config:config FEATURE_LESS_MAXLINES
32//config: int "Max number of input lines less will try to eat"
33//config: default 9999999
34//config: depends on LESS
35//config:
36//config:config FEATURE_LESS_BRACKETS
37//config: bool "Enable bracket searching"
38//config: default y
39//config: depends on LESS
40//config: help
41//config: This option adds the capability to search for matching left and right
42//config: brackets, facilitating programming.
43//config:
44//config:config FEATURE_LESS_FLAGS
45//config: bool "Enable extra flags"
46//config: default y
47//config: depends on LESS
48//config: help
49//config: The extra flags provided do the following:
50//config:
51//config: The -M flag enables a more sophisticated status line.
52//config: The -m flag enables a simpler status line with a percentage.
53//config:
54//config:config FEATURE_LESS_MARKS
55//config: bool "Enable marks"
56//config: default y
57//config: depends on LESS
58//config: help
59//config: Marks enable positions in a file to be stored for easy reference.
60//config:
61//config:config FEATURE_LESS_REGEXP
62//config: bool "Enable regular expressions"
63//config: default y
64//config: depends on LESS
65//config: help
66//config: Enable regular expressions, allowing complex file searches.
67//config:
68//config:config FEATURE_LESS_WINCH
69//config: bool "Enable automatic resizing on window size changes"
70//config: default y
71//config: depends on LESS
72//config: help
73//config: Makes less track window size changes.
74//config:
75//config:config FEATURE_LESS_ASK_TERMINAL
76//config: bool "Use 'tell me cursor position' ESC sequence to measure window"
77//config: default y
78//config: depends on FEATURE_LESS_WINCH
79//config: help
80//config: Makes less track window size changes.
81//config: If terminal size can't be retrieved and $LINES/$COLUMNS are not set,
82//config: this option makes less perform a last-ditch effort to find it:
83//config: position cursor to 999,999 and ask terminal to report real
84//config: cursor position using "ESC [ 6 n" escape sequence, then read stdin.
85//config:
86//config: This is not clean but helps a lot on serial lines and such.
87//config:
88//config:config FEATURE_LESS_DASHCMD
89//config: bool "Enable flag changes ('-' command)"
90//config: default y
91//config: depends on LESS
92//config: help
93//config: This enables the ability to change command-line flags within
94//config: less itself ('-' keyboard command).
95//config:
96//config:config FEATURE_LESS_LINENUMS
97//config: bool "Enable dynamic switching of line numbers"
98//config: default y
99//config: depends on FEATURE_LESS_DASHCMD
100//config: help
101//config: Enables "-N" command.
102
24//usage:#define less_trivial_usage 103//usage:#define less_trivial_usage
25//usage: "[-EMNmh~I?] [FILE]..." 104//usage: "[-EMNmh~I?] [FILE]..."
26//usage:#define less_full_usage "\n\n" 105//usage:#define less_full_usage "\n\n"
@@ -108,6 +187,9 @@ struct globals {
108 regex_t pattern; 187 regex_t pattern;
109 smallint pattern_valid; 188 smallint pattern_valid;
110#endif 189#endif
190#if ENABLE_FEATURE_LESS_ASK_TERMINAL
191 smallint winsize_err;
192#endif
111 smallint terminated; 193 smallint terminated;
112 struct termios term_orig, term_less; 194 struct termios term_orig, term_less;
113 char kbd_input[KEYCODE_BUFFER_SIZE]; 195 char kbd_input[KEYCODE_BUFFER_SIZE];
@@ -815,12 +897,17 @@ static void reinitialize(void)
815 cur_fline = 0; 897 cur_fline = 0;
816 max_lineno = 0; 898 max_lineno = 0;
817 open_file_and_read_lines(); 899 open_file_and_read_lines();
900#if ENABLE_FEATURE_LESS_ASK_TERMINAL
901 if (G.winsize_err)
902 printf("\033[999;999H" "\033[6n");
903#endif
818 buffer_fill_and_print(); 904 buffer_fill_and_print();
819} 905}
820 906
821static int getch_nowait(void) 907static int64_t getch_nowait(void)
822{ 908{
823 int rd; 909 int rd;
910 int64_t key64;
824 struct pollfd pfd[2]; 911 struct pollfd pfd[2];
825 912
826 pfd[0].fd = STDIN_FILENO; 913 pfd[0].fd = STDIN_FILENO;
@@ -868,8 +955,8 @@ static int getch_nowait(void)
868 955
869 /* We have kbd_fd in O_NONBLOCK mode, read inside read_key() 956 /* We have kbd_fd in O_NONBLOCK mode, read inside read_key()
870 * would not block even if there is no input available */ 957 * would not block even if there is no input available */
871 rd = read_key(kbd_fd, kbd_input, /*timeout off:*/ -2); 958 key64 = read_key(kbd_fd, kbd_input, /*timeout off:*/ -2);
872 if (rd == -1) { 959 if ((int)key64 == -1) {
873 if (errno == EAGAIN) { 960 if (errno == EAGAIN) {
874 /* No keyboard input available. Since poll() did return, 961 /* No keyboard input available. Since poll() did return,
875 * we should have input on stdin */ 962 * we should have input on stdin */
@@ -881,25 +968,29 @@ static int getch_nowait(void)
881 less_exit(0); 968 less_exit(0);
882 } 969 }
883 set_tty_cooked(); 970 set_tty_cooked();
884 return rd; 971 return key64;
885} 972}
886 973
887/* Grab a character from input without requiring the return key. 974/* Grab a character from input without requiring the return key.
888 * May return KEYCODE_xxx values. 975 * May return KEYCODE_xxx values.
889 * Note that this function works best with raw input. */ 976 * Note that this function works best with raw input. */
890static int less_getch(int pos) 977static int64_t less_getch(int pos)
891{ 978{
892 int i; 979 int64_t key64;
980 int key;
893 981
894 again: 982 again:
895 less_gets_pos = pos; 983 less_gets_pos = pos;
896 i = getch_nowait(); 984 key = key64 = getch_nowait();
897 less_gets_pos = -1; 985 less_gets_pos = -1;
898 986
899 /* Discard Ctrl-something chars */ 987 /* Discard Ctrl-something chars.
900 if (i >= 0 && i < ' ' && i != 0x0d && i != 8) 988 * (checking only lower 32 bits is a size optimization:
989 * upper 32 bits are used only by KEYCODE_CURSOR_POS)
990 */
991 if (key >= 0 && key < ' ' && key != 0x0d && key != 8)
901 goto again; 992 goto again;
902 return i; 993 return key;
903} 994}
904 995
905static char* less_gets(int sz) 996static char* less_gets(int sz)
@@ -1439,6 +1530,9 @@ static void keypress_process(int keypress)
1439 break; 1530 break;
1440#endif 1531#endif
1441 case 'r': case 'R': 1532 case 'r': case 'R':
1533 /* TODO: (1) also bind ^R, ^L to this?
1534 * (2) re-measure window size?
1535 */
1442 buffer_print(); 1536 buffer_print();
1443 break; 1537 break;
1444 /*case 'R': 1538 /*case 'R':
@@ -1514,8 +1608,6 @@ static void sigwinch_handler(int sig UNUSED_PARAM)
1514int less_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; 1608int less_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
1515int less_main(int argc, char **argv) 1609int less_main(int argc, char **argv)
1516{ 1610{
1517 int keypress;
1518
1519 INIT_G(); 1611 INIT_G();
1520 1612
1521 /* TODO: -x: do not interpret backspace, -xx: tab also */ 1613 /* TODO: -x: do not interpret backspace, -xx: tab also */
@@ -1558,7 +1650,7 @@ int less_main(int argc, char **argv)
1558 term_less.c_cc[VMIN] = 1; 1650 term_less.c_cc[VMIN] = 1;
1559 term_less.c_cc[VTIME] = 0; 1651 term_less.c_cc[VTIME] = 0;
1560 1652
1561 get_terminal_width_height(kbd_fd, &width, &max_displayed_line); 1653 IF_FEATURE_LESS_ASK_TERMINAL(G.winsize_err =) get_terminal_width_height(kbd_fd, &width, &max_displayed_line);
1562 /* 20: two tabstops + 4 */ 1654 /* 20: two tabstops + 4 */
1563 if (width < 20 || max_displayed_line < 3) 1655 if (width < 20 || max_displayed_line < 3)
1564 return bb_cat(argv); 1656 return bb_cat(argv);
@@ -1573,11 +1665,14 @@ int less_main(int argc, char **argv)
1573 buffer = xmalloc((max_displayed_line+1) * sizeof(char *)); 1665 buffer = xmalloc((max_displayed_line+1) * sizeof(char *));
1574 reinitialize(); 1666 reinitialize();
1575 while (1) { 1667 while (1) {
1668 int64_t keypress;
1669
1576#if ENABLE_FEATURE_LESS_WINCH 1670#if ENABLE_FEATURE_LESS_WINCH
1577 while (WINCH_COUNTER) { 1671 while (WINCH_COUNTER) {
1578 again: 1672 again:
1579 winch_counter--; 1673 winch_counter--;
1580 get_terminal_width_height(kbd_fd, &width, &max_displayed_line); 1674 IF_FEATURE_LESS_ASK_TERMINAL(G.winsize_err =) get_terminal_width_height(kbd_fd, &width, &max_displayed_line);
1675 IF_FEATURE_LESS_ASK_TERMINAL(got_size:)
1581 /* 20: two tabstops + 4 */ 1676 /* 20: two tabstops + 4 */
1582 if (width < 20) 1677 if (width < 20)
1583 width = 20; 1678 width = 20;
@@ -1597,8 +1692,18 @@ int less_main(int argc, char **argv)
1597 /* This took some time. Loop back and check, 1692 /* This took some time. Loop back and check,
1598 * were there another SIGWINCH? */ 1693 * were there another SIGWINCH? */
1599 } 1694 }
1600#endif
1601 keypress = less_getch(-1); /* -1: do not position cursor */ 1695 keypress = less_getch(-1); /* -1: do not position cursor */
1696# if ENABLE_FEATURE_LESS_ASK_TERMINAL
1697 if ((int32_t)keypress == KEYCODE_CURSOR_POS) {
1698 uint32_t rc = (keypress >> 32);
1699 width = (rc & 0x7fff);
1700 max_displayed_line = ((rc >> 16) & 0x7fff);
1701 goto got_size;
1702 }
1703# endif
1704#else
1705 keypress = less_getch(-1); /* -1: do not position cursor */
1706#endif
1602 keypress_process(keypress); 1707 keypress_process(keypress);
1603 } 1708 }
1604} 1709}
diff --git a/miscutils/nandwrite.c b/miscutils/nandwrite.c
index 768aed116..562a34278 100644
--- a/miscutils/nandwrite.c
+++ b/miscutils/nandwrite.c
@@ -38,7 +38,7 @@
38//usage:#define nanddump_trivial_usage 38//usage:#define nanddump_trivial_usage
39//usage: "[-o] [-b] [-s ADDR] [-f FILE] MTD_DEVICE" 39//usage: "[-o] [-b] [-s ADDR] [-f FILE] MTD_DEVICE"
40//usage:#define nanddump_full_usage "\n\n" 40//usage:#define nanddump_full_usage "\n\n"
41//usage: "Dump the sepcified MTD device\n" 41//usage: "Dump the specified MTD device\n"
42//usage: "\n -o Omit oob data" 42//usage: "\n -o Omit oob data"
43//usage: "\n -b Omit bad block from the dump" 43//usage: "\n -b Omit bad block from the dump"
44//usage: "\n -s ADDR Start address" 44//usage: "\n -s ADDR Start address"
diff --git a/miscutils/setserial.c b/miscutils/setserial.c
index 26902a273..2a034e32c 100644
--- a/miscutils/setserial.c
+++ b/miscutils/setserial.c
@@ -11,7 +11,7 @@
11//config:config SETSERIAL 11//config:config SETSERIAL
12//config: bool "setserial" 12//config: bool "setserial"
13//config: default y 13//config: default y
14//config: depends on PLATFORM_LINUX 14//config: select PLATFORM_LINUX
15//config: help 15//config: help
16//config: Retrieve or set Linux serial port. 16//config: Retrieve or set Linux serial port.
17 17
diff --git a/networking/dnsd.c b/networking/dnsd.c
index d80306d3d..fe98400f7 100644
--- a/networking/dnsd.c
+++ b/networking/dnsd.c
@@ -30,7 +30,7 @@
30//usage: "\n -s Send successful replies only. Use this if you want" 30//usage: "\n -s Send successful replies only. Use this if you want"
31//usage: "\n to use /etc/resolv.conf with two nameserver lines:" 31//usage: "\n to use /etc/resolv.conf with two nameserver lines:"
32//usage: "\n nameserver DNSD_SERVER" 32//usage: "\n nameserver DNSD_SERVER"
33//usage: "\n nameserver NORNAL_DNS_SERVER" 33//usage: "\n nameserver NORMAL_DNS_SERVER"
34 34
35#include "libbb.h" 35#include "libbb.h"
36#include <syslog.h> 36#include <syslog.h>
diff --git a/networking/ping.c b/networking/ping.c
index d75747984..efd4f210b 100644
--- a/networking/ping.c
+++ b/networking/ping.c
@@ -29,6 +29,22 @@
29#include <netinet/ip_icmp.h> 29#include <netinet/ip_icmp.h>
30#include "libbb.h" 30#include "libbb.h"
31 31
32#ifdef __BIONIC__
33/* should be in netinet/ip_icmp.h */
34# define ICMP_DEST_UNREACH 3 /* Destination Unreachable */
35# define ICMP_SOURCE_QUENCH 4 /* Source Quench */
36# define ICMP_REDIRECT 5 /* Redirect (change route) */
37# define ICMP_ECHO 8 /* Echo Request */
38# define ICMP_TIME_EXCEEDED 11 /* Time Exceeded */
39# define ICMP_PARAMETERPROB 12 /* Parameter Problem */
40# define ICMP_TIMESTAMP 13 /* Timestamp Request */
41# define ICMP_TIMESTAMPREPLY 14 /* Timestamp Reply */
42# define ICMP_INFO_REQUEST 15 /* Information Request */
43# define ICMP_INFO_REPLY 16 /* Information Reply */
44# define ICMP_ADDRESS 17 /* Address Mask Request */
45# define ICMP_ADDRESSREPLY 18 /* Address Mask Reply */
46#endif
47
32//config:config PING 48//config:config PING
33//config: bool "ping" 49//config: bool "ping"
34//config: default y 50//config: default y
diff --git a/networking/tcpudp.c b/networking/tcpudp.c
index a2b8c958c..3df6a98d8 100644
--- a/networking/tcpudp.c
+++ b/networking/tcpudp.c
@@ -36,14 +36,14 @@
36//usage:#define tcpsvd_full_usage "\n\n" 36//usage:#define tcpsvd_full_usage "\n\n"
37//usage: "Create TCP socket, bind to IP:PORT and listen\n" 37//usage: "Create TCP socket, bind to IP:PORT and listen\n"
38//usage: "for incoming connection. Run PROG for each connection.\n" 38//usage: "for incoming connection. Run PROG for each connection.\n"
39//usage: "\n IP IP to listen on. '0' = all" 39//usage: "\n IP IP to listen on, 0 = all"
40//usage: "\n PORT Port to listen on" 40//usage: "\n PORT Port to listen on"
41//usage: "\n PROG ARGS Program to run" 41//usage: "\n PROG ARGS Program to run"
42//usage: "\n -l NAME Local hostname (else looks up local hostname in DNS)" 42//usage: "\n -l NAME Local hostname (else looks up local hostname in DNS)"
43//usage: "\n -u USER[:GRP] Change to user/group after bind" 43//usage: "\n -u USER[:GRP] Change to user/group after bind"
44//usage: "\n -c N Handle up to N connections simultaneously" 44//usage: "\n -c N Handle up to N connections simultaneously"
45//usage: "\n -b N Allow a backlog of approximately N TCP SYNs" 45//usage: "\n -b N Allow a backlog of approximately N TCP SYNs"
46//usage: "\n -C N[:MSG] Allow only up to N connections from the same IP." 46//usage: "\n -C N[:MSG] Allow only up to N connections from the same IP"
47//usage: "\n New connections from this IP address are closed" 47//usage: "\n New connections from this IP address are closed"
48//usage: "\n immediately. MSG is written to the peer before close" 48//usage: "\n immediately. MSG is written to the peer before close"
49//usage: "\n -h Look up peer's hostname" 49//usage: "\n -h Look up peer's hostname"
@@ -56,7 +56,7 @@
56//usage: "Create UDP socket, bind to IP:PORT and wait\n" 56//usage: "Create UDP socket, bind to IP:PORT and wait\n"
57//usage: "for incoming packets. Run PROG for each packet,\n" 57//usage: "for incoming packets. Run PROG for each packet,\n"
58//usage: "redirecting all further packets with same peer ip:port to it.\n" 58//usage: "redirecting all further packets with same peer ip:port to it.\n"
59//usage: "\n IP IP to listen on. '0' = all" 59//usage: "\n IP IP to listen on, 0 = all"
60//usage: "\n PORT Port to listen on" 60//usage: "\n PORT Port to listen on"
61//usage: "\n PROG ARGS Program to run" 61//usage: "\n PROG ARGS Program to run"
62//usage: "\n -l NAME Local hostname (else looks up local hostname in DNS)" 62//usage: "\n -l NAME Local hostname (else looks up local hostname in DNS)"
diff --git a/networking/telnet.c b/networking/telnet.c
index 6dd0de53a..e8e51dce4 100644
--- a/networking/telnet.c
+++ b/networking/telnet.c
@@ -40,10 +40,25 @@
40#include <netinet/in.h> 40#include <netinet/in.h>
41#include "libbb.h" 41#include "libbb.h"
42 42
43#ifdef __BIONIC__
44/* should be in arpa/telnet.h */
45# define IAC 255 /* interpret as command: */
46# define DONT 254 /* you are not to use option */
47# define DO 253 /* please, you use option */
48# define WONT 252 /* I won't use option */
49# define WILL 251 /* I will use option */
50# define SB 250 /* interpret as subnegotiation */
51# define SE 240 /* end sub negotiation */
52# define TELOPT_ECHO 1 /* echo */
53# define TELOPT_SGA 3 /* suppress go ahead */
54# define TELOPT_TTYPE 24 /* terminal type */
55# define TELOPT_NAWS 31 /* window size */
56#endif
57
43#ifdef DOTRACE 58#ifdef DOTRACE
44#define TRACE(x, y) do { if (x) printf y; } while (0) 59# define TRACE(x, y) do { if (x) printf y; } while (0)
45#else 60#else
46#define TRACE(x, y) 61# define TRACE(x, y)
47#endif 62#endif
48 63
49enum { 64enum {
diff --git a/procps/Config.src b/procps/Config.src
index 3e7df0b81..570b026da 100644
--- a/procps/Config.src
+++ b/procps/Config.src
@@ -194,15 +194,6 @@ config FEATURE_SHOW_THREADS
194 Enables the ps -T option, showing of threads in pstree, 194 Enables the ps -T option, showing of threads in pstree,
195 and 'h' command in top. 195 and 'h' command in top.
196 196
197config UPTIME
198 bool "uptime"
199 default y
200 select PLATFORM_LINUX #sysinfo()
201 help
202 uptime gives a one line display of the current time, how long
203 the system has been running, how many users are currently logged
204 on, and the system load averages for the past 1, 5, and 15 minutes.
205
206config WATCH 197config WATCH
207 bool "watch" 198 bool "watch"
208 default y 199 default y
diff --git a/procps/free.c b/procps/free.c
index ca753134c..47f2fc3b2 100644
--- a/procps/free.c
+++ b/procps/free.c
@@ -22,6 +22,9 @@
22//usage: "Total: 386144 257128 129016\n" 22//usage: "Total: 386144 257128 129016\n"
23 23
24#include "libbb.h" 24#include "libbb.h"
25#ifdef __linux__
26# include <sys/sysinfo.h>
27#endif
25 28
26struct globals { 29struct globals {
27 unsigned mem_unit; 30 unsigned mem_unit;
diff --git a/procps/ps.c b/procps/ps.c
index 41124279d..af57f7aee 100644
--- a/procps/ps.c
+++ b/procps/ps.c
@@ -62,6 +62,9 @@ enum { MAX_WIDTH = 2*1024 };
62 62
63#if ENABLE_DESKTOP 63#if ENABLE_DESKTOP
64 64
65#ifdef __linux__
66# include <sys/sysinfo.h>
67#endif
65#include <sys/times.h> /* for times() */ 68#include <sys/times.h> /* for times() */
66#ifndef AT_CLKTCK 69#ifndef AT_CLKTCK
67# define AT_CLKTCK 17 70# define AT_CLKTCK 17
diff --git a/procps/uptime.c b/procps/uptime.c
index 1a7da46a3..778812a6f 100644
--- a/procps/uptime.c
+++ b/procps/uptime.c
@@ -7,14 +7,29 @@
7 * Licensed under GPLv2, see file LICENSE in this source tree. 7 * Licensed under GPLv2, see file LICENSE in this source tree.
8 */ 8 */
9 9
10/* This version of uptime doesn't display the number of users on the system, 10/* 2011 Pere Orga <gotrunks@gmail.com>
11 * since busybox init doesn't mess with utmp. For folks using utmp that are 11 *
12 * just dying to have # of users reported, feel free to write it as some type 12 * Added FEATURE_UPTIME_UTMP_SUPPORT flag.
13 * of CONFIG_FEATURE_UTMP_SUPPORT #define
14 */ 13 */
15 14
16/* getopt not needed */ 15/* getopt not needed */
17 16
17//config:config UPTIME
18//config: bool "uptime"
19//config: default y
20//config: select PLATFORM_LINUX #sysinfo()
21//config: help
22//config: uptime gives a one line display of the current time, how long
23//config: the system has been running, how many users are currently logged
24//config: on, and the system load averages for the past 1, 5, and 15 minutes.
25//config:
26//config:config FEATURE_UPTIME_UTMP_SUPPORT
27//config: bool "Support for showing the number of users"
28//config: default y
29//config: depends on UPTIME && FEATURE_UTMP
30//config: help
31//config: Makes uptime display the number of users currently logged on.
32
18//usage:#define uptime_trivial_usage 33//usage:#define uptime_trivial_usage
19//usage: "" 34//usage: ""
20//usage:#define uptime_full_usage "\n\n" 35//usage:#define uptime_full_usage "\n\n"
@@ -25,19 +40,23 @@
25//usage: " 1:55pm up 2:30, load average: 0.09, 0.04, 0.00\n" 40//usage: " 1:55pm up 2:30, load average: 0.09, 0.04, 0.00\n"
26 41
27#include "libbb.h" 42#include "libbb.h"
43#ifdef __linux__
44# include <sys/sysinfo.h>
45#endif
46
28 47
29#ifndef FSHIFT 48#ifndef FSHIFT
30# define FSHIFT 16 /* nr of bits of precision */ 49# define FSHIFT 16 /* nr of bits of precision */
31#endif 50#endif
32#define FIXED_1 (1<<FSHIFT) /* 1.0 as fixed-point */ 51#define FIXED_1 (1 << FSHIFT) /* 1.0 as fixed-point */
33#define LOAD_INT(x) ((x) >> FSHIFT) 52#define LOAD_INT(x) (unsigned)((x) >> FSHIFT)
34#define LOAD_FRAC(x) LOAD_INT(((x) & (FIXED_1-1)) * 100) 53#define LOAD_FRAC(x) LOAD_INT(((x) & (FIXED_1 - 1)) * 100)
35 54
36 55
37int uptime_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; 56int uptime_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
38int uptime_main(int argc UNUSED_PARAM, char **argv UNUSED_PARAM) 57int uptime_main(int argc UNUSED_PARAM, char **argv UNUSED_PARAM)
39{ 58{
40 int updays, uphours, upminutes; 59 unsigned updays, uphours, upminutes;
41 struct sysinfo info; 60 struct sysinfo info;
42 struct tm *current_time; 61 struct tm *current_time;
43 time_t current_secs; 62 time_t current_secs;
@@ -47,20 +66,32 @@ int uptime_main(int argc UNUSED_PARAM, char **argv UNUSED_PARAM)
47 66
48 sysinfo(&info); 67 sysinfo(&info);
49 68
50 printf(" %02d:%02d:%02d up ", 69 printf(" %02u:%02u:%02u up ",
51 current_time->tm_hour, current_time->tm_min, current_time->tm_sec); 70 current_time->tm_hour, current_time->tm_min, current_time->tm_sec);
52 updays = (int) info.uptime / (60*60*24); 71 updays = (unsigned) info.uptime / (unsigned)(60*60*24);
53 if (updays) 72 if (updays)
54 printf("%d day%s, ", updays, (updays != 1) ? "s" : ""); 73 printf("%u day%s, ", updays, (updays != 1) ? "s" : "");
55 upminutes = (int) info.uptime / 60; 74 upminutes = (unsigned) info.uptime / (unsigned)60;
56 uphours = (upminutes / 60) % 24; 75 uphours = (upminutes / (unsigned)60) % (unsigned)24;
57 upminutes %= 60; 76 upminutes %= 60;
58 if (uphours) 77 if (uphours)
59 printf("%2d:%02d, ", uphours, upminutes); 78 printf("%2u:%02u", uphours, upminutes);
60 else 79 else
61 printf("%d min, ", upminutes); 80 printf("%u min", upminutes);
81
82#if ENABLE_FEATURE_UPTIME_UTMP_SUPPORT
83 {
84 struct utmp *ut;
85 unsigned users = 0;
86 while ((ut = getutent()) != NULL) {
87 if ((ut->ut_type == USER_PROCESS) && (ut->ut_name[0] != '\0'))
88 users++;
89 }
90 printf(", %u users", users);
91 }
92#endif
62 93
63 printf("load average: %ld.%02ld, %ld.%02ld, %ld.%02ld\n", 94 printf(", load average: %u.%02u, %u.%02u, %u.%02u\n",
64 LOAD_INT(info.loads[0]), LOAD_FRAC(info.loads[0]), 95 LOAD_INT(info.loads[0]), LOAD_FRAC(info.loads[0]),
65 LOAD_INT(info.loads[1]), LOAD_FRAC(info.loads[1]), 96 LOAD_INT(info.loads[1]), LOAD_FRAC(info.loads[1]),
66 LOAD_INT(info.loads[2]), LOAD_FRAC(info.loads[2])); 97 LOAD_INT(info.loads[2]), LOAD_FRAC(info.loads[2]));
diff --git a/scripts/bloat-o-meter b/scripts/bloat-o-meter
index 91374c1ca..0d3ff7f5e 100755
--- a/scripts/bloat-o-meter
+++ b/scripts/bloat-o-meter
@@ -1,8 +1,8 @@
1#!/usr/bin/python 1#!/usr/bin/env python
2# 2#
3# Copyright 2004 Matt Mackall <mpm@selenic.com> 3# Copyright 2004 Matt Mackall <mpm@selenic.com>
4# 4#
5# inspired by perl Bloat-O-Meter (c) 1997 by Andi Kleen 5# Inspired by perl Bloat-O-Meter (c) 1997 by Andi Kleen
6# 6#
7# This software may be used and distributed according to the terms 7# This software may be used and distributed according to the terms
8# of the GNU General Public License, incorporated herein by reference. 8# of the GNU General Public License, incorporated herein by reference.
diff --git a/scripts/defconfig.tig b/scripts/defconfig.tig
index 430587d27..5da784617 100644
--- a/scripts/defconfig.tig
+++ b/scripts/defconfig.tig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Busybox version: 1.19.0.git 3# Busybox version: 1.19.0
4# Thu Mar 22 15:35:30 2012 4# Thu Mar 22 15:45:17 2012
5# 5#
6CONFIG_HAVE_DOT_CONFIG=y 6CONFIG_HAVE_DOT_CONFIG=y
7# CONFIG_PLATFORM_POSIX is not set 7# CONFIG_PLATFORM_POSIX is not set
@@ -104,6 +104,7 @@ CONFIG_FEATURE_EDITING_MAX_LEN=1024
104# CONFIG_FEATURE_EDITING_VI is not set 104# CONFIG_FEATURE_EDITING_VI is not set
105CONFIG_FEATURE_EDITING_HISTORY=255 105CONFIG_FEATURE_EDITING_HISTORY=255
106# CONFIG_FEATURE_EDITING_SAVEHISTORY is not set 106# CONFIG_FEATURE_EDITING_SAVEHISTORY is not set
107# CONFIG_FEATURE_REVERSE_SEARCH is not set
107CONFIG_FEATURE_TAB_COMPLETION=y 108CONFIG_FEATURE_TAB_COMPLETION=y
108# CONFIG_FEATURE_USERNAME_COMPLETION is not set 109# CONFIG_FEATURE_USERNAME_COMPLETION is not set
109# CONFIG_FEATURE_EDITING_FANCY_PROMPT is not set 110# CONFIG_FEATURE_EDITING_FANCY_PROMPT is not set
@@ -184,6 +185,8 @@ CONFIG_TR=y
184CONFIG_FEATURE_TR_CLASSES=y 185CONFIG_FEATURE_TR_CLASSES=y
185CONFIG_FEATURE_TR_EQUIV=y 186CONFIG_FEATURE_TR_EQUIV=y
186CONFIG_BASE64=y 187CONFIG_BASE64=y
188# CONFIG_WHO is not set
189# CONFIG_USERS is not set
187CONFIG_CAL=y 190CONFIG_CAL=y
188CONFIG_CATV=y 191CONFIG_CATV=y
189# CONFIG_CHGRP is not set 192# CONFIG_CHGRP is not set
@@ -285,7 +288,6 @@ CONFIG_UUDECODE=y
285CONFIG_UUENCODE=y 288CONFIG_UUENCODE=y
286CONFIG_WC=y 289CONFIG_WC=y
287CONFIG_FEATURE_WC_LARGE=y 290CONFIG_FEATURE_WC_LARGE=y
288# CONFIG_WHO is not set
289CONFIG_WHOAMI=y 291CONFIG_WHOAMI=y
290CONFIG_YES=y 292CONFIG_YES=y
291 293
@@ -615,6 +617,16 @@ CONFIG_HD=y
615# Miscellaneous Utilities 617# Miscellaneous Utilities
616# 618#
617# CONFIG_CONSPY is not set 619# CONFIG_CONSPY is not set
620# CONFIG_LESS is not set
621CONFIG_FEATURE_LESS_MAXLINES=0
622# CONFIG_FEATURE_LESS_BRACKETS is not set
623# CONFIG_FEATURE_LESS_FLAGS is not set
624# CONFIG_FEATURE_LESS_MARKS is not set
625# CONFIG_FEATURE_LESS_REGEXP is not set
626# CONFIG_FEATURE_LESS_WINCH is not set
627# CONFIG_FEATURE_LESS_ASK_TERMINAL is not set
628# CONFIG_FEATURE_LESS_DASHCMD is not set
629# CONFIG_FEATURE_LESS_LINENUMS is not set
618# CONFIG_NANDWRITE is not set 630# CONFIG_NANDWRITE is not set
619# CONFIG_NANDDUMP is not set 631# CONFIG_NANDDUMP is not set
620# CONFIG_SETSERIAL is not set 632# CONFIG_SETSERIAL is not set
@@ -664,15 +676,6 @@ CONFIG_DC=y
664# CONFIG_LAST is not set 676# CONFIG_LAST is not set
665# CONFIG_FEATURE_LAST_SMALL is not set 677# CONFIG_FEATURE_LAST_SMALL is not set
666# CONFIG_FEATURE_LAST_FANCY is not set 678# CONFIG_FEATURE_LAST_FANCY is not set
667# CONFIG_LESS is not set
668CONFIG_FEATURE_LESS_MAXLINES=0
669# CONFIG_FEATURE_LESS_BRACKETS is not set
670# CONFIG_FEATURE_LESS_FLAGS is not set
671# CONFIG_FEATURE_LESS_MARKS is not set
672# CONFIG_FEATURE_LESS_REGEXP is not set
673# CONFIG_FEATURE_LESS_WINCH is not set
674# CONFIG_FEATURE_LESS_DASHCMD is not set
675# CONFIG_FEATURE_LESS_LINENUMS is not set
676# CONFIG_HDPARM is not set 679# CONFIG_HDPARM is not set
677# CONFIG_FEATURE_HDPARM_GET_IDENTITY is not set 680# CONFIG_FEATURE_HDPARM_GET_IDENTITY is not set
678# CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF is not set 681# CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF is not set
@@ -872,6 +875,8 @@ CONFIG_FEATURE_MIME_CHARSET=""
872# CONFIG_PSTREE is not set 875# CONFIG_PSTREE is not set
873# CONFIG_PWDX is not set 876# CONFIG_PWDX is not set
874# CONFIG_SMEMCAP is not set 877# CONFIG_SMEMCAP is not set
878# CONFIG_UPTIME is not set
879# CONFIG_FEATURE_UPTIME_UTMP_SUPPORT is not set
875# CONFIG_FREE is not set 880# CONFIG_FREE is not set
876# CONFIG_FUSER is not set 881# CONFIG_FUSER is not set
877CONFIG_KILL=y 882CONFIG_KILL=y
@@ -897,7 +902,6 @@ CONFIG_PS=y
897# CONFIG_FEATURE_TOP_SMP_PROCESS is not set 902# CONFIG_FEATURE_TOP_SMP_PROCESS is not set
898# CONFIG_FEATURE_TOPMEM is not set 903# CONFIG_FEATURE_TOPMEM is not set
899# CONFIG_FEATURE_SHOW_THREADS is not set 904# CONFIG_FEATURE_SHOW_THREADS is not set
900# CONFIG_UPTIME is not set
901# CONFIG_WATCH is not set 905# CONFIG_WATCH is not set
902 906
903# 907#
diff --git a/scripts/kconfig/Makefile b/scripts/kconfig/Makefile
index b5708e2e4..1651390a6 100644
--- a/scripts/kconfig/Makefile
+++ b/scripts/kconfig/Makefile
@@ -87,7 +87,7 @@ endif
87 $(MTIME_IS_COARSE) && sleep 1 87 $(MTIME_IS_COARSE) && sleep 1
88 88
89%_defconfig: $(obj)/conf 89%_defconfig: $(obj)/conf
90 $(Q)$< -D $@ Config.in 90 $(Q)$< -D configs/$@ Config.in
91 $(MTIME_IS_COARSE) && sleep 1 91 $(MTIME_IS_COARSE) && sleep 1
92 92
93# Help text used by make help 93# Help text used by make help
diff --git a/shell/cttyhack.c b/shell/cttyhack.c
index d1ac2cd23..4261289b4 100644
--- a/shell/cttyhack.c
+++ b/shell/cttyhack.c
@@ -14,18 +14,22 @@
14//config: bool "cttyhack" 14//config: bool "cttyhack"
15//config: default y 15//config: default y
16//config: help 16//config: help
17//config: One common problem reported on the mailing list is "can't access tty; 17//config: One common problem reported on the mailing list is the "can't
18//config: job control turned off" error message which typically appears when 18//config: access tty; job control turned off" error message, which typically
19//config: one tries to use shell with stdin/stdout opened to /dev/console. 19//config: appears when one tries to use a shell with stdin/stdout on
20//config: /dev/console.
20//config: This device is special - it cannot be a controlling tty. 21//config: This device is special - it cannot be a controlling tty.
21//config: 22//config:
22//config: Proper solution is to use correct device instead of /dev/console. 23//config: The proper solution is to use the correct device instead of
24//config: /dev/console.
23//config: 25//config:
24//config: cttyhack provides "quick and dirty" solution to this problem. 26//config: cttyhack provides a "quick and dirty" solution to this problem.
25//config: It analyzes stdin with various ioctls, trying to determine whether 27//config: It analyzes stdin with various ioctls, trying to determine whether
26//config: it is a /dev/ttyN or /dev/ttySN (virtual terminal or serial line). 28//config: it is a /dev/ttyN or /dev/ttySN (virtual terminal or serial line).
27//config: If it detects one, it closes stdin/out/err and reopens that device. 29//config: On Linux it also checks sysfs for a pointer to the active console.
28//config: Then it executes given program. Opening the device will make 30//config: If cttyhack is able to find the real console device, it closes
31//config: stdin/out/err and reopens that device.
32//config: Then it executes the given program. Opening the device will make
29//config: that device a controlling tty. This may require cttyhack 33//config: that device a controlling tty. This may require cttyhack
30//config: to be a session leader. 34//config: to be a session leader.
31//config: 35//config:
@@ -115,33 +119,48 @@ int cttyhack_main(int argc UNUSED_PARAM, char **argv)
115 close(fd); 119 close(fd);
116 } else { 120 } else {
117 /* We don't have ctty (or don't have "/dev/tty" node...) */ 121 /* We don't have ctty (or don't have "/dev/tty" node...) */
118 if (0) {} 122 do {
119#ifdef TIOCGSERIAL
120 else if (ioctl(0, TIOCGSERIAL, &u.sr) == 0) {
121 /* this is a serial console */
122 sprintf(console + 8, "S%d", u.sr.line);
123 }
124#endif
125#ifdef __linux__ 123#ifdef __linux__
126 else if (ioctl(0, VT_GETSTATE, &u.vt) == 0) { 124 int s = open_read_close("/sys/class/tty/console/active",
127 /* this is linux virtual tty */ 125 console + 5, sizeof(console) - 5 - 1);
128 sprintf(console + 8, "S%d" + 1, u.vt.v_active); 126 if (s > 0) {
129 } 127 /* found active console via sysfs (Linux 2.6.38+) */
128 console[5 + s] = '\0';
129 break;
130 }
131
132 if (ioctl(0, VT_GETSTATE, &u.vt) == 0) {
133 /* this is linux virtual tty */
134 sprintf(console + 8, "S%d" + 1, u.vt.v_active);
135 break;
136 }
130#endif 137#endif
131 if (console[8]) { 138#ifdef TIOCGSERIAL
132 fd = xopen(console, O_RDWR); 139 if (ioctl(0, TIOCGSERIAL, &u.sr) == 0) {
133 //bb_error_msg("switching to '%s'", console); 140 /* this is a serial console, asuming it is named /dev/ttySn */
134 dup2(fd, 0); 141 sprintf(console + 8, "S%d", u.sr.line);
135 dup2(fd, 1); 142 break;
136 dup2(fd, 2); 143 }
137 while (fd > 2) 144#endif
138 close(fd--); 145 /* nope, could not find it */
139 /* Some other session may have it as ctty, 146 goto ret;
140 * steal it from them: 147 } while (0);
141 */ 148
142 ioctl(0, TIOCSCTTY, 1); 149 fd = open_or_warn(console, O_RDWR);
143 } 150 if (fd < 0)
151 goto ret;
152 //bb_error_msg("switching to '%s'", console);
153 dup2(fd, 0);
154 dup2(fd, 1);
155 dup2(fd, 2);
156 while (fd > 2)
157 close(fd--);
158 /* Some other session may have it as ctty,
159 * steal it from them:
160 */
161 ioctl(0, TIOCSCTTY, 1);
144 } 162 }
145 163
164ret:
146 BB_EXECVP_or_die(argv); 165 BB_EXECVP_or_die(argv);
147} 166}
diff --git a/shell/hush.c b/shell/hush.c
index 1082738a2..e4138adf7 100644
--- a/shell/hush.c
+++ b/shell/hush.c
@@ -2281,7 +2281,7 @@ static void o_addqblock(o_string *o, const char *str, int len)
2281 ordinary_cnt = len; 2281 ordinary_cnt = len;
2282 o_addblock(o, str, ordinary_cnt); 2282 o_addblock(o, str, ordinary_cnt);
2283 if (ordinary_cnt == len) 2283 if (ordinary_cnt == len)
2284 return; 2284 return; /* NUL is already added by o_addblock */
2285 str += ordinary_cnt; 2285 str += ordinary_cnt;
2286 len -= ordinary_cnt + 1; /* we are processing + 1 char below */ 2286 len -= ordinary_cnt + 1; /* we are processing + 1 char below */
2287 2287
@@ -2295,8 +2295,8 @@ static void o_addqblock(o_string *o, const char *str, int len)
2295 o_grow_by(o, sz); 2295 o_grow_by(o, sz);
2296 o->data[o->length] = ch; 2296 o->data[o->length] = ch;
2297 o->length++; 2297 o->length++;
2298 o->data[o->length] = '\0';
2299 } 2298 }
2299 o->data[o->length] = '\0';
2300} 2300}
2301 2301
2302static void o_addQblock(o_string *o, const char *str, int len) 2302static void o_addQblock(o_string *o, const char *str, int len)
@@ -2385,6 +2385,7 @@ static int o_save_ptr_helper(o_string *o, int n)
2385 n, string_len, string_start); 2385 n, string_len, string_start);
2386 o->has_empty_slot = 0; 2386 o->has_empty_slot = 0;
2387 } 2387 }
2388 o->has_quoted_part = 0;
2388 list[n] = (char*)(uintptr_t)string_len; 2389 list[n] = (char*)(uintptr_t)string_len;
2389 return n + 1; 2390 return n + 1;
2390} 2391}
@@ -3264,14 +3265,6 @@ static int done_word(o_string *word, struct parse_context *ctx)
3264 ) { 3265 ) {
3265 p += 3; 3266 p += 3;
3266 } 3267 }
3267 if (p == word->data || p[0] != '\0') {
3268 /* saw no "$@", or not only "$@" but some
3269 * real text is there too */
3270 /* insert "empty variable" reference, this makes
3271 * e.g. "", $empty"" etc to not disappear */
3272 o_addchr(word, SPECIAL_VAR_SYMBOL);
3273 o_addchr(word, SPECIAL_VAR_SYMBOL);
3274 }
3275 } 3268 }
3276 command->argv = add_string_to_strings(command->argv, xstrdup(word->data)); 3269 command->argv = add_string_to_strings(command->argv, xstrdup(word->data));
3277 debug_print_strings("word appended to argv", command->argv); 3270 debug_print_strings("word appended to argv", command->argv);
@@ -4515,20 +4508,30 @@ static struct pipe *parse_stream(char **pstring,
4515 break; 4508 break;
4516 case '\'': 4509 case '\'':
4517 dest.has_quoted_part = 1; 4510 dest.has_quoted_part = 1;
4518 while (1) { 4511 if (next == '\'' && !ctx.pending_redirect) {
4519 ch = i_getch(input); 4512 insert_empty_quoted_str_marker:
4520 if (ch == EOF) { 4513 nommu_addchr(&ctx.as_string, next);
4521 syntax_error_unterm_ch('\''); 4514 i_getch(input); /* eat second ' */
4522 goto parse_error; 4515 o_addchr(&dest, SPECIAL_VAR_SYMBOL);
4516 o_addchr(&dest, SPECIAL_VAR_SYMBOL);
4517 } else {
4518 while (1) {
4519 ch = i_getch(input);
4520 if (ch == EOF) {
4521 syntax_error_unterm_ch('\'');
4522 goto parse_error;
4523 }
4524 nommu_addchr(&ctx.as_string, ch);
4525 if (ch == '\'')
4526 break;
4527 o_addqchr(&dest, ch);
4523 } 4528 }
4524 nommu_addchr(&ctx.as_string, ch);
4525 if (ch == '\'')
4526 break;
4527 o_addqchr(&dest, ch);
4528 } 4529 }
4529 break; 4530 break;
4530 case '"': 4531 case '"':
4531 dest.has_quoted_part = 1; 4532 dest.has_quoted_part = 1;
4533 if (next == '"' && !ctx.pending_redirect)
4534 goto insert_empty_quoted_str_marker;
4532 if (dest.o_assignment == NOT_ASSIGNMENT) 4535 if (dest.o_assignment == NOT_ASSIGNMENT)
4533 dest.o_expflags |= EXP_FLAG_ESC_GLOB_CHARS; 4536 dest.o_expflags |= EXP_FLAG_ESC_GLOB_CHARS;
4534 if (!encode_string(&ctx.as_string, &dest, input, '"', /*process_bkslash:*/ 1)) 4537 if (!encode_string(&ctx.as_string, &dest, input, '"', /*process_bkslash:*/ 1))
@@ -4750,12 +4753,22 @@ static void o_addblock_duplicate_backslash(o_string *o, const char *str, int len
4750 4753
4751/* Store given string, finalizing the word and starting new one whenever 4754/* Store given string, finalizing the word and starting new one whenever
4752 * we encounter IFS char(s). This is used for expanding variable values. 4755 * we encounter IFS char(s). This is used for expanding variable values.
4753 * End-of-string does NOT finalize word: think about 'echo -$VAR-' */ 4756 * End-of-string does NOT finalize word: think about 'echo -$VAR-'.
4754static int expand_on_ifs(o_string *output, int n, const char *str) 4757 * Return in *ended_with_ifs:
4758 * 1 - ended with IFS char, else 0 (this includes case of empty str).
4759 */
4760static int expand_on_ifs(int *ended_with_ifs, o_string *output, int n, const char *str)
4755{ 4761{
4762 int last_is_ifs = 0;
4763
4756 while (1) { 4764 while (1) {
4757 int word_len = strcspn(str, G.ifs); 4765 int word_len;
4766
4767 if (!*str) /* EOL - do not finalize word */
4768 break;
4769 word_len = strcspn(str, G.ifs);
4758 if (word_len) { 4770 if (word_len) {
4771 /* We have WORD_LEN leading non-IFS chars */
4759 if (!(output->o_expflags & EXP_FLAG_GLOB)) { 4772 if (!(output->o_expflags & EXP_FLAG_GLOB)) {
4760 o_addblock(output, str, word_len); 4773 o_addblock(output, str, word_len);
4761 } else { 4774 } else {
@@ -4768,15 +4781,36 @@ static int expand_on_ifs(o_string *output, int n, const char *str)
4768 /*o_addblock(output, str, word_len); - WRONG: "v='\*'; echo Z$v" prints "Z*" instead of "Z\*" */ 4781 /*o_addblock(output, str, word_len); - WRONG: "v='\*'; echo Z$v" prints "Z*" instead of "Z\*" */
4769 /*o_addqblock(output, str, word_len); - WRONG: "v='*'; echo Z$v" prints "Z*" instead of Z* files */ 4782 /*o_addqblock(output, str, word_len); - WRONG: "v='*'; echo Z$v" prints "Z*" instead of Z* files */
4770 } 4783 }
4784 last_is_ifs = 0;
4771 str += word_len; 4785 str += word_len;
4786 if (!*str) /* EOL - do not finalize word */
4787 break;
4772 } 4788 }
4789
4790 /* We know str here points to at least one IFS char */
4791 last_is_ifs = 1;
4792 str += strspn(str, G.ifs); /* skip IFS chars */
4773 if (!*str) /* EOL - do not finalize word */ 4793 if (!*str) /* EOL - do not finalize word */
4774 break; 4794 break;
4775 o_addchr(output, '\0'); 4795
4776 debug_print_list("expand_on_ifs", output, n); 4796 /* Start new word... but not always! */
4777 n = o_save_ptr(output, n); 4797 /* Case "v=' a'; echo ''$v": we do need to finalize empty word: */
4778 str += strspn(str, G.ifs); /* skip ifs chars */ 4798 if (output->has_quoted_part
4799 /* Case "v=' a'; echo $v":
4800 * here nothing precedes the space in $v expansion,
4801 * therefore we should not finish the word
4802 * (IOW: if there *is* word to finalize, only then do it):
4803 */
4804 || (n > 0 && output->data[output->length - 1])
4805 ) {
4806 o_addchr(output, '\0');
4807 debug_print_list("expand_on_ifs", output, n);
4808 n = o_save_ptr(output, n);
4809 }
4779 } 4810 }
4811
4812 if (ended_with_ifs)
4813 *ended_with_ifs = last_is_ifs;
4780 debug_print_list("expand_on_ifs[1]", output, n); 4814 debug_print_list("expand_on_ifs[1]", output, n);
4781 return n; 4815 return n;
4782} 4816}
@@ -5191,6 +5225,7 @@ static NOINLINE int expand_vars_to_list(o_string *output, int n, char *arg)
5191 * expansion of right-hand side of assignment == 1-element expand. 5225 * expansion of right-hand side of assignment == 1-element expand.
5192 */ 5226 */
5193 char cant_be_null = 0; /* only bit 0x80 matters */ 5227 char cant_be_null = 0; /* only bit 0x80 matters */
5228 int ended_in_ifs = 0; /* did last unquoted expansion end with IFS chars? */
5194 char *p; 5229 char *p;
5195 5230
5196 debug_printf_expand("expand_vars_to_list: arg:'%s' singleword:%x\n", arg, 5231 debug_printf_expand("expand_vars_to_list: arg:'%s' singleword:%x\n", arg,
@@ -5209,6 +5244,13 @@ static NOINLINE int expand_vars_to_list(o_string *output, int n, char *arg)
5209#if ENABLE_SH_MATH_SUPPORT 5244#if ENABLE_SH_MATH_SUPPORT
5210 char arith_buf[sizeof(arith_t)*3 + 2]; 5245 char arith_buf[sizeof(arith_t)*3 + 2];
5211#endif 5246#endif
5247
5248 if (ended_in_ifs) {
5249 o_addchr(output, '\0');
5250 n = o_save_ptr(output, n);
5251 ended_in_ifs = 0;
5252 }
5253
5212 o_addblock(output, arg, p - arg); 5254 o_addblock(output, arg, p - arg);
5213 debug_print_list("expand_vars_to_list[1]", output, n); 5255 debug_print_list("expand_vars_to_list[1]", output, n);
5214 arg = ++p; 5256 arg = ++p;
@@ -5237,7 +5279,7 @@ static NOINLINE int expand_vars_to_list(o_string *output, int n, char *arg)
5237 cant_be_null |= first_ch; /* do it for "$@" _now_, when we know it's not empty */ 5279 cant_be_null |= first_ch; /* do it for "$@" _now_, when we know it's not empty */
5238 if (!(first_ch & 0x80)) { /* unquoted $* or $@ */ 5280 if (!(first_ch & 0x80)) { /* unquoted $* or $@ */
5239 while (G.global_argv[i]) { 5281 while (G.global_argv[i]) {
5240 n = expand_on_ifs(output, n, G.global_argv[i]); 5282 n = expand_on_ifs(NULL, output, n, G.global_argv[i]);
5241 debug_printf_expand("expand_vars_to_list: argv %d (last %d)\n", i, G.global_argc - 1); 5283 debug_printf_expand("expand_vars_to_list: argv %d (last %d)\n", i, G.global_argc - 1);
5242 if (G.global_argv[i++][0] && G.global_argv[i]) { 5284 if (G.global_argv[i++][0] && G.global_argv[i]) {
5243 /* this argv[] is not empty and not last: 5285 /* this argv[] is not empty and not last:
@@ -5270,11 +5312,13 @@ static NOINLINE int expand_vars_to_list(o_string *output, int n, char *arg)
5270 if (G.ifs[0]) 5312 if (G.ifs[0])
5271 o_addchr(output, G.ifs[0]); 5313 o_addchr(output, G.ifs[0]);
5272 } 5314 }
5315 output->has_quoted_part = 1;
5273 } 5316 }
5274 break; 5317 break;
5275 } 5318 }
5276 case SPECIAL_VAR_SYMBOL: /* <SPECIAL_VAR_SYMBOL><SPECIAL_VAR_SYMBOL> */ 5319 case SPECIAL_VAR_SYMBOL: /* <SPECIAL_VAR_SYMBOL><SPECIAL_VAR_SYMBOL> */
5277 /* "Empty variable", used to make "" etc to not disappear */ 5320 /* "Empty variable", used to make "" etc to not disappear */
5321 output->has_quoted_part = 1;
5278 arg++; 5322 arg++;
5279 cant_be_null = 0x80; 5323 cant_be_null = 0x80;
5280 break; 5324 break;
@@ -5312,10 +5356,11 @@ static NOINLINE int expand_vars_to_list(o_string *output, int n, char *arg)
5312 debug_printf_expand("unquoted '%s', output->o_escape:%d\n", val, 5356 debug_printf_expand("unquoted '%s', output->o_escape:%d\n", val,
5313 !!(output->o_expflags & EXP_FLAG_ESC_GLOB_CHARS)); 5357 !!(output->o_expflags & EXP_FLAG_ESC_GLOB_CHARS));
5314 if (val && val[0]) { 5358 if (val && val[0]) {
5315 n = expand_on_ifs(output, n, val); 5359 n = expand_on_ifs(&ended_in_ifs, output, n, val);
5316 val = NULL; 5360 val = NULL;
5317 } 5361 }
5318 } else { /* quoted $VAR, val will be appended below */ 5362 } else { /* quoted $VAR, val will be appended below */
5363 output->has_quoted_part = 1;
5319 debug_printf_expand("quoted '%s', output->o_escape:%d\n", val, 5364 debug_printf_expand("quoted '%s', output->o_escape:%d\n", val,
5320 !!(output->o_expflags & EXP_FLAG_ESC_GLOB_CHARS)); 5365 !!(output->o_expflags & EXP_FLAG_ESC_GLOB_CHARS));
5321 } 5366 }
@@ -5340,6 +5385,10 @@ static NOINLINE int expand_vars_to_list(o_string *output, int n, char *arg)
5340 } /* end of "while (SPECIAL_VAR_SYMBOL is found) ..." */ 5385 } /* end of "while (SPECIAL_VAR_SYMBOL is found) ..." */
5341 5386
5342 if (arg[0]) { 5387 if (arg[0]) {
5388 if (ended_in_ifs) {
5389 o_addchr(output, '\0');
5390 n = o_save_ptr(output, n);
5391 }
5343 debug_print_list("expand_vars_to_list[a]", output, n); 5392 debug_print_list("expand_vars_to_list[a]", output, n);
5344 /* this part is literal, and it was already pre-quoted 5393 /* this part is literal, and it was already pre-quoted
5345 * if needed (much earlier), do not use o_addQstr here! */ 5394 * if needed (much earlier), do not use o_addQstr here! */
@@ -5470,12 +5519,6 @@ static char **expand_assignments(char **argv, int count)
5470} 5519}
5471 5520
5472 5521
5473#if BB_MMU
5474/* never called */
5475void re_execute_shell(char ***to_free, const char *s,
5476 char *g_argv0, char **g_argv,
5477 char **builtin_argv) NORETURN;
5478
5479static void switch_off_special_sigs(unsigned mask) 5522static void switch_off_special_sigs(unsigned mask)
5480{ 5523{
5481 unsigned sig = 0; 5524 unsigned sig = 0;
@@ -5495,6 +5538,12 @@ static void switch_off_special_sigs(unsigned mask)
5495 } 5538 }
5496} 5539}
5497 5540
5541#if BB_MMU
5542/* never called */
5543void re_execute_shell(char ***to_free, const char *s,
5544 char *g_argv0, char **g_argv,
5545 char **builtin_argv) NORETURN;
5546
5498static void reset_traps_to_defaults(void) 5547static void reset_traps_to_defaults(void)
5499{ 5548{
5500 /* This function is always called in a child shell 5549 /* This function is always called in a child shell
diff --git a/shell/hush_test/hush-parsing/starquoted2.right b/shell/hush_test/hush-parsing/starquoted2.right
index e1562ed6d..1bff408ca 100644
--- a/shell/hush_test/hush-parsing/starquoted2.right
+++ b/shell/hush_test/hush-parsing/starquoted2.right
@@ -1,4 +1,7 @@
1Should be printed 1Should be printed
2Would not be printed by bash
3Would not be printed by bash
4Would not be printed by bash
2Should be printed 5Should be printed
3Empty: 6Empty:
4Empty: 7Empty:
diff --git a/shell/hush_test/hush-parsing/starquoted2.tests b/shell/hush_test/hush-parsing/starquoted2.tests
index f305c4cd9..7c5ff45b8 100755
--- a/shell/hush_test/hush-parsing/starquoted2.tests
+++ b/shell/hush_test/hush-parsing/starquoted2.tests
@@ -8,9 +8,9 @@ for a in "$@"; do echo Should not be printed; done
8# Yes, believe it or not, bash is mesmerized by "$@" and stops 8# Yes, believe it or not, bash is mesmerized by "$@" and stops
9# treating "" as "this word cannot be expanded to nothing, 9# treating "" as "this word cannot be expanded to nothing,
10# but must be at least null string". Now it can be expanded to nothing. 10# but must be at least null string". Now it can be expanded to nothing.
11for a in "$@"""; do echo Should not be printed; done 11for a in "$@"""; do echo Would not be printed by bash; done
12for a in """$@"; do echo Should not be printed; done 12for a in """$@"; do echo Would not be printed by bash; done
13for a in """$@"''"$@"''; do echo Should not be printed; done 13for a in """$@"''"$@"''; do echo Would not be printed by bash; done
14for a in ""; do echo Should be printed; done 14for a in ""; do echo Should be printed; done
15 15
16# Bug 207: "$@" expands to nothing, and we erroneously glob "%s\n" twice: 16# Bug 207: "$@" expands to nothing, and we erroneously glob "%s\n" twice:
diff --git a/shell/hush_test/hush-vars/var_expand_on_ifs.right b/shell/hush_test/hush-vars/var_expand_on_ifs.right
new file mode 100644
index 000000000..2ed2069f7
--- /dev/null
+++ b/shell/hush_test/hush-vars/var_expand_on_ifs.right
@@ -0,0 +1,9 @@
11 a b c
22 a + b c
33 a b c
44 a b c
55 a b c
66 a b + c
77 a b c
88 a b c
99 a b c
diff --git a/shell/hush_test/hush-vars/var_expand_on_ifs.tests b/shell/hush_test/hush-vars/var_expand_on_ifs.tests
new file mode 100755
index 000000000..a12ff8ec8
--- /dev/null
+++ b/shell/hush_test/hush-vars/var_expand_on_ifs.tests
@@ -0,0 +1,11 @@
1b=' b '
2e=''
3echo 1 a $b c
4echo 2 a +$b c
5echo 3 a $e$b c
6echo 4 a "$e"$b c
7echo 5 a ""$b c
8echo 6 a $b+ c
9echo 7 a $b$e c
10echo 8 a $b"$e" c
11echo 9 a $b"" c
diff --git a/testsuite/date/date-R-works b/testsuite/date/date-R-works
index d05634456..81378cc69 100644
--- a/testsuite/date/date-R-works
+++ b/testsuite/date/date-R-works
@@ -1,8 +1,13 @@
1dt1="`date -R`" 1# When different date's use time() and clock_gettime(),
2# Wait for the start of next second 2# seconds transition may not happen at _exactly_ the same moment.
3dt="$dt1" 3# Therefore we try it several times.
4while test x"$dt" = x"$dt1"; do
5 dt="`date -R`"
6done
7 4
8test x"$dt" = x"`busybox date -R`" 5test x"`date -R`" = x"`busybox date -R`" && exit 0 || true
6test x"`date -R`" = x"`busybox date -R`" && exit 0 || true
7test x"`date -R`" = x"`busybox date -R`" && exit 0 || true
8test x"`date -R`" = x"`busybox date -R`" && exit 0 || true
9test x"`date -R`" = x"`busybox date -R`" && exit 0 || true
10test x"`date -R`" = x"`busybox date -R`" && exit 0 || true
11test x"`date -R`" = x"`busybox date -R`" && exit 0 || true
12test x"`date -R`" = x"`busybox date -R`" && exit 0 || true
13false
diff --git a/testsuite/ls.tests b/testsuite/ls.tests
index e2284658d..9309d366b 100755
--- a/testsuite/ls.tests
+++ b/testsuite/ls.tests
@@ -256,7 +256,8 @@ mkdir ls.testdir || exit 1
256 256
257# testing "test name" "command" "expected result" "file input" "stdin" 257# testing "test name" "command" "expected result" "file input" "stdin"
258 258
259testing "ls symlink_to_dir" \ 259test x"$CONFIG_FEATURE_LS_SORTFILES" = x"y" \
260&& testing "ls symlink_to_dir" \
260"touch ls.testdir/A ls.testdir/B; ln -s ls.testdir ls.link; ls ls.link; ls -1 ls.link/; ls -1 ls.link; rm -f ls.link" \ 261"touch ls.testdir/A ls.testdir/B; ln -s ls.testdir ls.link; ls ls.link; ls -1 ls.link/; ls -1 ls.link; rm -f ls.link" \
261"A\nB\nA\nB\nA\nB\n" \ 262"A\nB\nA\nB\nA\nB\n" \
262"" "" 263"" ""
diff --git a/testsuite/mount.tests b/testsuite/mount.tests
index 58eeb2ec5..c5891be83 100755
--- a/testsuite/mount.tests
+++ b/testsuite/mount.tests
@@ -46,6 +46,7 @@ rm mount.image1m
46 46
47 47
48# Bug: mount.shared1 directory shows no files (has to show files a and b) 48# Bug: mount.shared1 directory shows no files (has to show files a and b)
49optional FEATURE_LS_RECURSIVE FEATURE_LS_SORTFILES
49testing "mount bind+rshared" "\ 50testing "mount bind+rshared" "\
50mkdir -p mount.dir mount.shared1 mount.shared2 51mkdir -p mount.dir mount.shared1 mount.shared2
51touch mount.dir/a mount.dir/b 52touch mount.dir/a mount.dir/b
@@ -80,5 +81,6 @@ a
80b 81b
81" \ 82" \
82 "" "" 83 "" ""
84SKIP=
83 85
84exit $FAILCOUNT 86exit $FAILCOUNT
diff --git a/testsuite/od.tests b/testsuite/od.tests
index fa47b4790..7a9da3e97 100755
--- a/testsuite/od.tests
+++ b/testsuite/od.tests
@@ -16,7 +16,7 @@ testing "od -b" \
16 "" "HELLO" 16 "" "HELLO"
17SKIP= 17SKIP=
18 18
19optional DESKTOP 19optional DESKTOP LONG_OPTS
20testing "od -b --traditional" \ 20testing "od -b --traditional" \
21 "od -b --traditional" \ 21 "od -b --traditional" \
22"\ 22"\
@@ -26,7 +26,7 @@ testing "od -b --traditional" \
26 "" "HELLO" 26 "" "HELLO"
27SKIP= 27SKIP=
28 28
29optional DESKTOP 29optional DESKTOP LONG_OPTS
30testing "od -b --traditional FILE" \ 30testing "od -b --traditional FILE" \
31 "od -b --traditional input" \ 31 "od -b --traditional input" \
32"\ 32"\
diff --git a/testsuite/runtest b/testsuite/runtest
index 9a4fccbbf..51575d926 100755
--- a/testsuite/runtest
+++ b/testsuite/runtest
@@ -74,8 +74,10 @@ run_oldstyle_applet_tests()
74 *.mine) continue ;; # svn-produced junk 74 *.mine) continue ;; # svn-produced junk
75 *.r[0-9]*) continue ;; # svn-produced junk 75 *.r[0-9]*) continue ;; # svn-produced junk
76 esac 76 esac
77 run_applet_testcase "$applet" "$testcase" || status=1 77 run_applet_testcase "$applet" "$testcase" || {
78 total_failed=$((total_failed + status)) 78 status=1
79 total_failed=$((total_failed + 1))
80 }
79 done 81 done
80 return $status 82 return $status
81} 83}
diff --git a/testsuite/tar.tests b/testsuite/tar.tests
index 534135df8..39ece5feb 100755
--- a/testsuite/tar.tests
+++ b/testsuite/tar.tests
@@ -156,6 +156,7 @@ SKIP=
156 156
157# Had a bug where on extract autodetect first "switched off" -z 157# Had a bug where on extract autodetect first "switched off" -z
158# and then failed to recognize .tgz extension 158# and then failed to recognize .tgz extension
159optional FEATURE_TAR_CREATE FEATURE_SEAMLESS_GZ
159testing "tar extract tgz" "\ 160testing "tar extract tgz" "\
160dd count=1 bs=1M if=/dev/zero of=F0 2>/dev/null 161dd count=1 bs=1M if=/dev/zero of=F0 2>/dev/null
161tar -czf F0.tgz F0 162tar -czf F0.tgz F0
@@ -167,8 +168,10 @@ F0
167Ok 168Ok
168" \ 169" \
169"" "" 170"" ""
171SKIP=
170 172
171# On extract, everything up to and including last ".." component is stripped 173# On extract, everything up to and including last ".." component is stripped
174optional FEATURE_TAR_CREATE
172testing "tar strips /../ on extract" "\ 175testing "tar strips /../ on extract" "\
173rm -rf input_* test.tar 2>/dev/null 176rm -rf input_* test.tar 2>/dev/null
174mkdir input_dir 177mkdir input_dir
@@ -184,6 +187,7 @@ input_dir/file
184Ok 187Ok
185" \ 188" \
186"" "" 189"" ""
190SKIP=
187 191
188 192
189cd .. && rm -rf tar.tempdir || exit 1 193cd .. && rm -rf tar.tempdir || exit 1
diff --git a/testsuite/tar/tar-extracts-all-subdirs b/testsuite/tar/tar-extracts-all-subdirs
index 886c37ce9..f5351f4f5 100644
--- a/testsuite/tar/tar-extracts-all-subdirs
+++ b/testsuite/tar/tar-extracts-all-subdirs
@@ -9,4 +9,4 @@ find foo | sort >logfile.bb
9rm -rf foo/* 9rm -rf foo/*
10tar xf foo.tar -C foo ./1/10 10tar xf foo.tar -C foo ./1/10
11find foo | sort >logfile.gnu 11find foo | sort >logfile.gnu
12cmp logfile.gnu logfile.bb 12diff -u logfile.gnu logfile.bb
diff --git a/util-linux/acpid.c b/util-linux/acpid.c
index 2f27cfd1c..6e7321b02 100644
--- a/util-linux/acpid.c
+++ b/util-linux/acpid.c
@@ -33,6 +33,25 @@
33#include <syslog.h> 33#include <syslog.h>
34#include <linux/input.h> 34#include <linux/input.h>
35 35
36#ifndef EV_SW
37# define EV_SW 0x05
38#endif
39#ifndef EV_KEY
40# define EV_KEY 0x01
41#endif
42#ifndef SW_LID
43# define SW_LID 0x00
44#endif
45#ifndef SW_RFKILL_ALL
46# define SW_RFKILL_ALL 0x03
47#endif
48#ifndef KEY_POWER
49# define KEY_POWER 116 /* SC System Power Down */
50#endif
51#ifndef KEY_SLEEP
52# define KEY_SLEEP 142 /* SC System Sleep */
53#endif
54
36enum { 55enum {
37 OPT_c = (1 << 0), 56 OPT_c = (1 << 0),
38 OPT_d = (1 << 1), 57 OPT_d = (1 << 1),
diff --git a/util-linux/fdisk.c b/util-linux/fdisk.c
index b86b13bdc..c0be15a3a 100644
--- a/util-linux/fdisk.c
+++ b/util-linux/fdisk.c
@@ -2543,6 +2543,35 @@ new_partition(void)
2543} 2543}
2544 2544
2545static void 2545static void
2546reread_partition_table(int leave)
2547{
2548 int i;
2549
2550 printf("Calling ioctl() to re-read partition table\n");
2551 sync();
2552 /* Users with slow external USB disks on a 320MHz ARM system (year 2011)
2553 * report that sleep is needed, otherwise BLKRRPART may fail with -EIO:
2554 */
2555 sleep(1);
2556 i = ioctl_or_perror(dev_fd, BLKRRPART, NULL,
2557 "WARNING: rereading partition table "
2558 "failed, kernel still uses old table");
2559#if 0
2560 if (dos_changed)
2561 printf(
2562 "\nWARNING: If you have created or modified any DOS 6.x\n"
2563 "partitions, please see the fdisk manual page for additional\n"
2564 "information\n");
2565#endif
2566
2567 if (leave) {
2568 if (ENABLE_FEATURE_CLEAN_UP)
2569 close_dev_fd();
2570 exit(i != 0);
2571 }
2572}
2573
2574static void
2546write_table(void) 2575write_table(void)
2547{ 2576{
2548 int i; 2577 int i;
@@ -2553,7 +2582,6 @@ write_table(void)
2553 ptes[3].changed = 1; 2582 ptes[3].changed = 1;
2554 for (i = 3; i < g_partitions; i++) { 2583 for (i = 3; i < g_partitions; i++) {
2555 struct pte *pe = &ptes[i]; 2584 struct pte *pe = &ptes[i];
2556
2557 if (pe->changed) { 2585 if (pe->changed) {
2558 write_part_table_flag(pe->sectorbuffer); 2586 write_part_table_flag(pe->sectorbuffer);
2559 write_sector(pe->offset_from_dev_start, pe->sectorbuffer); 2587 write_sector(pe->offset_from_dev_start, pe->sectorbuffer);
@@ -2565,44 +2593,17 @@ write_table(void)
2565 sgi_write_table(); 2593 sgi_write_table();
2566 } 2594 }
2567 else if (LABEL_IS_SUN) { 2595 else if (LABEL_IS_SUN) {
2568 int needw = 0; 2596 for (i = 0; i < 8; i++) {
2569 2597 if (ptes[i].changed) {
2570 for (i = 0; i < 8; i++) 2598 sun_write_table();
2571 if (ptes[i].changed) 2599 break;
2572 needw = 1; 2600 }
2573 if (needw) 2601 }
2574 sun_write_table();
2575 } 2602 }
2576 2603
2577 printf("The partition table has been altered!\n\n"); 2604 printf("The partition table has been altered.\n");
2578 reread_partition_table(1); 2605 reread_partition_table(1);
2579} 2606}
2580
2581static void
2582reread_partition_table(int leave)
2583{
2584 int i;
2585
2586 printf("Calling ioctl() to re-read partition table\n");
2587 sync();
2588 /* sleep(2); Huh? */
2589 i = ioctl_or_perror(dev_fd, BLKRRPART, NULL,
2590 "WARNING: rereading partition table "
2591 "failed, kernel still uses old table");
2592#if 0
2593 if (dos_changed)
2594 printf(
2595 "\nWARNING: If you have created or modified any DOS 6.x\n"
2596 "partitions, please see the fdisk manual page for additional\n"
2597 "information\n");
2598#endif
2599
2600 if (leave) {
2601 if (ENABLE_FEATURE_CLEAN_UP)
2602 close_dev_fd();
2603 exit(i != 0);
2604 }
2605}
2606#endif /* FEATURE_FDISK_WRITABLE */ 2607#endif /* FEATURE_FDISK_WRITABLE */
2607 2608
2608#if ENABLE_FEATURE_FDISK_ADVANCED 2609#if ENABLE_FEATURE_FDISK_ADVANCED
@@ -3100,7 +3101,7 @@ int fdisk_main(int argc UNUSED_PARAM, char **argv)
3100 verify(); 3101 verify();
3101 break; 3102 break;
3102 case 'w': 3103 case 'w':
3103 write_table(); /* does not return */ 3104 write_table(); /* does not return */
3104 break; 3105 break;
3105#if ENABLE_FEATURE_FDISK_ADVANCED 3106#if ENABLE_FEATURE_FDISK_ADVANCED
3106 case 'x': 3107 case 'x':
diff --git a/util-linux/hwclock.c b/util-linux/hwclock.c
index ee68be8c5..6b4e29bfa 100644
--- a/util-linux/hwclock.c
+++ b/util-linux/hwclock.c
@@ -60,25 +60,31 @@ static void show_clock(const char **pp_rtcname, int utc)
60#if SHOW_HWCLOCK_DIFF 60#if SHOW_HWCLOCK_DIFF
61 struct timeval sys_tv; 61 struct timeval sys_tv;
62#endif 62#endif
63 time_t t; 63 time_t t = read_rtc(pp_rtcname, &sys_tv, utc);
64 char *cp;
65 64
66 t = read_rtc(pp_rtcname, &sys_tv, utc); 65#if ENABLE_LOCALE_SUPPORT
67 cp = ctime(&t); 66 /* Standard hwclock uses locale-specific output format */
67 char cp[64];
68 struct tm *ptm = localtime(&t);
69 strftime(cp, sizeof(cp), "%c", ptm);
70#else
71 char *cp = ctime(&t);
68 strchrnul(cp, '\n')[0] = '\0'; 72 strchrnul(cp, '\n')[0] = '\0';
73#endif
74
69#if !SHOW_HWCLOCK_DIFF 75#if !SHOW_HWCLOCK_DIFF
70 printf("%s 0.000000 seconds\n", cp); 76 printf("%s 0.000000 seconds\n", cp);
71#else 77#else
72 { 78 {
73 long diff = sys_tv.tv_sec - t; 79 long diff = sys_tv.tv_sec - t;
74 if (diff < 0 /*&& tv.tv_usec != 0*/) { 80 if (diff < 0 /*&& tv.tv_usec != 0*/) {
75 /* Why? */ 81 /* Why we need diff++? */
76 /* diff >= 0 is ok: diff < 0, can't just use tv.tv_usec: */ 82 /* diff >= 0 is ok: | diff < 0, can't just use tv.tv_usec: */
77 /* 45.520820 43.520820 */ 83 /* 45.520820 | 43.520820 */
78 /* - 44.000000 - 45.000000 */ 84 /* - 44.000000 | - 45.000000 */
79 /* = 1.520820 = -1.479180, not -2.520820! */ 85 /* = 1.520820 | = -1.479180, not -2.520820! */
80 diff++; 86 diff++;
81 /* should be 1000000 - tv.tv_usec, but then we must check tv.tv_usec != 0 */ 87 /* Should be 1000000 - tv.tv_usec, but then we must check tv.tv_usec != 0 */
82 sys_tv.tv_usec = 999999 - sys_tv.tv_usec; 88 sys_tv.tv_usec = 999999 - sys_tv.tv_usec;
83 } 89 }
84 printf("%s %ld.%06lu seconds\n", cp, diff, (unsigned long)sys_tv.tv_usec); 90 printf("%s %ld.%06lu seconds\n", cp, diff, (unsigned long)sys_tv.tv_usec);
@@ -268,8 +274,8 @@ static void set_system_clock_timezone(int utc)
268//usage: "\n -w Set hardware clock from system time" 274//usage: "\n -w Set hardware clock from system time"
269//usage: "\n -t Set in-kernel timezone, correct system time" 275//usage: "\n -t Set in-kernel timezone, correct system time"
270//usage: "\n if hardware clock is in local time" 276//usage: "\n if hardware clock is in local time"
271//usage: "\n -u Hardware clock is in UTC" 277//usage: "\n -u Assume hardware clock is kept in UTC"
272//usage: "\n -l Hardware clock is in local time" 278//usage: "\n -l Assume hardware clock is kept in local time"
273//usage: "\n -f FILE Use specified device (e.g. /dev/rtc2)" 279//usage: "\n -f FILE Use specified device (e.g. /dev/rtc2)"
274 280
275#define HWCLOCK_OPT_LOCALTIME 0x01 281#define HWCLOCK_OPT_LOCALTIME 0x01
diff --git a/util-linux/lspci.c b/util-linux/lspci.c
index f59aec8a5..5184858d1 100644
--- a/util-linux/lspci.c
+++ b/util-linux/lspci.c
@@ -12,7 +12,7 @@
12//usage:#define lspci_full_usage "\n\n" 12//usage:#define lspci_full_usage "\n\n"
13//usage: "List all PCI devices" 13//usage: "List all PCI devices"
14//usage: "\n" 14//usage: "\n"
15//usage: "\n -m Parseable output" 15//usage: "\n -m Parsable output"
16//usage: "\n -k Show driver" 16//usage: "\n -k Show driver"
17 17
18#include "libbb.h" 18#include "libbb.h"
diff --git a/util-linux/swaponoff.c b/util-linux/swaponoff.c
index dbefa4cf2..43ddb4031 100644
--- a/util-linux/swaponoff.c
+++ b/util-linux/swaponoff.c
@@ -25,6 +25,9 @@
25#include "libbb.h" 25#include "libbb.h"
26#include <mntent.h> 26#include <mntent.h>
27#include <sys/swap.h> 27#include <sys/swap.h>
28#ifndef __BIONIC__
29# include <sys/swap.h>
30#endif
28 31
29#if ENABLE_FEATURE_MOUNT_LABEL 32#if ENABLE_FEATURE_MOUNT_LABEL
30# include "volume_id.h" 33# include "volume_id.h"
@@ -32,6 +35,10 @@
32# define resolve_mount_spec(fsname) ((void)0) 35# define resolve_mount_spec(fsname) ((void)0)
33#endif 36#endif
34 37
38#ifndef MNTTYPE_SWAP
39# define MNTTYPE_SWAP "swap"
40#endif
41
35#if ENABLE_FEATURE_SWAPON_PRI 42#if ENABLE_FEATURE_SWAPON_PRI
36struct globals { 43struct globals {
37 int flags; 44 int flags;