[U-Boot] [PATCH v2 0/11] Add Regular Expressions Support

Wolfgang Denk
2013-03-24T09:50:27Z

The following patch series adds the SLRE "Super Light Regular
Expression" library and uses this to add regex support for
the "env grep" (aka "grepenv") command, and new functions (or
operators?) "gsub" and "sub" to the "setexpr" command.

The rework to "env grep" also fixed a few bugs (which caused it to
dump always _all_ environment variables on some systems), and adds
the capability to grep in either the variable name, or the value, or
in both (the old version always did the latter). Instead of special
functions we now use common code (i. e. hexport_r()) for the variable
look-up, which gives us sorted output as a free additional benefit.

This allows to do things like

- print all MAC addresses:

=> env grep -e eth.*addr
eth1addr=00:10:ec:80:c5:15
ethaddr=00:10:ec:00:c5:15

- print all variables that have at least 2 colons in their value:

=> env grep -v -e :.*:
addip=setenv bootargs ${bootargs} ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}:${netdev}:off panic=1
eth1addr=00:10:ec:80:c5:15
ethaddr=00:10:ec:00:c5:15
ver=U-Boot 2013.04-rc1-00289-g497746b-dirty (Mar 22 2013 - 12:50:25)

- Generate broadcast address by substituting the last two numbers of
the IP address by "255.255":

=> print ipaddr
ipaddr=192.168.1.104
=> setexpr broadcast sub "(.*\\.).*\\..*" "\\1255.255" $ipaddr
broadcast=192.168.255.255

- Depending on keyboard configuration (German vs. US keyboard) a
bar code scanner may initialize the MAC address as C0:E5:4E:02:06:DC
or as C0>E5>4E>02>06>DC. Make sure we always have a correct value:

=> print ethaddr
ethaddr=C0>E5>4E>02>06>DC
=> setexpr ethaddr gsub > :
ethaddr=C0:E5:4E:02:06:DC

etc.

Regex support can be enabled by defining CONFIG_REGEX in the board
config file.

Notes:

- This patch series has been compile-tested (and found to be clean
with ELDK v5.3) on all of the following boards:

ARM: m28evk

PPC4xx: acadia bamboo bluestone bubinga canyonlands dlvision-10g
dlvision ebony gdppc440etx icon intip io io64 iocon katmai kilauea
luan makalu neo ocotea redwood sequoia t3corp taihu taishan walnut
yosemite yucca

- Runtime / functional testing has been done mostly on PPC (Sequoia
board).

Changes in v2:
- fixed trailing whitespace errors
- Note 1: The "line over 80 characters" warning will NOT be fixed due
to the "never break user-visible strings" rule.
- Note 2: The "Alignment should match open parenthesis" check will NOT
be fixed due to the "indent by TABs only" rule.
- Fix ERROR: "foo * bar" should be "foo *bar" errors
- Fix trailing whitespace error
- Note: the "Alignment should match open parenthesis" check will not
be fixed due to the "indent always byy TABs" rule.
- no changes; most of this is imported code and is intentionally left
as is
- the "Alignment should match open parenthesis" check is left due to
the "indent only by TABs" rule
- the "line over 80 characters" warning is left due to the "never
break user-visible strings" rule
- Fix trailing whitespace error
- fix "No space is necessary after a cast" checks
- fix "space prohibited before semicolon" and "space required after
that ';'" errors (but I onsider the result less readable :-( )
- Note: the remaining warnings ("line over 80 characters") and checks
("Alignment should match open parenthesis") are intentionally left
as is.
- Do the white space cleanup globally, and as separate patch

Wolfgang Denk (11):
hashtable: preparations to use hexport_r() for "env grep"
"env grep" - reimplement command using hexport_r()
"env grep" - add options to grep in name, value, or both.
Add SLRE - Super Light Regular Expression library
"env grep" - add support for regular expression matches
setexpr: simplify code, improve help message
setexpr: add regex substring matching and substitution
m28evk: white space cleanup
m28evk: enable "env grep" and regexp support
amcc-common.h: minor white space cleanup
amcc-common.h: enable support for "env grep", "setexpr", and regex.

README | 7 +
common/cmd_nvedit.c | 87 +++--
common/cmd_setexpr.c | 296 ++++++++++++++++-
include/configs/amcc-common.h | 9 +-
include/configs/m28evk.h | 259 +++++++--------
include/search.h | 15 +-
include/slre.h | 100 ++++++
lib/Makefile | 1 +
lib/hashtable.c | 93 ++++--
lib/slre.c | 724 ++++++++++++++++++++++++++++++++++++++++++
10 files changed, 1391 insertions(+), 200 deletions(-)
create mode 100644 include/slre.h
create mode 100644 lib/slre.c

--
1.8.1.4