Browse Source

busybox: update to latest

Waldemar Brodkorb 3 years ago
parent
commit
e4800c73e6

+ 3 - 3
package/busybox/Makefile

@@ -4,9 +4,9 @@
 include $(ADK_TOPDIR)/rules.mk
 
 PKG_NAME:=		busybox
-PKG_VERSION:=		1.26.2
-PKG_RELEASE:=		2
-PKG_HASH:=		da3e44913fc1a9c9b7c5337ea5292da518683cbff32be630777f565d6036af16
+PKG_VERSION:=		1.32.0
+PKG_RELEASE:=		1
+PKG_HASH:=		c35d87f1d04b2b153d33c275c2632e40d388a88f19a9e71727e0bbbff51fe689
 PKG_DESCR:=		core utilities for embedded systems
 PKG_SECTION:=		base/apps
 PKG_URL:=		http://www.busybox.net/

+ 49 - 0
package/busybox/config/Config.in

@@ -30,6 +30,19 @@ config BUSYBOX_EXTRA_COMPAT
 	  some GNU extensions in libc. You probably only need this option
 	  if you plan to run busybox on desktop.
 
+config BUSYBOX_FEDORA_COMPAT
+	bool "Building for Fedora distribution"
+	default n
+	help
+	This option makes some tools behave like they do on Fedora.
+
+	At the time of this writing (2017-08) this only affects uname:
+	normally, uname -p (processor) and uname -i (platform)
+	are shown as "unknown", but with this option uname -p
+	shows the same string as uname -m (machine type),
+	and so does uname -i unless machine type is i486/i586/i686 -
+	then uname -i shows "i386".
+
 config BUSYBOX_INCLUDE_SUSv2
 	bool "Enable obsolete features removed before SUSv3"
 	default n
@@ -47,6 +60,14 @@ config BUSYBOX_USE_PORTABLE_CODE
 	  compiler other than gcc.
 	  If you do use gcc, this option may needlessly increase code size.
 
+config BUSYBOX_STACK_OPTIMIZATION_386
+	bool "Use -mpreferred-stack-boundary=2 on i386 arch"
+	default n
+	help
+	This option makes for smaller code, but some libc versions
+	do not work with it (they use SSE instructions without
+	ensuring stack alignment).
+
 config BUSYBOX_INSTALL_NO_USR
         bool "Don't use /usr"
         default n
@@ -135,6 +156,11 @@ config BUSYBOX_BUSYBOX
 	  If you can live without these features disabling this will save
 	  some space.
 
+config BUSYBOX_FEATURE_SHOW_SCRIPT
+	bool "Support --show SCRIPT"
+	default n
+	depends on BUSYBOX_BUSYBOX
+
 config BUSYBOX_FEATURE_INSTALLER
 	bool "Support --install [-s] to install applet links at runtime"
 	default n
@@ -316,6 +342,15 @@ config BUSYBOX_FEATURE_CLEAN_UP
 	  Don't enable this unless you have a really good reason to clean
 	  things up manually.
 
+config BUSYBOX_FEATURE_SYSLOG_INFO
+	bool "Support LOG_INFO level syslog messages"
+	default y
+	depends on BUSYBOX_FEATURE_SYSLOG
+	help
+	Applets which send their output to syslog use either LOG_INFO or
+	LOG_ERR log levels, but by disabling this option all messages will
+	be logged at the LOG_ERR level, saving just under 200 bytes.
+
 config BUSYBOX_FEATURE_UTMP
 	bool "Support utmp file"
 	default n
@@ -728,6 +763,19 @@ config BUSYBOX_WERROR
 
 	  Most people should answer N.
 
+config BUSYBOX_WARN_SIMPLE_MSG
+	bool "Warn about single parameter bb_xx_msg calls"
+	default n
+	help
+	This will cause warnings to be shown for any instances of
+	bb_error_msg(), bb_error_msg_and_die(), bb_perror_msg(),
+	bb_perror_msg_and_die(), bb_herror_msg() or bb_herror_msg_and_die()
+	being called with a single parameter. In these cases the equivalent
+	bb_simple_xx_msg function should be used instead.
+	Note that use of STRERROR_FMT may give false positives.
+
+	If you aren't developing busybox, say N here.
+
 choice
 	prompt "Additional debugging library"
 	default NO_DEBUG_LIB
@@ -850,6 +898,7 @@ source package/busybox/config/archival/Config.in
 source package/busybox/config/coreutils/Config.in
 source package/busybox/config/console-tools/Config.in
 source package/busybox/config/debianutils/Config.in
+source package/busybox/config/klibc-utils/Config.in
 source package/busybox/config/editors/Config.in
 source package/busybox/config/findutils/Config.in
 source package/busybox/config/init/Config.in

+ 33 - 0
package/busybox/config/archival/Config.in

