
When a variable with a registered callback is inserted, deleted, or overwritten the callback is called and gives the system an opportunity to do something in response to the change. It also has the opportunuty to reject the change by returning non-zero.
The flags on variables can control their type as well as their allowed access.
The format of the list is: type_attribute = [s|d|x|b|i|m] attributes = type_attribute entry = variable_name[:attributes] list = entry[,list]
The type attributes are: s - String (default) d - Decimal x - Hexadecimal b - Boolean ([1yYtT|0nNfF]) i - IP address m - MAC address
The access attributes are: a - Any (default) r - Read-only o - Write-once c - Change-default
Changes in v3: - Rebase onto Gerlando Falauto's env patches - Refactor himport_r() and hsearch_r()'s parameters - Split hdelete_r() into the core delete and the validation before delete - Delete vars on failed insertion - Use Marek's linker lists instead of implementing it directly - Rebase onto latest master - Add flags parameter to callbacks - Implement reverse search in env_attr_lookup() - Fix space skipping in env_attr_lookup() - All errors coming back from hsearch_r() are no longer fatal. Don't abort import on failed ENTER action. - Removed checkpatch.pl warning
Changes in v2: - Added much-needed documentation - Factored out prevch and nextch in env_attr_lookup()
Joe Hershberger (18): Make linux kernel string funcs available to tools env: Refactor do_apply to a flag env: Consolidate common code in hsearch_r() env: Refactor apply into change_ok env: Use getenv_yesno() more generally env: Hide '.' variables in env print by default env: Add support for callbacks to environment vars env: Add a command to view callbacks env: Add a bootfile env handler env: Add a baudrate env handler env: Add a loadaddr env handler env: Add a console env handler env: Add a silent env handler env: Add environment variable flags tools/env: Add environment variable flags support env: Add a command to display details about env flags env: Add support for access control to .flags env: Handle write-once ethaddr and serial# generically
README | 80 ++++++ arch/arm/lib/board.c | 4 +- arch/m68k/lib/board.c | 3 +- arch/microblaze/lib/board.c | 4 +- arch/powerpc/cpu/mpc85xx/mp.c | 4 +- arch/powerpc/lib/board.c | 9 +- arch/sparc/lib/board.c | 3 +- board/Marvell/db64360/db64360.c | 10 +- board/Marvell/db64460/db64460.c | 10 +- board/esd/cpci750/cpci750.c | 10 +- board/esd/pmc440/cmd_pmc440.c | 2 +- board/gw8260/gw8260.c | 10 +- board/prodrive/p3mx/p3mx.c | 10 +- common/Makefile | 6 + common/cmd_nvedit.c | 337 ++++++++++++------------ common/console.c | 67 +++++ common/env_attr.c | 229 +++++++++++++++++ common/env_callback.c | 132 ++++++++++ common/env_common.c | 60 +++-- common/env_dataflash.c | 2 +- common/env_eeprom.c | 2 +- common/env_fat.c | 2 +- common/env_flags.c | 549 ++++++++++++++++++++++++++++++++++++++++ common/env_flash.c | 4 +- common/env_mmc.c | 2 +- common/env_nand.c | 4 +- common/env_nvram.c | 2 +- common/env_onenand.c | 2 +- common/env_sf.c | 4 +- common/image.c | 21 +- doc/README.silent | 14 +- drivers/serial/serial.c | 70 +++++ include/common.h | 5 + include/env_attr.h | 55 ++++ include/env_callback.h | 75 ++++++ include/env_default.h | 8 + include/env_flags.h | 172 +++++++++++++ include/environment.h | 15 +- include/image.h | 1 - include/linux/linux_string.h | 8 + include/linux/string.h | 5 +- include/search.h | 37 ++- lib/Makefile | 1 + lib/hashtable.c | 244 ++++++++++++------ lib/linux_string.c | 51 ++++ lib/string.c | 39 --- net/net.c | 49 ++-- tools/env/Makefile | 3 + tools/env/fw_env.c | 92 +++++-- 49 files changed, 2093 insertions(+), 435 deletions(-) create mode 100644 common/env_attr.c create mode 100644 common/env_callback.c create mode 100644 common/env_flags.c create mode 100644 include/env_attr.h create mode 100644 include/env_callback.h create mode 100644 include/env_flags.h create mode 100644 include/linux/linux_string.h create mode 100644 lib/linux_string.c