From 65d6e285f1998cd7c5431ecbbd46c64464a82062 Mon Sep 17 00:00:00 2001
From: Jo-Philipp Wich <jow@openwrt.org>
Date: Sat, 14 Aug 2010 00:45:15 +0000
Subject: [package] base-files, uci: properly revert list state on config_load
 This fixes a bug where lists end up with duplicate values if config_load was
 invoked multiple times.

git-svn-id: svn://svn.openwrt.org/openwrt/trunk@22629 3c298f89-4303-0410-b956-a3cf2f4a3e73
---
 package/base-files/Makefile               | 2 +-
 package/base-files/files/etc/functions.sh | 1 +
 package/uci/Makefile                      | 2 +-
 package/uci/files/lib/config/uci.sh       | 6 ++++++
 4 files changed, 9 insertions(+), 2 deletions(-)

(limited to 'package')

diff --git a/package/base-files/Makefile b/package/base-files/Makefile
index 137eb62a2f..039326069b 100644
--- a/package/base-files/Makefile
+++ b/package/base-files/Makefile
@@ -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/
 
diff --git a/package/base-files/files/etc/functions.sh b/package/base-files/files/etc/functions.sh
index fa0ba0427b..d5ffc13535 100755
--- a/package/base-files/files/etc/functions.sh
+++ b/package/base-files/files/etc/functions.sh
@@ -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"
diff --git a/package/uci/Makefile b/package/uci/Makefile
index 925e42fd08..3c88dae37e 100644
--- a/package/uci/Makefile
+++ b/package/uci/Makefile
@@ -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))
diff --git a/package/uci/files/lib/config/uci.sh b/package/uci/files/lib/config/uci.sh
index d759615bd5..8dcb92b9f8 100644
--- a/package/uci/files/lib/config/uci.sh
+++ b/package/uci/files/lib/config/uci.sh
@@ -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=
-- 
cgit v1.2.3