@@ -457,4 +457,37 @@ config BUSYBOX_UNZIP
 	  current directory. Use the `-d' option to extract to a
 	  directory of your choice.
 
+config BUSYBOX_FEATURE_UNZIP_CDF
+	bool "Read and use Central Directory data"
+	default y
+	depends on BUSYBOX_UNZIP
+	help
+	If you know that you only need to deal with simple
+	ZIP files without deleted/updated files, SFX archives etc,
+	you can reduce code size by unselecting this option.
+	To support less trivial ZIPs, say Y.
+
+config BUSYBOX_FEATURE_UNZIP_BZIP2
+	bool "Support compression method 12 (bzip2)"
+	default y
+	depends on BUSYBOX_FEATURE_UNZIP_CDF && BUSYBOX_DESKTOP
+
+config BUSYBOX_FEATURE_UNZIP_LZMA
+	bool "Support compression method 14 (lzma)"
+	default y
+	depends on BUSYBOX_FEATURE_UNZIP_CDF && BUSYBOX_DESKTOP
+
+config BUSYBOX_FEATURE_UNZIP_XZ
+	bool "Support compression method 95 (xz)"
+	default y
+	depends on BUSYBOX_FEATURE_UNZIP_CDF && BUSYBOX_DESKTOP
+
+config BUSYBOX_FEATURE_LZMA_FAST
+	bool "Optimize lzma for speed"
+	default n
+	depends on BUSYBOX_UNLZMA || BUSYBOX_LZCAT || BUSYBOX_LZMA || BUSYBOX_FEATURE_SEAMLESS_LZMA
+	help
+	This option reduces decompression time by about 25% at the cost of
+	a 1K bigger binary.
+
 endmenu

+ 69 - 0
package/busybox/config/coreutils/Config.in

@@ -21,6 +21,20 @@ config BUSYBOX_CAT
 	  cat is used to concatenate files and print them to the standard
 	  output. Enable this option if you wish to enable the 'cat' utility.
 
+config BUSYBOX_FEATURE_CATN
+	bool "Enable -n and -b options"
+	default n
+	depends on BUSYBOX_CAT
+	help
+	-n numbers all output lines while -b numbers nonempty output lines.
+
+config BUSYBOX_FEATURE_CATV
+	bool "cat -v[etA]"
+	default y
+	depends on BUSYBOX_CAT
+	help
+	Display nonprinting characters as escape sequences
+
 config BUSYBOX_DATE
 	bool "date"
 	default y
@@ -430,6 +444,12 @@ config BUSYBOX_EXPR_MATH_SUPPORT_64
 	  the applet slightly larger, but will allow computation with very
 	  large numbers.
 
+config BUSYBOX_FACTOR
+	bool "factor (2.7 kb)"
+	default n
+	help
+	factor factorizes integers
+
 config BUSYBOX_FALSE
 	bool "false"
 	default n
@@ -480,6 +500,11 @@ config BUSYBOX_FEATURE_INSTALL_LONG_OPTIONS
 ####	default y
 ####	help
 ####	  length is used to print out the length of a specified string.
+config BUSYBOX_LINK
+	bool "link (3.2 kb)"
+	default n
+	help
+	link creates hard links between files.
 
 config BUSYBOX_LN
 	bool "ln"
@@ -520,6 +545,11 @@ config BUSYBOX_FEATURE_LS_RECURSIVE
 	help
 	  Enable the ls option (-R).
 
+config BUSYBOX_FEATURE_LS_WIDTH
+	bool "Enable -w WIDTH and window size autodetection"
+	default y
+	depends on BUSYBOX_LS
+
 config BUSYBOX_FEATURE_LS_SORTFILES
 	bool "Sort the file names"
 	default y
@@ -611,18 +641,37 @@ config BUSYBOX_NICE
 	help
 	  nice runs a program with modified scheduling priority.
 
+config BUSYBOX_NL
+	bool "nl (4.6 kb)"
+	default n
+	help
+	nl is used to number lines of files.
+
 config BUSYBOX_NOHUP
 	bool "nohup"
 	default n
 	help
 	  run a command immune to hangups, with output to a non-tty.
 
+config BUSYBOX_NPROC
+	bool "nproc (3.7 kb)"
+	default n
+	help
+	Print number of CPUs
+
 config BUSYBOX_OD
 	bool "od"
 	default n
 	help
 	  od is used to dump binary files in octal and other formats.
 
+config BUSYBOX_PASTE
+	bool "paste (4.9 kb)"
+	default n
+	help
+	paste is used to paste lines of different files together
+	and write the result to stdout
+
 config BUSYBOX_PRINTENV
 	bool "printenv"
 	default n
@@ -689,6 +738,12 @@ config BUSYBOX_SEQ
 	help
 	  print a sequence of numbers
 
+config BUSYBOX_SHRED
+	bool "shred (4.9 kb)"
+	default n
+	help
+	Overwrite a file to hide its contents, and optionally delete it
+
 config BUSYBOX_SHA1SUM
 	bool "sha1sum"
 	default n
@@ -759,6 +814,14 @@ config BUSYBOX_FEATURE_SORT_BIG
 	  The SuSv3 sort standard is available at:
 	  http://www.opengroup.org/onlinepubs/007904975/utilities/sort.html
 
+config BUSYBOX_FEATURE_SORT_OPTIMIZE_MEMORY
+	bool "Use less memory (but might be slower)"
+	default n   # defaults to N since we are size-paranoid tribe
+	depends on BUSYBOX_SORT
+	help
+	Attempt to use less memory (by storing only one copy
+	of duplicated lines, and such). Useful if you work on huge files.
+
 config BUSYBOX_SPLIT
 	bool "split"
 	default n
@@ -891,6 +954,12 @@ config BUSYBOX_UNAME_OSNAME
 	  Sets the operating system name reported by uname -o.  The
 	  default is "GNU/Linux".
 
+config BUSYBOX_BB_ARCH
+	bool "arch (1.1 kb)"
+	default n
+	help
+	Same as uname -m.
+
 config BUSYBOX_UNEXPAND
 	bool "unexpand"
 	default n

+ 22 - 0
package/busybox/config/findutils/Config.in

@@ -54,6 +54,11 @@ config BUSYBOX_FEATURE_FIND_TYPE
 	  Enable searching based on file type (file,
 	  directory, socket, device, etc.).
 
+config BUSYBOX_FEATURE_FIND_EXECUTABLE
+	bool "Enable -executable: file is executable"
+	default y
+	depends on BUSYBOX_FIND
+
 config BUSYBOX_FEATURE_FIND_XDEV
 	bool "Enable -xdev: 'stay in filesystem'"
 	default y
@@ -161,6 +166,13 @@ config BUSYBOX_FEATURE_FIND_PRUNE
 	  If the file is a directory, dont descend into it. Useful for
 	  exclusion .svn and CVS directories.
 
+config BUSYBOX_FEATURE_FIND_QUIT
+	bool "Enable -quit: exit"
+	default y
+	depends on BUSYBOX_FIND
+	help
+	If this action is reached, 'find' exits.
+
 config BUSYBOX_FEATURE_FIND_DELETE
 	bool "Enable -delete: delete files/dirs"
 	default y
@@ -274,4 +286,14 @@ config BUSYBOX_FEATURE_XARGS_SUPPORT_REPL_STR
 	help
 	  Support -I STR and -i[STR] options.
 
+config BUSYBOX_FEATURE_XARGS_SUPPORT_PARALLEL
+	bool "Enable -P N: processes to run in parallel"
+	default y
+	depends on BUSYBOX_XARGS
+
+config BUSYBOX_FEATURE_XARGS_SUPPORT_ARGS_FILE
+	bool "Enable -a FILE: use FILE instead of stdin"
+	default y
+	depends on BUSYBOX_XARGS
+
 endmenu

+ 16 - 0
package/busybox/config/init/Config.in

@@ -63,6 +63,17 @@ config BUSYBOX_REBOOT
 	help
 	  Stop all processes and reboot the system.
 
+config BUSYBOX_FEATURE_WAIT_FOR_INIT
+	bool "Before signaling init, make sure it is ready for it"
+	default y
+	depends on BUSYBOX_HALT || BUSYBOX_POWEROFF || BUSYBOX_REBOOT
+	help
+	In rare cases, poweroff may be commanded by firmware to OS
+	even before init process exists. On Linux, this spawns
+	"/sbin/poweroff" very early. This option adds code
+	which checks that init is ready to receive poweroff
+	commands. Code size increase of ~80 bytes.
+
 config BUSYBOX_FEATURE_CALL_TELINIT
 	bool "Call telinit on shutdown and reboot"
 	default n
@@ -149,6 +160,11 @@ config BUSYBOX_FEATURE_INIT_SYSLOG
 	default y
 	depends on BUSYBOX_INIT
 
+config BUSYBOX_FEATURE_INIT_QUIET
+	bool "Be quiet on boot (no 'init started:' message)"
+	default y
+	depends on BUSYBOX_INIT || BUSYBOX_LINUXRC
+
 config BUSYBOX_FEATURE_EXTRA_QUIET
 	bool "Be _extra_ quiet on boot"
 	default y

+ 36 - 0
package/busybox/config/libbb/Config.in

@@ -39,6 +39,12 @@ config BUSYBOX_FEATURE_USE_BSS_TAIL
 	        appletlib.c:(.text.main+0xd): undefined reference to '_end'
 	  disable this option.
 
+config BUSYBOX_FLOAT_DURATION
+	bool "Enable fractional duration arguments"
+	default y
+	help
+	Allow sleep N.NNN, top -d N.NNN etc.
+
 config BUSYBOX_FEATURE_RTMINMAX
 	bool "Support RTMIN[+n] and RTMAX[-n] signal names"
 	default y
@@ -46,6 +52,18 @@ config BUSYBOX_FEATURE_RTMINMAX
 	  Support RTMIN[+n] and RTMAX[-n] signal names
 	  in kill, killall etc. This costs ~250 bytes.
 
+config BUSYBOX_FEATURE_RTMINMAX_USE_LIBC_DEFINITIONS
+	bool "Use the definitions of SIGRTMIN/SIGRTMAX provided by libc"
+	default y
+	depends on BUSYBOX_FEATURE_RTMINMAX
+	help
+	Some C libraries reserve a few real-time signals for internal
+	use, and adjust the values of SIGRTMIN/SIGRTMAX seen by
+	applications accordingly. Saying yes here means that a signal
+	name RTMIN+n will be interpreted according to the libc definition
+	of SIGRTMIN, and not the raw definition provided by the kernel.
+	This behavior matches "kill -l RTMIN+n" from bash.
+
 config BUSYBOX_PASSWORD_MINLEN
 	int "Minimum password length"
 	default 6
@@ -92,6 +110,19 @@ config BUSYBOX_FEATURE_ETC_NETWORKS
 	  a rarely used feature which allows you to use names
 	  instead of IP/mask pairs in route command.
 
+config BUSYBOX_FEATURE_ETC_SERVICES
+	bool "Consult /etc/services even for well-known ports"
+	default n
+	help
+	Look up e.g. "telnet" and "http" in /etc/services file
+	instead of assuming ports 23 and 80.
+	This is almost never necessary (everybody uses standard ports),
+	and it makes sense to avoid reading this file.
+	If you disable this option, in the cases where port is explicitly
+	specified as a service name (e.g. "telnet HOST PORTNAME"),
+	it will still be looked up in /etc/services.
+
+
 config BUSYBOX_FEATURE_USE_TERMIOS
 	bool "Use termios to manipulate the screen"
 	default y
@@ -180,6 +211,11 @@ config BUSYBOX_FEATURE_EDITING_FANCY_PROMPT
 	  Setting this option allows for prompts to use things like \w and
 	  \$ and escape codes.
 
+config BUSYBOX_FEATURE_EDITING_WINCH
+	bool "Enable automatic tracking of window size changes"
+	default y
+	depends on BUSYBOX_FEATURE_EDITING
+
 config BUSYBOX_FEATURE_EDITING_ASK_TERMINAL
 	bool "Query cursor position from terminal"
 	default n

+ 5 - 0
package/busybox/config/loginutils/Config.in

@@ -338,6 +338,11 @@ config BUSYBOX_FEATURE_SU_CHECKS_SHELLS
 	depends on BUSYBOX_SU
 	default y
 
+config BUSYBOX_FEATURE_SU_BLANK_PW_NEEDS_SECURE_TTY
+	bool "Allow blank passwords only on TTYs in /etc/securetty"
+	default n
+	depends on BUSYBOX_SU
+
 config BUSYBOX_SULOGIN
 	bool "sulogin"
 	default n

+ 81 - 0
package/busybox/config/miscutils/Config.in

@@ -44,6 +44,13 @@ config BUSYBOX_I2CDETECT
 	help
 	  Detect I2C chips.
 
+config BUSYBOX_I2CTRANSFER
+	bool "i2ctransfer (4.0 kb)"
+	default n
+	select BUSYBOX_PLATFORM_LINUX
+	help
+	Send user-defined I2C messages in one transfer.
+
 config BUSYBOX_LESS
 	bool "less"
 	depends on !BUSYBOX_DISABLE_LESS
@@ -129,6 +136,32 @@ config BUSYBOX_FEATURE_LESS_LINENUMS
 	help
 	  Enables "-N" command.
 
+config BUSYBOX_FEATURE_LESS_RAW
+	bool "Enable -R ('raw control characters')"
+	default y
+	depends on BUSYBOX_FEATURE_LESS_DASHCMD
+	help
+	This is essential for less applet to work with tools that use colors
+	and paging, such as git, systemd tools or nmcli.
+
+config BUSYBOX_FEATURE_LESS_ENV
+	bool "Take options from $LESS environment variable"
+	default y
+	depends on BUSYBOX_FEATURE_LESS_DASHCMD
+	help
+	This is essential for less applet to work with tools that use colors
+	and paging, such as git, systemd tools or nmcli.
+
+config BUSYBOX_LSSCSI
+	bool "lsscsi (2.5 kb)"
+	default n
+	#select PLATFORM_LINUX
+	help
+	lsscsi is a utility for displaying information about SCSI buses in the
+	system and devices connected to them.
+
+	This version uses sysfs (/sys/bus/scsi/devices) only.
+
 config BUSYBOX_NANDWRITE
 	bool "nandwrite"
 	default n
@@ -143,6 +176,19 @@ config BUSYBOX_NANDDUMP
 	help
 	  Dump the content of raw NAND chip
 
+config BUSYBOX_PARTPROBE
+	bool "partprobe (3.5 kb)"
+	default n
+	select BUSYBOX_PLATFORM_LINUX
+	help
+	Ask kernel to rescan partition table.
+
+config BUSYBOX_SETFATTR
+	bool "setfattr (3.7 kb)"
+	default n
+	help
+	Set/delete extended attributes on files
+
 config BUSYBOX_SETSERIAL
 	bool "setserial"
 	default n
@@ -368,6 +414,31 @@ config BUSYBOX_CRONTAB
 	  Note that Busybox binary must be setuid root for this applet to
 	  work properly.
 
+config BUSYBOX_BC
+	bool "bc (45 kb)"
+	default n
+	select BUSYBOX_FEATURE_DC_BIG
+	help
+	bc is a command-line, arbitrary-precision calculator with a
+	Turing-complete language. See the GNU bc manual
+	(https://www.gnu.org/software/bc/manual/bc.html) and bc spec
+	(http://pubs.opengroup.org/onlinepubs/9699919799/utilities/bc.html).
+
+	This bc has five differences to the GNU bc:
+	  1) The period (.) is a shortcut for "last", as in the BSD bc.
+	  2) Arrays are copied before being passed as arguments to
+	     functions. This behavior is required by the bc spec.
+	  3) Arrays can be passed to the builtin "length" function to get
+	     the number of elements in the array. This prints "1":
+		a[0] = 0; length(a[])
+	  4) The precedence of the boolean "not" operator (!) is equal to
+	     that of the unary minus (-) negation operator. This still
+	     allows POSIX-compliant scripts to work while somewhat
+	     preserving expected behavior (versus C) and making parsing
+	     easier.
+	  5) "read()" accepts expressions, not only numeric literals.
+
+
 config BUSYBOX_DC
 	bool "dc"
 	default n
@@ -612,6 +683,12 @@ config BUSYBOX_FEATURE_HDPARM_HDIO_GETSET_DMA
 	help
 	  Enables the 'hdparm -d' option to get/set using_dma flag.
 
+config BUSYBOX_HEXEDIT
+	bool "hexedit (21 kb)"
+	default n
+	help
+	Edit file in hexadecimal.
+
 config BUSYBOX_MAKEDEVS
 	bool "makedevs"
 	default n
@@ -763,6 +840,10 @@ config BUSYBOX_TIME
 	  When the command finishes, time writes a message to standard output
 	  giving timing statistics about this program run.
 
+config BUSYBOX_TS
+	bool "ts (450 bytes)"
+	default n
+
 config BUSYBOX_TIMEOUT
 	bool "timeout"
 	default n

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

@@ -136,6 +136,21 @@ config BUSYBOX_DEPMOD
 
 comment "Options common to multiple modutils"
 
+config BUSYBOX_FEATURE_CMDLINE_MODULE_OPTIONS
+	bool "Accept module options on modprobe command line"
+	default y
+	depends on BUSYBOX_INSMOD || BUSYBOX_MODPROBE
+	help
+	Allow insmod and modprobe take module options from the applets'
+	command line.
+
+config BUSYBOX_FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED
+	bool "Skip loading of already loaded modules"
+	default y
+	depends on BUSYBOX_MODPROBE_SMALL && (BUSYBOX_DEPMOD || BUSYBOX_INSMOD || BUSYBOX_MODPROBE)
+	help
+	Check if the module is already loaded.
+
 config BUSYBOX_FEATURE_2_4_MODULES
 	bool "Support version 2.2/2.4 Linux kernels"
 	default n

+ 48 - 5
package/busybox/config/networking/Config.in

@@ -49,6 +49,12 @@ config BUSYBOX_NC
 	  A simple Unix utility which reads and writes data across network
 	  connections.
 
+config BUSYBOX_NETCAT
+	bool "netcat (11 kb)"
+	default y
+	help
+	Alias to nc.
+
 config BUSYBOX_NC_SERVER
 	bool "Netcat server options (-l)"
 	default y
@@ -145,6 +151,17 @@ config BUSYBOX_VERBOSE_RESOLUTION_ERRORS
 	  "can't resolve 'hostname.com'" and want to know more.
 	  This may increase size of your executable a bit.
 
+config BUSYBOX_FEATURE_TLS_SHA1
+	bool "In TLS code, support ciphers which use deprecated SHA1"
+	depends on BUSYBOX_TLS
+	default n
+	help
+	Selecting this option increases interoperability with very old
+	servers, but slightly increases code size.
+
+	Most TLS servers support SHA256 today (2018), since SHA1 is
+	considered possibly insecure (although not yet definitely broken).
+
 config BUSYBOX_ARP
 	bool "arp"
 	default n
@@ -745,6 +762,16 @@ config BUSYBOX_NSLOOKUP
 	help
 	  nslookup is a tool to query Internet name servers.
 
+config BUSYBOX_FEATURE_NSLOOKUP_BIG
+	bool "Use internal resolver code instead of libc"
+	depends on BUSYBOX_NSLOOKUP
+	default n
+
+config BUSYBOX_FEATURE_NSLOOKUP_LONG_OPTIONS
+	bool "Enable long options"
+	default n
+	depends on BUSYBOX_FEATURE_NSLOOKUP_BIG && BUSYBOX_LONG_OPTS
+
 config BUSYBOX_NTPD
 	bool "ntpd"
 	depends on !BUSYBOX_DISABLE_NTPD
@@ -791,11 +818,18 @@ config BUSYBOX_SLATTACH
 	  slattach is a small utility to attach network interfaces to serial
 	  lines.
 
-#config TC
-#	bool "tc"
-#	default y
-#	help
-#	  show / manipulate traffic control settings
+config BUSYBOX_SSL_CLIENT
+	bool "ssl_client (25 kb)"
+	default n
+	select BUSYBOX_TLS
+	help
+	This tool pipes data to/from a socket, TLS-encrypting it.
+
+config BUSYBOX_TC
+	bool "tc"
+	default n
+	help
+	  show / manipulate traffic control settings
 #
 #config FEATURE_TC_INGRESS
 #	def_bool n
@@ -834,6 +868,11 @@ config BUSYBOX_FEATURE_TELNET_AUTOLOGIN
 	  log into a machine without telling the username (autologin). This
 	  option enables `-a' and `-l USER' arguments.
 
