X-Git-Url: https://git.rohieb.name/openwrt.git/blobdiff_plain/05adaa9794e41d02870a74a1ed7ba58cc59b9286..07790ddaf99fbccbf417ca931d74cee1241030ce:/package/base-files/files/lib/config/uci.sh?ds=inline diff --git a/package/base-files/files/lib/config/uci.sh b/package/base-files/files/lib/config/uci.sh old mode 100755 new mode 100644 index 957c1bb7c..a53938835 --- a/package/base-files/files/lib/config/uci.sh +++ b/package/base-files/files/lib/config/uci.sh @@ -1,8 +1,8 @@ #!/bin/sh # Shell script defining macros for manipulating config files # -# Copyright (C) 2006 by Fokus Fraunhofer -# Copyright (C) 2006 by Felix Fietkau +# Copyright (C) 2006 Fokus Fraunhofer +# Copyright (C) 2006,2007 Felix Fietkau # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -23,31 +23,57 @@ uci_load() { config_load "$PACKAGE" local PACKAGE_BASE="$(basename "$PACKAGE")" [ -f "/tmp/.uci/${PACKAGE_BASE}" ] && { - . "/tmp/.uci/${PACKAGE_BASE}" + . "/tmp/.uci/${PACKAGE_BASE}" 2>/dev/null >/dev/null config_cb } } +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 - <> "/tmp/.uci/${PACKAGE_BASE}" + echo "$UPDATE" >> "$UCIFILE" } uci_set() { @@ -56,11 +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 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() { @@ -94,27 +130,31 @@ uci_remove() { uci_commit() { local PACKAGE="$1" local PACKAGE_BASE="$(basename "$PACKAGE")" - + + case "$PACKAGE" in + /*) return 0;; + esac mkdir -p /tmp/.uci - lock "/tmp/.uci/$PACKAGE_BASE.lock" + LOCK=`which lock` || LOCK=: + $LOCK "/tmp/.uci/$PACKAGE_BASE.lock" [ -f "/tmp/.uci/$PACKAGE_BASE" ] && ( updatestr="" # 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" @@ -127,13 +167,14 @@ uci_commit() { return 0 } - config_load "$PACKAGE" || CONFIG_FILENAME="$ROOT/etc/config/$PACKAGE_BASE" + config_load "$PACKAGE" + CONFIG_FILENAME="${CONFIG_FILENAME:-$UCI_ROOT/etc/config/$PACKAGE_BASE}" uci_do_update "$CONFIG_FILENAME" "$updatestr" > "/tmp/.uci/$PACKAGE_BASE.new" && { mv -f "/tmp/.uci/$PACKAGE_BASE.new" "$CONFIG_FILENAME" && \ rm -f "/tmp/.uci/$PACKAGE_BASE" } ) - lock -u "/tmp/.uci/$PACKAGE_BASE.lock" + $LOCK -u "/tmp/.uci/$PACKAGE_BASE.lock" }