
From: Roland Gaudig roland.gaudig@weidmueller.com
In contrast to version 2, the "fmt" operator has been made more flexible like its Bash counterpart, as some comments to version 2 requested. For license compatibility reasons the code for parsing the format string has been taken from the BusyBox project and not from Bash.
The _maxags limit for setexpr has been increased to 8, which allows up to 4 remaining arguments for the format string.
This patch adds C like format string capabilities to the setexpr command. Here are some examples:
=> setexpr foo fmt %d 0x100 => echo $foo 256 =>
=> setexpr foo fmt 0x%08x 0x63 => echo $foo 0x00000063 =>
=> setexpr foo fmt %%%o 8 => echo $foo %10 =>
=> setexpr foo fmt "0x%08x-%s-%d-%s" $a $b $c $d => echo $foo 0x00000eff-hello-99-world =>
Format string handling can be turned on by enabling the CONFIG_CMD_SETEXPR_FMT option. Enabling that option will increase code size by 2480 bytes on ARM target and 1648 bytes on ARM Thumb2 target. Handling of float already has been removed. A further reduction is possible by disabling the escape character handling.
Changes in v3: - enable Bash like format string support for the setexpr fmt operator - import format string parsing routines from Busybox project
Changes in v2: - replace the setexpr dec operator by fmt for simple format strings
(no changes since v1)
Roland Gaudig (6): lib: strto: add simple_strtoll function cmd: printf: import busybox-1.33.1 printf.c cmd: printf: add helper functions from busybox cmd: setexpr: add format string handling doc: usage: add description for setexpr command test: cmd: setexpr: add format string tests
MAINTAINERS | 6 + cmd/Kconfig | 8 + cmd/Makefile | 1 + cmd/printf.c | 647 ++++++++++++++++++++++++++++++++++++++++++ cmd/printf.h | 8 + cmd/setexpr.c | 37 ++- doc/usage/index.rst | 1 + doc/usage/setexpr.rst | 148 ++++++++++ include/vsprintf.h | 1 + lib/strto.c | 8 + test/cmd/setexpr.c | 84 ++++++ 11 files changed, 945 insertions(+), 4 deletions(-) create mode 100644 cmd/printf.c create mode 100644 cmd/printf.h create mode 100644 doc/usage/setexpr.rst