+config BUSYBOX_FEATURE_TELNET_WIDTH
+	bool "Enable window size autodetection"
+	default y
+	depends on BUSYBOX_TELNET
+
 config BUSYBOX_TELNETD
 	bool "telnetd"
 	default n
@@ -970,6 +1009,10 @@ config BUSYBOX_TFTP_DEBUG
 	  Make tftp[d] print debugging messages on stderr.
 	  This is useful if you are diagnosing a bug in tftp[d].
 
+config BUSYBOX_TLS
+	bool #No description makes it a hidden option
+	default n
+
 config BUSYBOX_TRACEROUTE
 	bool "traceroute"
 	default n

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

@@ -219,6 +219,14 @@ config BUSYBOX_TOP
 	  The top program provides a dynamic real-time view of a running
 	  system.
 
+config BUSYBOX_FEATURE_TOP_INTERACTIVE
+	bool "Accept keyboard commands"
+	default y
+	depends on BUSYBOX_TOP
+	help
+	Without this, top will only refresh display every 5 seconds.
+	No keyboard commands will work, only ^C to terminate.
+
 config BUSYBOX_FEATURE_TOP_CPU_USAGE_PERCENTAGE
 	bool "Show CPU per-process usage percentage"
 	default y

+ 8 - 1
package/busybox/config/runit/Config.in

