[package] base-files, uci: properly revert list state on config_load
authorJo-Philipp Wich <jow@openwrt.org>
Sat, 14 Aug 2010 00:45:15 +0000 (00:45 +0000)
committerJo-Philipp Wich <jow@openwrt.org>
Sat, 14 Aug 2010 00:45:15 +0000 (00:45 +0000)
This fixes a bug where lists end up with duplicate values if config_load was
invoked multiple times.

SVN-Revision: 22629

package/base-files/Makefile
package/base-files/files/etc/functions.sh
package/uci/Makefile
package/uci/files/lib/config/uci.sh

index 137eb62..0393260 100644 (file)
@@ -10,7 +10,7 @@ include $(TOPDIR)/rules.mk
 include $(INCLUDE_DIR)/kernel.mk
 
 PKG_NAME:=base-files
-PKG_RELEASE:=51
+PKG_RELEASE:=52
 
 PKG_FILE_DEPENDS:=$(PLATFORM_DIR)/ $(GENERIC_PLATFORM_DIR)/base-files/
 
index fa0ba04..d5ffc13 100755 (executable)
@@ -97,6 +97,7 @@ list() {
        local len
 
        config_get len "$CONFIG_SECTION" "${varname}_LENGTH" 0
+       [ $len = 0 ] && append CONFIG_LIST_STATE "${CONFIG_SECTION}_${varname}"
        len=$(($len + 1))
        config_set "$CONFIG_SECTION" "${varname}_ITEM$len" "$value"
        config_set "$CONFIG_SECTION" "${varname}_LENGTH" "$len"
index 925e42f..3c88dae 100644 (file)
@@ -8,7 +8,7 @@
 include $(TOPDIR)/rules.mk
 
 UCI_VERSION=12012009
-UCI_RELEASE=5
+UCI_RELEASE=6
 
 PKG_NAME:=uci
 PKG_VERSION:=$(UCI_VERSION)$(if $(UCI_RELEASE),.$(UCI_RELEASE))
index d759615..8dcb92b 100644 (file)
@@ -23,9 +23,15 @@ uci_load() {
        local PACKAGE="$1"
        local DATA
        local RET
+       local VAR
 
        _C=0
        if [ -z "$CONFIG_APPEND" ]; then
+               for VAR in $CONFIG_LIST_STATE; do
+                       export ${NO_EXPORT:+-n} CONFIG_${VAR}=
+                       export ${NO_EXPORT:+-n} CONFIG_${VAR}_LENGTH=
+               done
+               export ${NO_EXPORT:+-n} CONFIG_LIST_STATE=
                export ${NO_EXPORT:+-n} CONFIG_SECTIONS=
                export ${NO_EXPORT:+-n} CONFIG_NUM_SECTIONS=0
                export ${NO_EXPORT:+-n} CONFIG_SECTION=