diff --git a/package/base-files/default/bin/uci b/package/base-files/default/bin/uci index d74b89762f7..9b50380df2f 100755 --- a/package/base-files/default/bin/uci +++ b/package/base-files/default/bin/uci @@ -21,33 +21,44 @@ . /etc/functions.sh include /lib/config +SEP="[^0-9A-Za-z_]" + do_get() { - [ $# -ne 3 ] && { + local PACKAGE + local CONFIG + local OPTION + local DUMMY + + strtok "$*" PACKAGE . CONFIG . OPTION $SEP DUMMY + + [ $? -ne 3 ] && { uci_usage get exit 1 } - local PACKAGE="$1" - local CONFIG="$2" - local OPTION="$3" uci_load "$PACKAGE" config_get "$CONFIG" "$OPTION" } do_set() { - [ $# -ne 4 ] && { + local PACKAGE + local CONFIG + local OPTION + local VALUE + + strtok "$1" PACKAGE . CONFIG = VALUE + [ $? -ne 3 ] && { uci_usage set exit 1 } - uci_set "$@" -} - -do_add() { - [ $# -ne 3 ] && { - uci_usage add - exit 1 - } - uci_add "$@" + + strtok "$CONFIG" CONFIG . OPTION + + if [ $? -eq 1 ]; then + uci_add "$PACKAGE" "$VALUE" "$CONFIG" + else + uci_set "$PACKAGE" "$CONFIG" "$OPTION" "$VALUE" + fi } do_rename() { @@ -59,78 +70,86 @@ do_rename() { } do_remove() { - [ $# -ne 3 -a $# -ne 2 ] && { + local PACKAGE + local CONFIG + local OPTION + local DUMMY + + strtok "$*" PACKAGE . CONFIG . OPTION $SEP DUMMY + [ $? -ne 3 -a $? -ne 2 ] && { uci_usage rename exit 1 } - uci_remove "$@" + uci_remove "$PACKAGE" "$CONFIG" ${OPTION:+"$OPTION"} } do_commit() { - [ $# -ne 1 ] && { - uci_usage commit - exit 1 - } - uci_commit "$1" + local PACKAGE="$1" + for package in ${PACKAGE:-$(cd /tmp/.uci; ls)}; do + uci_commit "$package" + done } do_show() { - [ $# -gt 2 -o $# -lt 1 ] && { + local PACKAGE + local CONFIG + local DUMMY + + strtok "$*" PACKAGE . CONFIG $SEP DUMMY + [ $? -gt 2 ] && { uci_usage show exit 1 } - PACKAGE="$1" - CONFIG="$2" - SECTION="" + for package in ${PACKAGE:-$(cd /etc/config; ls)}; do + SECTION="" - config_cb() { - if [ -z "$CONFIG" -o "$CONFIG" = "$2" ]; then - append SECTION "$2" - option_cb() { - append "${CONFIG_SECTION}_VARS" "$1" - } - else - option_cb() { - return 0 - } - fi - } + config_cb() { + if [ -z "$CONFIG" -o "$CONFIG" = "$2" ]; then + append SECTION "$2" + option_cb() { + append "${CONFIG_SECTION}_VARS" "$1" + } + else + option_cb() { + return 0 + } + fi + } - uci_load "$PACKAGE" + uci_load "$package" - for section in $SECTION; do - config_get type "$section" TYPE - [ -z "$type" ] && continue - echo "@$section=$type" - eval "VARS=\"\${${section}_VARS}\"" - for var in $VARS; do - config_get val "$section" "$var" - [ -n "$val" ] && { - echo "${section}.${var}=${val}" - config_set "$section" "$var" "" - } + for section in $SECTION; do + config_get type "$section" TYPE + [ -z "$type" ] && continue + echo "$package.$section=$type" + eval "VARS=\"\${${section}_VARS}\"" + for var in $VARS; do + config_get val "$section" "$var" + [ -n "$val" ] && { + echo "$package.$section.$var=$val" + config_set "$section" "$var" "" + } + done + config_set "$section" TYPE "" done - config_set "$section" TYPE "" done } uci_usage() { case "$1" in - show) echo "$0 show []";; - get) echo "$0 get