allow config_* and uci_* functions to work on files outside of /etc/config - these...
authorFelix Fietkau <nbd@openwrt.org>
Fri, 15 Jun 2007 15:12:57 +0000 (15:12 +0000)
committerFelix Fietkau <nbd@openwrt.org>
Fri, 15 Jun 2007 15:12:57 +0000 (15:12 +0000)
SVN-Revision: 7636

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

index f757ffaf269ded0aa88987408f853615d737c18c..7ba59afbbe24121673d2156791f3122c02798632 100755 (executable)
@@ -85,7 +85,11 @@ config_clear() {
 }
 
 config_load() {
-       local file="$UCI_ROOT/etc/config/$1"
+       local file
+       case "$1" in
+               /*) file="$1";;
+               *) file="$UCI_ROOT/etc/config/$1";;
+       esac
        _C=0
        export ${NO_EXPORT:+-n} CONFIG_SECTIONS=
        export ${NO_EXPORT:+-n} CONFIG_NUM_SECTIONS=0
index e0293363b3a6e7abef55850b3fb4e00a3597b83d..e0cd1763c347d9efcfbe69a50621d85a7a95a122 100644 (file)
@@ -62,10 +62,18 @@ uci_add_update() {
        local PACKAGE="$1"
        local UPDATE="$2"
        local PACKAGE_BASE="$(basename "$PACKAGE")"
-       
+       local UCIFILE
+
+       case "$PACKAGE" in
+               /*) UCIFILE="$PACKAGE";;
+               *)
+                       UCIDIR="/tmp/.uci/$PACKAGE_BASE"
+                       mkdir -p "/tmp/.uci"
+               ;;
+       esac
+
        # FIXME: add locking?
-       mkdir -p "/tmp/.uci"
-       echo "$UPDATE" >> "/tmp/.uci/${PACKAGE_BASE}"
+       echo "$UPDATE" >> "$UCIFILE"
 }
 
 uci_set() {
@@ -74,14 +82,21 @@ uci_set() {
        local OPTION="$3"
        local VALUE="$4"
 
-       ( # spawn a subshell so you don't mess up the current environment
-               uci_load "$PACKAGE"
-               config_get OLDVAL "$CONFIG" "$OPTION"
-               if [ "$OLDVAL" != "$VALUE" ]; then
-                       config_get type "$CONFIG" TYPE
-                       [ -z "$type" ]
-               fi
-       ) || uci_add_update "$PACKAGE" "config_set '$CONFIG' '$OPTION' '$VALUE'"
+       case "$PACKAGE" in
+               /*)
+                       uci_add_update "$PACKAGE" "config_set '$CONFIG' '$OPTION' '$VALUE'"
+               ;;
+               *)
+                       ( # spawn a subshell so you don't mess up the current environment
+                               uci_load "$PACKAGE"
+                               config_get OLDVAL "$CONFIG" "$OPTION"
+                               if [ "$OLDVAL" != "$VALUE" ]; then
+                                       config_get type "$CONFIG" TYPE
+                                       [ -z "$type" ]
+                               fi
+                       ) || uci_add_update "$PACKAGE" "config_set '$CONFIG' '$OPTION' '$VALUE'"
+               ;;
+       esac
 }
 
 uci_add() {
@@ -116,6 +131,9 @@ uci_commit() {
        local PACKAGE="$1"
        local PACKAGE_BASE="$(basename "$PACKAGE")"
 
+       case "$PACKAGE" in
+               /*) return 0;;
+       esac
        mkdir -p /tmp/.uci
        LOCK=`which lock` || LOCK=:
        $LOCK "/tmp/.uci/$PACKAGE_BASE.lock"