add a variable to keep track of the list of sections when loading uci config files...
authorFelix Fietkau <nbd@openwrt.org>
Wed, 20 Dec 2006 04:15:13 +0000 (04:15 +0000)
committerFelix Fietkau <nbd@openwrt.org>
Wed, 20 Dec 2006 04:15:13 +0000 (04:15 +0000)
SVN-Revision: 5870

package/base-files/files/etc/functions.sh

index 0f3618e7fdbf1409162483b424da287a3e7a7dee..cc7b70e51100ea8858b2d35b5ef7ca0cf7598d7a 100755 (executable)
@@ -31,9 +31,10 @@ reset_cb
 config () {
        local cfgtype="$1"
        local name="$2"
-    
-       _C=$((_C + 1))
-       name="${name:-cfg${_C}}"
+       
+       CONFIG_NUM_SECTIONS=$(($CONFIG_NUM_SECTIONS + 1))
+       name="${name:-cfg$CONFIG_NUM_SECTIONS}"
+       append CONFIG_SECTIONS "$name"
        config_cb "$cfgtype" "$name"
        CONFIG_SECTION="$name"
        export -n "CONFIG_${CONFIG_SECTION}_TYPE=$cfgtype"
@@ -60,6 +61,7 @@ config_rename() {
                eval "export -n \"$newvar=\${$oldvar}\""
                unset "$oldvar"
        done
+       CONFIG_SECTIONS="$(echo " $CONFIG_SECTIONS " | sed -e "s, $OLD , $NEW ,")"
        
        [ "$CONFIG_SECTION" = "$OLD" ] && CONFIG_SECTION="$NEW"
 }
@@ -72,7 +74,10 @@ config_clear() {
        local SECTION="$1"
        local oldvar
        
-       for oldvar in `set | grep ^CONFIG_${SECTION}_ | \
+       CONFIG_SECTIONS="$(echo " $CONFIG_SECTIONS " | sed -e "s, $OLD , ,")"
+       CONFIG_SECTIONS="${SECTION:+$CONFIG_SECTIONS}"
+
+       for oldvar in `set | grep ^CONFIG_${SECTION:+$SECTION_} | \
                sed -e 's/\(.*\)=.*$/\1/'` ; do 
                unset $oldvar 
        done
@@ -81,6 +86,8 @@ config_clear() {
 config_load() {
        local file="/etc/config/$1"
        _C=0
+       CONFIG_SECTIONS=
+       CONFIG_NUM_SECTIONS=0
        CONFIG_SECTION=
        
        [ -e "$file" ] && {
@@ -104,6 +111,16 @@ config_set() {
        export -n "CONFIG_${section}_${option}=$value"
 }
 
+config_foreach() {
+       local function="$1"
+       local section
+       
+       [ -z "$CONFIG_SECTIONS" ] && return 0
+       for section in ${CONFIG_SECTIONS}; do
+               eval "$function \"\$section\""
+       done
+}
+
 load_modules() {
        cd /etc/modules.d
        sed 's/^[^#]/insmod &/' $* | ash 2>&- || :