@@ -41,7 +41,7 @@ config BUSYBOX_SV
 config BUSYBOX_SV_DEFAULT_SERVICE_DIR
 	string "Default directory for services"
 	default "/var/service"
-	depends on BUSYBOX_SV
+	depends on BUSYBOX_SV || BUSYBOX_SVC || BUSYBOX_SVOK
 	help
 	  Default directory for services.
 	  Defaults to "/var/service"
@@ -53,6 +53,13 @@ config BUSYBOX_SVC
 	  svc controls the state of services monitored by the runsv supervisor.
 	  It is comaptible with daemontools command with the same name.
 
+config BUSYBOX_SVOK
+	bool "svok (1.5 kb)"
+	default n
+	help
+	svok checks whether runsv supervisor is running.
+	It is compatible with daemontools command with the same name.
+
 config BUSYBOX_SVLOGD
 	bool "svlogd"
 	default n

+ 5 - 7
package/busybox/config/shell/Config.in

@@ -180,6 +180,7 @@ config BUSYBOX_HUSH
 	bool "hush"
 	default y if ADK_TARGET_UCLINUX
 	default n
+	select BUSYBOX_SHELL_HUSH
 	help
 	  hush is a small shell (25k). It handles the normal flow control
 	  constructs such as if/then/elif/else/fi, for/in/do/done, while loops,
