rename uci-update.awk to uci.awk and add a few config_* functions

git-svn-id: svn://svn.openwrt.org/openwrt/trunk@6666 3c298f89-4303-0410-b956-a3cf2f4a3e73
master
Felix Fietkau 2007-03-24 13:43:04 +00:00
parent 4c7b45255b
commit d8e5772f33
3 changed files with 58 additions and 21 deletions

View File

@ -120,7 +120,11 @@ config_set() {
local section="$1"
local option="$2"
local value="$3"
export ${NO_EXPORT:+-n} "CONFIG_${section}_${option}=$value"
local old_section="$CONFIG_SECTION"
CONFIG_SECTION="$section"
option "$option" "$value"
CONFIG_SECTION="$old_section"
}
config_foreach() {

View File

@ -1,4 +1,4 @@
# Configuration update functions
# Configuration update functions - AWK API
#
# Copyright (C) 2006 by Fokus Fraunhofer <carsten.tittel@fokus.fraunhofer.de>
# Copyright (C) 2006 by Felix Fietkau <nbd@openwrt.org>
@ -17,6 +17,32 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
# parameters: 1
function config_load(package, var) {
while (("/bin/ash -c '. /etc/functions.sh; unset NO_EXPORT; config_load \""package"\"; env | grep \"^CONFIG_\"'" | getline) == 1) {
sub("^CONFIG_", "")
if (match($0, "=") == 0) {
if (var != "") CONFIG[var] = CONFIG[var] "\n" $0
next
}
var=substr($0, 1, RSTART-1)
CONFIG[var] = substr($0, RSTART+1, length($0) - RSTART)
}
}
# parameters: 2
function config_get(package, option) {
return CONFIG[package "_" option]
}
# parameters: 3
function config_get_bool(package, option, default, var) {
var = config_get(package, option);
if ((var == "enabled") || (var == "1") || (var == "on")) return 1
if ((var == "disabled") || (var == "0") || (var == "off")) return 1
return (var && var != "0" ? 1 : 0)
}
function read_file(filename, result) {
while ((getline <filename) == 1) {
@ -26,7 +52,7 @@ function read_file(filename, result) {
return result
}
function cmd2option(str, tmp) {
function uci_cmd2option(str, tmp) {
if (match(str,"=")!=0) {
res = "\toption " substr(str,1,RSTART-1) "\t'" substr(str,RSTART+1) "'"
} else {
@ -35,11 +61,11 @@ function cmd2option(str, tmp) {
return res
}
function cmd2config(atype, aname) {
function uci_cmd2config(atype, aname) {
return "config \"" atype "\" \"" aname "\""
}
function update_config(cfg, update, \
function uci_update_config(cfg, update, \
lines, line, l, n, i, i2, section, scnt, remove, tmp, aidx, rest) {
scnt = 1
linecnt=split(cfg "\n", lines, "\n")
@ -87,7 +113,7 @@ function update_config(cfg, update, \
if (line ~ /^[ \t]*$/) {
if (update ~ "^" section "\\.") {
gsub("^" section ".", "", update)
cfg = cfg cmd2option(update) "\n"
cfg = cfg uci_cmd2option(update) "\n"
gsub(/=.*$/, "", update)
update = "-" section "." update
}
@ -101,7 +127,7 @@ function update_config(cfg, update, \
if (update ~ "^" section "\\.") {
flag=1
gsub("^" section ".", "", update)
cfg = cfg cmd2option(update) "\n"
cfg = cfg uci_cmd2option(update) "\n"
update = "-" section "." update
}
@ -121,7 +147,7 @@ function update_config(cfg, update, \
update = ""
} else if (update ~ "^&" section "=") {
gsub("^&" section "=", "", update)
line = cmd2config(l[2],update)
line = uci_cmd2config(l[2],update)
update = ""
}
}
@ -131,7 +157,7 @@ function update_config(cfg, update, \
# if a supplied config value already exists, replace the whole line
if (match(update, "^" section "." l[2] "=")) {
gsub("^" section ".", "", update)
line = cmd2option(update)
line = uci_cmd2option(update)
update = ""
}
}
@ -142,7 +168,7 @@ function update_config(cfg, update, \
if (section != "") {
if (update ~ "^" section "\\.") {
gsub("^" section ".", "", update)
cfg = cfg cmd2option(update) "\n"
cfg = cfg uci_cmd2option(update) "\n"
update = "-" section "." update
}

View File

@ -39,16 +39,23 @@ uci_apply_defaults() {(
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() {
@ -71,7 +78,7 @@ uci_set() {
uci_load "$PACKAGE"
config_get type "$CONFIG" TYPE
[ -z "$type" ]
) || uci_add_update "$PACKAGE" "CONFIG_SECTION='$CONFIG'${N}option '$OPTION' '$VALUE'"
) || uci_add_update "$PACKAGE" "config_set '$CONFIG' '$OPTION' '$VALUE'"
}
uci_add() {
@ -114,19 +121,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"