allow packages to optionally append config file contents in the environment by settin...
[openwrt-10.03/.git] / package / uci / files / uci / lib / config / uci.sh
index bfec4febbe39b0ab364038ba38c0863123748de9..c226f4fe1a6ab089eb4bff06845e08e89d4b27bd 100644 (file)
 
 uci_load() {
        local PACKAGE="$1"
+       local DATA
+       local RET
 
        _C=0
-       export ${NO_EXPORT:+-n} CONFIG_SECTIONS=
-       export ${NO_EXPORT:+-n} CONFIG_NUM_SECTIONS=0
-       export ${NO_EXPORT:+-n} CONFIG_SECTION=
+       if [ -z "$CONFIG_APPEND" ]; then
+               export ${NO_EXPORT:+-n} CONFIG_SECTIONS=
+               export ${NO_EXPORT:+-n} CONFIG_NUM_SECTIONS=0
+               export ${NO_EXPORT:+-n} CONFIG_SECTION=
+       fi
 
-       eval "$(/sbin/uci ${LOAD_STATE:+-P /var/state} -S -n export "$PACKAGE")"
+       DATA="$(/sbin/uci ${LOAD_STATE:+-P /var/state} -S -n export "$PACKAGE" 2>/dev/null)"
+       RET="$?"
+       [ "$RET" != 0 -o -z "$DATA" ] || eval "$DATA"
+       unset DATA
 
        ${CONFIG_SECTION:+config_cb}
+       return "$RET"
 }
 
 uci_set_default() {
        local PACKAGE="$1"
        /sbin/uci -q show "$1" > /dev/null && return 0
        /sbin/uci import "$1"
+       /sbin/uci commit "$1"
 }
 
 uci_revert_state() {
@@ -60,7 +69,7 @@ uci_set() {
        local OPTION="$3"
        local VALUE="$4"
 
-       /sbin/uci set "$PACKAGE.$CONFIG.$OPTION=$TYPE"
+       /sbin/uci set "$PACKAGE.$CONFIG.$OPTION=$VALUE"
 }
 
 uci_add() {
@@ -68,7 +77,12 @@ uci_add() {
        local TYPE="$2"
        local CONFIG="$3"
 
-       /sbin/uci set "$PACKAGE.$CONFIG=$TYPE"
+       if [ -z "$CONFIG" ]; then
+               export ${NO_EXPORT:+-n} CONFIG_SECTION="$(/sbin/uci add "$PACKAGE" "$TYPE")"
+       else
+               /sbin/uci set "$PACKAGE.$CONFIG=$TYPE"
+               export ${NO_EXPORT:+-n} CONFIG_SECTION="$CONFIG"
+       fi
 }
 
 uci_rename() {