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

SVN-Revision: 6666
This commit is contained in:
Felix Fietkau 2007-03-24 13:43:04 +00:00
parent c76cdd5781
commit 7f0dd3fa45
3 changed files with 58 additions and 21 deletions

View file

@ -120,7 +120,11 @@ config_set() {
local section="$1" local section="$1"
local option="$2" local option="$2"
local value="$3" 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() { 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 Fokus Fraunhofer <carsten.tittel@fokus.fraunhofer.de>
# Copyright (C) 2006 by Felix Fietkau <nbd@openwrt.org> # Copyright (C) 2006 by Felix Fietkau <nbd@openwrt.org>
@ -17,6 +17,32 @@
# along with this program; if not, write to the Free Software # along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # 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) { function read_file(filename, result) {
while ((getline <filename) == 1) { while ((getline <filename) == 1) {
@ -26,7 +52,7 @@ function read_file(filename, result) {
return result return result
} }
function cmd2option(str, tmp) { function uci_cmd2option(str, tmp) {
if (match(str,"=")!=0) { if (match(str,"=")!=0) {
res = "\toption " substr(str,1,RSTART-1) "\t'" substr(str,RSTART+1) "'" res = "\toption " substr(str,1,RSTART-1) "\t'" substr(str,RSTART+1) "'"
} else { } else {
@ -35,11 +61,11 @@ function cmd2option(str, tmp) {
return res return res
} }
function cmd2config(atype, aname) { function uci_cmd2config(atype, aname) {
return "config \"" 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) { lines, line, l, n, i, i2, section, scnt, remove, tmp, aidx, rest) {
scnt = 1 scnt = 1
linecnt=split(cfg "\n", lines, "\n") linecnt=split(cfg "\n", lines, "\n")
@ -87,7 +113,7 @@ function update_config(cfg, update, \
if (line ~ /^[ \t]*$/) { if (line ~ /^[ \t]*$/) {
if (update ~ "^" section "\\.") { if (update ~ "^" section "\\.") {
gsub("^" section ".", "", update) gsub("^" section ".", "", update)
cfg = cfg cmd2option(update) "\n" cfg = cfg uci_cmd2option(update) "\n"
gsub(/=.*$/, "", update) gsub(/=.*$/, "", update)
update = "-" section "." update update = "-" section "." update
} }
@ -101,7 +127,7 @@ function update_config(cfg, update, \
if (update ~ "^" section "\\.") { if (update ~ "^" section "\\.") {
flag=1 flag=1
gsub("^" section ".", "", update) gsub("^" section ".", "", update)
cfg = cfg cmd2option(update) "\n" cfg = cfg uci_cmd2option(update) "\n"
update = "-" section "." update update = "-" section "." update
} }
@ -121,7 +147,7 @@ function update_config(cfg, update, \
update = "" update = ""
} else if (update ~ "^&" section "=") { } else if (update ~ "^&" section "=") {
gsub("^&" section "=", "", update) gsub("^&" section "=", "", update)
line = cmd2config(l[2],update) line = uci_cmd2config(l[2],update)
update = "" update = ""
} }
} }
@ -131,7 +157,7 @@ function update_config(cfg, update, \
# if a supplied config value already exists, replace the whole line # if a supplied config value already exists, replace the whole line
if (match(update, "^" section "." l[2] "=")) { if (match(update, "^" section "." l[2] "=")) {
gsub("^" section ".", "", update) gsub("^" section ".", "", update)
line = cmd2option(update) line = uci_cmd2option(update)
update = "" update = ""
} }
} }
@ -142,7 +168,7 @@ function update_config(cfg, update, \
if (section != "") { if (section != "") {
if (update ~ "^" section "\\.") { if (update ~ "^" section "\\.") {
gsub("^" section ".", "", update) gsub("^" section ".", "", update)
cfg = cfg cmd2option(update) "\n" cfg = cfg uci_cmd2option(update) "\n"
update = "-" section "." update update = "-" section "." update
} }

View file

@ -39,16 +39,23 @@ uci_apply_defaults() {(
uci commit uci commit
)} )}
uci_call_awk() {
local CMD="$*"
awk -f $UCI_ROOT/lib/config/uci.awk -f - <<EOF
BEGIN {
$CMD
}
EOF
}
uci_do_update() { uci_do_update() {
local FILENAME="$1" local FILENAME="$1"
local UPDATE="$2" local UPDATE="$2"
awk -f $UCI_ROOT/lib/config/uci-update.awk -f - <<EOF uci_call_awk "
BEGIN { config = read_file(\"$FILENAME\")
config = read_file("$FILENAME")
$UPDATE $UPDATE
print config print config
} "
EOF
} }
uci_add_update() { uci_add_update() {
@ -71,7 +78,7 @@ uci_set() {
uci_load "$PACKAGE" uci_load "$PACKAGE"
config_get type "$CONFIG" TYPE config_get type "$CONFIG" TYPE
[ -z "$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() { uci_add() {
@ -114,19 +121,19 @@ uci_commit() {
# replace handlers # replace handlers
config() { config() {
append updatestr "config = update_config(config, \"@$2=$1\")" "$N" append updatestr "config = uci_update_config(config, \"@$2=$1\")" "$N"
} }
option() { 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() { config_rename() {
append updatestr "config = update_config(config, \"&$1=$2\")" "$N" append updatestr "config = uci_update_config(config, \"&$1=$2\")" "$N"
} }
config_unset() { config_unset() {
append updatestr "config = update_config(config, \"-$1.$2\")" "$N" append updatestr "config = uci_update_config(config, \"-$1.$2\")" "$N"
} }
config_clear() { config_clear() {
append updatestr "config = update_config(config, \"-$1\")" "$N" append updatestr "config = uci_update_config(config, \"-$1\")" "$N"
} }
. "/tmp/.uci/$PACKAGE_BASE" . "/tmp/.uci/$PACKAGE_BASE"