@@ -191,6 +192,10 @@ config BUSYBOX_HUSH
 	  It does not handle select, aliases, tilde expansion,
 	  &>file and >&file redirection of stdout+stderr.
 
+config BUSYBOX_SHELL_HUSH
+	bool "Internal shell for embedded script support"
+	default n
+
 config BUSYBOX_HUSH_BASH_COMPAT
 	bool "bash-compatible extensions"
 	default y
@@ -305,13 +310,6 @@ config BUSYBOX_HUSH_MODE_X
 	  This instructs hush to print commands before execution.
 	  Adds ~300 bytes.
 
-config BUSYBOX_MSH
-	bool "msh (deprecated: aliased to hush)"
-	default n
-	select BUSYBOX_HUSH
-	help
-	  msh is deprecated and will be removed, please migrate to hush.
-
 choice
 prompt "Choose which shell is aliased to 'sh' name"
 

+ 8 - 0
package/busybox/config/sysklogd/Config.in

@@ -59,6 +59,14 @@ config BUSYBOX_FEATURE_SYSLOGD_CFG
 	help
 	  Supports restricted syslogd config. See docs/syslog.conf.txt
 
+config BUSYBOX_FEATURE_SYSLOGD_PRECISE_TIMESTAMPS
+	bool "Include milliseconds in timestamps"
+	default n
+	depends on BUSYBOX_SYSLOGD
+	help
+	Includes milliseconds (HH:MM:SS.mmm) in timestamp when
+	timestamps are added.
+
 config BUSYBOX_FEATURE_SYSLOGD_READ_BUFFER_SIZE
 	int "Read buffer size in bytes"
 	default 256

+ 74 - 0
package/busybox/config/util-linux/Config.in

@@ -18,6 +18,12 @@ config BUSYBOX_BLOCKDEV
 	help
 	  Performs some ioctls with block devices.
 
+config BUSYBOX_FALLOCATE
+	bool "fallocate (4.1 kb)"
+	default n
+	help
+	Preallocate space for files.
+
 config BUSYBOX_FATATTR
 	bool "fatattr"
 	default n
@@ -90,6 +96,17 @@ config BUSYBOX_FEATURE_MDEV_LOAD_FIRMWARE
 	  /lib/firmware/ and if it exists, send it to the kernel for
 	  loading into the hardware.
 
+config BUSYBOX_FEATURE_MDEV_DAEMON
+	bool "Support daemon mode"
+	default y
+	depends on BUSYBOX_MDEV
+	help
+	Adds the -d option to run mdev in daemon mode handling hotplug
+	events from the kernel like udev. If the system generates many
+	hotplug events this mode of operation will consume less
+	resources than registering mdev as hotplug helper or using the
+	uevent applet.
+
 config BUSYBOX_MKE2FS
 	bool "mke2fs"
 	default n
