Turn off stp by default, thanks ejka
[openwrt.git] / package / base-files / files / lib / config / uci.sh
index 43bb981..71f2048 100644 (file)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 
 uci_load() {
-       local PACKAGE="$1"
-       config_load "$PACKAGE"
-       local PACKAGE_BASE="$(basename "$PACKAGE")"
-       [ -f "/tmp/.uci/${PACKAGE_BASE}" ] && {
-               . "/tmp/.uci/${PACKAGE_BASE}" 2>/dev/null >/dev/null
-               config_cb
-       }
+       config_load "$1"
+}
+
+uci_apply_defaults() {(
+       cd /etc/uci-defaults || return 0
+       files="$(ls)"
+       [ -z "$files" ] && return 0
+       mkdir -p /tmp/.uci
+       for file in $files; do
+               ( . "./$(basename $file)" ) && rm -f "$file"
+       done
+       uci commit
+)}
+
+uci_call_awk() {
+       local CMD="$*"
+       awk -f $UCI_ROOT/lib/config/uci.awk -f - <<EOF
+BEGIN {
+       $CMD
+}
+EOF
 }
 
 uci_do_update() {
        local FILENAME="$1"
        local UPDATE="$2"
-       awk -f $UCI_ROOT/lib/config/uci-update.awk -f - <<EOF
-BEGIN {
-       config = read_file("$FILENAME")
+       uci_call_awk "
+       config = read_file(\"$FILENAME\")
        $UPDATE
        print config
-}
-EOF
+"
 }
 
 uci_add_update() {
        local PACKAGE="$1"
        local UPDATE="$2"
        local PACKAGE_BASE="$(basename "$PACKAGE")"
-       
+       local UCIFILE
+
+       case "$PACKAGE" in
+               /*) UCIFILE="$PACKAGE";;
+               *)
+                       UCIFILE="/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() {
@@ -56,11 +76,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 type "$CONFIG" TYPE
-               [ -z "$type" ]
-       ) || uci_add_update "$PACKAGE" "CONFIG_SECTION='$CONFIG'${N}option '$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 [ "x$OLDVAL" != "x$VALUE" ]; then
+                                       config_get type "$CONFIG" TYPE
+                                       [ -z "$type" ]
+                               fi
+                       ) || uci_add_update "$PACKAGE" "config_set '$CONFIG' '$OPTION' '$VALUE'"
+               ;;
+       esac
 }
 
 uci_add() {
@@ -95,6 +125,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"
@@ -103,19 +136,19 @@ uci_commit() {
                
                # replace handlers
                config() {
-                       append updatestr "config = update_config(config, \"@$2=$1\")" "$N"
+                       append updatestr "config = uci_update_config(config, \"@$2=$1\")" "$N"
                }
                option() {
-                       append updatestr "config = update_config(config, \"$CONFIG_SECTION.$1=$2\")" "$N"
+                       append updatestr "config = uci_update_config(config, \"$CONFIG_SECTION.$1=$2\")" "$N"
                }
                config_rename() {
-                       append updatestr "config = update_config(config, \"&$1=$2\")" "$N"
+                       append updatestr "config = uci_update_config(config, \"&$1=$2\")" "$N"
                }
                config_unset() {
-                       append updatestr "config = update_config(config, \"-$1.$2\")" "$N"
+                       append updatestr "config = uci_update_config(config, \"-$1.$2\")" "$N"
                }
                config_clear() {
-                       append updatestr "config = update_config(config, \"-$1\")" "$N"
+                       append updatestr "config = uci_update_config(config, \"-$1\")" "$N"
                }
                
                . "/tmp/.uci/$PACKAGE_BASE"
This page took 0.029017 seconds and 4 git commands to generate.