diff options
author | Felix Fietkau <nbd@openwrt.org> | 2007-06-15 15:12:57 +0000 |
---|---|---|
committer | Felix Fietkau <nbd@openwrt.org> | 2007-06-15 15:12:57 +0000 |
commit | 796e53414f6791acee33bc54746e38f26b7eb1d2 (patch) | |
tree | 84f7700656db2f0c0a56d08eefb416c22ecc9d56 /package | |
parent | 95549a64fd71c70a699415e04d92391c2ee5c3ae (diff) | |
download | upstream-796e53414f6791acee33bc54746e38f26b7eb1d2.tar.gz upstream-796e53414f6791acee33bc54746e38f26b7eb1d2.tar.bz2 upstream-796e53414f6791acee33bc54746e38f26b7eb1d2.zip |
allow config_* and uci_* functions to work on files outside of /etc/config - these files are assumed to use commands generated by uci_* only (as overlay to regular config files)
SVN-Revision: 7636
Diffstat (limited to 'package')
-rwxr-xr-x | package/base-files/files/etc/functions.sh | 6 | ||||
-rw-r--r-- | package/base-files/files/lib/config/uci.sh | 40 |
2 files changed, 34 insertions, 12 deletions
diff --git a/package/base-files/files/etc/functions.sh b/package/base-files/files/etc/functions.sh index f757ffaf26..7ba59afbbe 100755 --- a/package/base-files/files/etc/functions.sh +++ b/package/base-files/files/etc/functions.sh @@ -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 diff --git a/package/base-files/files/lib/config/uci.sh b/package/base-files/files/lib/config/uci.sh index e0293363b3..e0cd1763c3 100644 --- a/package/base-files/files/lib/config/uci.sh +++ b/package/base-files/files/lib/config/uci.sh @@ -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" |