@@ -389,6 +406,14 @@ config BUSYBOX_FSCK_MINIX
 	  check for and attempt to repair any corruption that occurs to a minix
 	  filesystem.
 
+config BUSYBOX_FSFREEZE
+	bool "fsfreeze (3.5 kb)"
+	default n
+	select BUSYBOX_PLATFORM_LINUX
+	select BUSYBOX_LONG_OPTS
+	help
+	Halt new accesses and flush writes on a mounted filesystem.
+
 config BUSYBOX_MKFS_EXT2
 	bool "mkfs_ext2"
 	default n
@@ -470,6 +495,13 @@ config BUSYBOX_HD
 	help
 	  hd is an alias to hexdump -C.
 
+config BUSYBOX_XXD
+	bool "xxd (8.9 kb)"
+	default n
+	help
+	The xxd utility is used to display binary data in a readable
+	way that is comparable to the output from most hex editors.
+
 config BUSYBOX_HWCLOCK
 	bool "hwclock"
 	default y if ADK_TARGET_WITH_RTC
@@ -755,6 +787,43 @@ config BUSYBOX_LINUX64
 	help
 	  Alias to "setarch linux64".
 
+config BUSYBOX_SETPRIV
+	bool "setpriv (6.6 kb)"
+	default n
+	select BUSYBOX_PLATFORM_LINUX
+	select BUSYBOX_LONG_OPTS
+	help
+	Run a program with different Linux privilege settings.
+	Requires kernel >= 3.5
+
+config BUSYBOX_FEATURE_SETPRIV_DUMP
+	bool "Support dumping current privilege state"
+	default y
+	depends on BUSYBOX_SETPRIV
+	help
+	Enables the "--dump" switch to print out the current privilege
+	state. This is helpful for diagnosing problems.
+
+config BUSYBOX_FEATURE_SETPRIV_CAPABILITIES
+	bool "Support capabilities"
+	default y
+	depends on BUSYBOX_SETPRIV
+	help
+	Capabilities can be used to grant processes additional rights
+	without the necessity to always execute as the root user.
+	Enabling this option enables "--dump" to show information on
+	capabilities.
+
+config BUSYBOX_FEATURE_SETPRIV_CAPABILITY_NAMES
+	bool "Support capability names"
+	default y
+	depends on BUSYBOX_SETPRIV && BUSYBOX_FEATURE_SETPRIV_CAPABILITIES
+	help
+	Capabilities can be either referenced via a human-readble name,
+	e.g. "net_admin", or using their index, e.g. "cap_12". Enabling
+	this option allows using the human-readable names in addition to
+	the index-based names.
+
 config BUSYBOX_SWAPON
 	bool "swapon"
 	default n
@@ -952,6 +1021,11 @@ config BUSYBOX_FEATURE_VOLUMEID_HFS
 	help
 	  TODO
 
+config BUSYBOX_FEATURE_VOLUMEID_MINIX
+	bool "minix filesystem"
+	default y
+	depends on BUSYBOX_VOLUMEID
+
 config BUSYBOX_FEATURE_VOLUMEID_NILFS
        bool "nilfs filesystem"
        default y

+ 0 - 90
package/busybox/patches/002-find-empty.patch

