Просмотр исходного кода

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

SVN-Revision: 6666
Felix Fietkau 19 лет назад
Родитель
Сommit
7f0dd3fa45

+ 5 - 1
package/base-files/files/etc/functions.sh

@@ -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() {

+ 35 - 9
package/base-files/files/lib/config/uci-update.awk → package/base-files/files/lib/config/uci.awk

@@ -1,4 +1,4 @@
-# Configuration update functions
+# Configuration update functions - AWK API
 #
 # Copyright (C) 2006 by Fokus Fraunhofer <[email protected]>
 # Copyright (C) 2006 by Felix Fietkau <[email protected]>
@@ -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
 		} 

+ 18 - 11
package/base-files/files/lib/config/uci.sh

@@ -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"