@@ -1,90 +0,0 @@
-diff -Nur busybox-1.17.0.orig/findutils/find.c busybox-1.17.0/findutils/find.c
---- busybox-1.17.0.orig/findutils/find.c	2010-06-24 04:40:43.000000000 +0200
-+++ busybox-1.17.0/findutils/find.c	2010-07-08 12:33:55.759015289 +0200
-@@ -133,6 +133,14 @@
- //config:	help
- //config:	  Support the 'find -inum' option for searching by inode number.
- //config:
-+//config:config FEATURE_FIND_EMPTY
-+//config:       bool "Enable -empty option matching empty files and directories"
-+//config:       default y
-+//config:       depends on FIND
-+//config:       help
-+//config:         Support the 'find -empty' option for searching empty files 
-+//config:         and directories.
-+//config:
- //config:config FEATURE_FIND_EXEC
- //config:	bool "Enable -exec: execute commands"
- //config:	default y
-@@ -270,6 +278,7 @@
- IF_FEATURE_FIND_CONTEXT(ACTS(context, security_context_t context;))
- IF_FEATURE_FIND_PAREN(  ACTS(paren, action ***subexpr;))
- IF_FEATURE_FIND_PRUNE(  ACTS(prune))
-+IF_FEATURE_FIND_EMPTY(  ACTS(empty))
- IF_FEATURE_FIND_DELETE( ACTS(delete))
- IF_FEATURE_FIND_EXEC(   ACTS(exec,  char **exec_argv; unsigned *subst_count; int exec_argc;))
- IF_FEATURE_FIND_GROUP(  ACTS(group, gid_t gid;))
-@@ -519,6 +528,34 @@
- 	return exec_actions(ap->subexpr, fileName, statbuf);
- }
- #endif
-+#if ENABLE_FEATURE_FIND_EMPTY
-+ACTF(empty)
-+{
-+	DIR *d;
-+	struct dirent *dp;
-+	bool empty = TRUE;
-+
-+	if (S_ISDIR(statbuf->st_mode)) {
-+		d = opendir(fileName);
-+		if (d == NULL)
-+			bb_simple_perror_msg(fileName);
-+		for (dp = readdir(d); dp; dp = readdir(d)) {
-+			if (dp->d_name[0] != '.' ||
-+				(dp->d_name[1] != '\0' &&
-+				(dp->d_name[1] != '.' ||
-+				dp->d_name[2] != '\0'))) {
-+					empty = FALSE;
-+					break;
-+			}
-+		}
-+		closedir(d);
-+		return(empty);
-+	} else if (S_ISREG(statbuf->st_mode))
-+		return (statbuf->st_size == 0);
-+	else
-+		return FALSE;
-+}
-+#endif
- #if ENABLE_FEATURE_FIND_SIZE
- ACTF(size)
- {
-@@ -686,6 +723,7 @@
- 	IF_FEATURE_FIND_PRINT0( PARM_print0    ,)
- 	IF_FEATURE_FIND_DEPTH(  PARM_depth     ,)
- 	IF_FEATURE_FIND_PRUNE(  PARM_prune     ,)
-+	IF_FEATURE_FIND_EMPTY(  PARM_empty     ,)
- 	IF_FEATURE_FIND_DELETE( PARM_delete    ,)
- 	IF_FEATURE_FIND_EXEC(   PARM_exec      ,)
- 	IF_FEATURE_FIND_PAREN(  PARM_char_brace,)
-@@ -720,6 +758,7 @@
- 	IF_FEATURE_FIND_PRINT0( "-print0\0" )
- 	IF_FEATURE_FIND_DEPTH(  "-depth\0"  )
- 	IF_FEATURE_FIND_PRUNE(  "-prune\0"  )
-+	IF_FEATURE_FIND_EMPTY(  "-empty\0"  )
- 	IF_FEATURE_FIND_DELETE( "-delete\0" )
- 	IF_FEATURE_FIND_EXEC(   "-exec\0"   )
- 	IF_FEATURE_FIND_PAREN(  "(\0"       )
-@@ -839,6 +878,12 @@
- 			(void) ALLOC_ACTION(prune);
- 		}
- #endif
-+#if ENABLE_FEATURE_FIND_EMPTY
-+		else if (parm == PARM_empty) {
-+			IF_FEATURE_FIND_NOT( invert_flag = 0; )
-+			(void) ALLOC_ACTION(empty);
-+		}
-+#endif
- #if ENABLE_FEATURE_FIND_DELETE
- 		else if (parm == PARM_delete) {
- 			G.need_print = 0;

+ 0 - 214
package/busybox/patches/006-od-bloat.patch

@@ -1,214 +0,0 @@
-diff -Nur busybox-1.18.1.orig/coreutils/od.c busybox-1.18.1/coreutils/od.c
---- busybox-1.18.1.orig/coreutils/od.c	2010-12-20 01:41:26.000000000 +0100
-+++ busybox-1.18.1/coreutils/od.c	2010-12-25 23:18:48.000000000 +0100
-@@ -13,210 +13,4 @@
- 
- 
- #include "libbb.h"
--#if ENABLE_DESKTOP
--/* This one provides -t (busybox's own build script needs it) */
- #include "od_bloaty.c"
--#else
--
--#include "dump.h"
--
--static void
--odoffset(dumper_t *dumper, int argc, char ***argvp)
--{
--	char *num, *p;
--	int base;
--	char *end;
--
--	/*
--	 * The offset syntax of od(1) was genuinely bizarre.  First, if
--	 * it started with a plus it had to be an offset.  Otherwise, if
--	 * there were at least two arguments, a number or lower-case 'x'
--	 * followed by a number makes it an offset.  By default it was
--	 * octal; if it started with 'x' or '0x' it was hex.  If it ended
--	 * in a '.', it was decimal.  If a 'b' or 'B' was appended, it
--	 * multiplied the number by 512 or 1024 byte units.  There was
--	 * no way to assign a block count to a hex offset.
--	 *
--	 * We assumes it's a file if the offset is bad.
--	 */
--	p = **argvp;
--
--	if (!p) {
--		/* hey someone is probably piping to us ... */
--		return;
--	}
--
--	if ((*p != '+')
--		&& (argc < 2
--			|| (!isdigit(p[0])
--				&& ((p[0] != 'x') || !isxdigit(p[1])))))
--		return;
--
--	base = 0;
--	/*
--	 * skip over leading '+', 'x[0-9a-fA-f]' or '0x', and
--	 * set base.
--	 */
--	if (p[0] == '+')
--		++p;
--	if (p[0] == 'x' && isxdigit(p[1])) {
--		++p;
--		base = 16;
--	} else if (p[0] == '0' && p[1] == 'x') {
--		p += 2;
--		base = 16;
--	}
--
--	/* skip over the number */
--	if (base == 16)
--		for (num = p; isxdigit(*p); ++p)
--			continue;
--	else
--		for (num = p; isdigit(*p); ++p)
--			continue;
--
--	/* check for no number */
--	if (num == p)
--		return;
--
--	/* if terminates with a '.', base is decimal */
--	if (*p == '.') {
--		if (base)
--			return;
--		base = 10;
--	}
--
--	dumper->dump_skip = strtol(num, &end, base ? base : 8);
--
--	/* if end isn't the same as p, we got a non-octal digit */
--	if (end != p)
--		dumper->dump_skip = 0;
--	else {
--		if (*p) {
--			if (*p == 'b') {
--				dumper->dump_skip *= 512;
--				++p;
--			} else if (*p == 'B') {
--				dumper->dump_skip *= 1024;
--				++p;
--			}
--		}
--		if (*p)
--			dumper->dump_skip = 0;
--		else {
--			++*argvp;
--			/*
--			 * If the offset uses a non-octal base, the base of
--			 * the offset is changed as well.  This isn't pretty,
--			 * but it's easy.
--			 */
--#define TYPE_OFFSET 7
--			{
--				char x_or_d;
--				if (base == 16) {
--					x_or_d = 'x';
--					goto DO_X_OR_D;
--				}
--				if (base == 10) {
--					x_or_d = 'd';
-- DO_X_OR_D:
--					dumper->fshead->nextfu->fmt[TYPE_OFFSET]
--						= dumper->fshead->nextfs->nextfu->fmt[TYPE_OFFSET]
--						= x_or_d;
--				}
--			}
--		}
--	}
--}
--
--static const char *const add_strings[] = {
--	"16/1 \"%3_u \" \"\\n\"",              /* a */
--	"8/2 \" %06o \" \"\\n\"",              /* B, o */
--	"16/1 \"%03o \" \"\\n\"",              /* b */
--	"16/1 \"%3_c \" \"\\n\"",              /* c */
--	"8/2 \"  %05u \" \"\\n\"",             /* d */
--	"4/4 \"     %010u \" \"\\n\"",         /* D */
--	"2/8 \"          %21.14e \" \"\\n\"",  /* e (undocumented in od), F */
--	"4/4 \" %14.7e \" \"\\n\"",            /* f */
--	"4/4 \"       %08x \" \"\\n\"",        /* H, X */
--	"8/2 \"   %04x \" \"\\n\"",            /* h, x */
--	"4/4 \"    %11d \" \"\\n\"",           /* I, L, l */
--	"8/2 \" %6d \" \"\\n\"",               /* i */
--	"4/4 \"    %011o \" \"\\n\"",          /* O */
--};
--
--static const char od_opts[] ALIGN1 = "aBbcDdeFfHhIiLlOoXxv";
--
--static const char od_o2si[] ALIGN1 = {
--	0, 1, 2, 3, 5,
--	4, 6, 6, 7, 8,
--	9, 0xa, 0xb, 0xa, 0xa,
--	0xb, 1, 8, 9,
--};
--
--int od_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
--int od_main(int argc, char **argv)
--{
--	int ch;
--	int first = 1;
--	char *p;
--	dumper_t *dumper = alloc_dumper();
--
--	while ((ch = getopt(argc, argv, od_opts)) > 0) {
--		if (ch == 'v') {
--			dumper->dump_vflag = ALL;
--		} else if (((p = strchr(od_opts, ch)) != NULL) && (*p != '\0')) {
--			if (first) {
--				first = 0;
--				bb_dump_add(dumper, "\"%07.7_Ao\n\"");
--				bb_dump_add(dumper, "\"%07.7_ao  \"");
--			} else {
--				bb_dump_add(dumper, "\"         \"");
--			}
--			bb_dump_add(dumper, add_strings[(int)od_o2si[(p - od_opts)]]);
--		} else {  /* P, p, s, w, or other unhandled */
--			bb_show_usage();
--		}
--	}
--	if (!dumper->fshead) {
--		bb_dump_add(dumper, "\"%07.7_Ao\n\"");
--		bb_dump_add(dumper, "\"%07.7_ao  \" 8/2 \"%06o \" \"\\n\"");
--	}
--
--	argc -= optind;
--	argv += optind;
--
--	odoffset(dumper, argc, &argv);
--
--	return bb_dump_dump(dumper, argv);
--}
--#endif /* ENABLE_DESKTOP */
--
--/*-
-- * Copyright (c) 1990 The Regents of the University of California.
-- * All rights reserved.
-- *
-- * Redistribution and use in source and binary forms, with or without
-- * modification, are permitted provided that the following conditions
-- * are met:
-- * 1. Redistributions of source code must retain the above copyright
-- *    notice, this list of conditions and the following disclaimer.
-- * 2. Redistributions in binary form must reproduce the above copyright
-- *    notice, this list of conditions and the following disclaimer in the
-- *    documentation and/or other materials provided with the distribution.
-- * 3. Neither the name of the University nor the names of its contributors
-- *    may be used to endorse or promote products derived from this software
-- *    without specific prior written permission.
-- *
-- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
-- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
-- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-- * SUCH DAMAGE.
-- */

+ 0 - 65
package/busybox/patches/009-Replace-obsolete-stime-API-with-clock_settime.patch

@@ -1,65 +0,0 @@
-diff -Nur busybox-1.26.2.orig/coreutils/date.c busybox-1.26.2/coreutils/date.c
---- busybox-1.26.2.orig/coreutils/date.c	2016-12-10 18:46:36.000000000 +0100
-+++ busybox-1.26.2/coreutils/date.c	2020-02-04 09:55:25.126083910 +0100
-@@ -267,6 +267,9 @@
- 		time(&ts.tv_sec);
- #endif
- 	}
-+#if !ENABLE_FEATURE_DATE_NANO
-+	ts.tv_nsec = 0;
-+#endif
- 	localtime_r(&ts.tv_sec, &tm_time);
- 
- 	/* If date string is given, update tm_time, and maybe set date */
-@@ -289,11 +292,12 @@
- 		if (date_str[0] != '@')
- 			tm_time.tm_isdst = -1;
- 		ts.tv_sec = validate_tm_time(date_str, &tm_time);
-+		ts.tv_nsec = 0;
- 
- 		maybe_set_utc(opt);
- 
- 		/* if setting time, set it */
--		if ((opt & OPT_SET) && stime(&ts.tv_sec) < 0) {
-+		if ((opt & OPT_SET) && clock_settime(CLOCK_REALTIME, &ts) < 0) {
- 			bb_perror_msg("can't set date");
- 		}
- 	}
-diff -Nur busybox-1.26.2.orig/libbb/missing_syscalls.c busybox-1.26.2/libbb/missing_syscalls.c
---- busybox-1.26.2.orig/libbb/missing_syscalls.c	2016-09-27 18:53:50.000000000 +0200
-+++ busybox-1.26.2/libbb/missing_syscalls.c	2020-02-04 09:55:58.848244715 +0100
-@@ -16,14 +16,6 @@
- 	return syscall(__NR_getsid, pid);
- }
- 
--int stime(const time_t *t)
--{
--	struct timeval tv;
--	tv.tv_sec = *t;
--	tv.tv_usec = 0;
--	return settimeofday(&tv, NULL);
--}
--
- int sethostname(const char *name, size_t len)
- {
- 	return syscall(__NR_sethostname, name, len);
-diff -Nur busybox-1.26.2.orig/util-linux/rdate.c busybox-1.26.2/util-linux/rdate.c
---- busybox-1.26.2.orig/util-linux/rdate.c	2016-12-10 18:46:36.000000000 +0100
-+++ busybox-1.26.2/util-linux/rdate.c	2020-02-04 09:56:53.927774023 +0100
-@@ -79,9 +79,13 @@
- 		time(&current_time);
- 		if (current_time == remote_time)
- 			bb_error_msg("current time matches remote time");
--		else
--			if (stime(&remote_time) < 0)
--				bb_perror_msg_and_die("can't set time of day");
-+		else {
-+			struct timespec ts;
-+			ts.tv_sec = remote_time;
-+			ts.tv_nsec = 0;
-+			if (clock_settime(CLOCK_REALTIME, &ts) < 0)
-+ 				bb_perror_msg_and_die("can't set time of day");
-+		}
- 	}
- 
- 	if (flags != 1) /* not lone -s */