X-Git-Url: https://git.archive.openwrt.org/?p=openwrt.git;a=blobdiff_plain;f=package%2Fbase-files%2Fdefault%2Fbin%2Fuci;h=9b50380df2f831e00ecba44cef00f1c373cef7ae;hp=7f4354947170c8a82455717dfec6bad67201a8ca;hb=356535ffd7bc1343ce6bc2fc367f788cc2c1bd24;hpb=f52d66ff00b24111f87c274d3d7085ef2e1d27b1 diff --git a/package/base-files/default/bin/uci b/package/base-files/default/bin/uci index 7f43549471..9b50380df2 100755 --- a/package/base-files/default/bin/uci +++ b/package/base-files/default/bin/uci @@ -1,7 +1,7 @@ #!/bin/sh # Shell script for interacting with config files # -# Copyright (C) 2006 by Fokus Fraunhofer +# Copyright (C) 2006 by Fokus Fraunhofer # Copyright (C) 2006 by Felix Fietkau # # This program is free software; you can redistribute it and/or modify @@ -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 "$PACAKGE" + uci_load "$PACKAGE" config_get "$CONFIG" "$OPTION" } do_set() { - [ $# -ne 4 ] && { - uci_usage set - exit 1 - } - uci_set "$@" -} + local PACKAGE + local CONFIG + local OPTION + local VALUE -do_add() { - [ $# -ne 3 ] && { - uci_usage add + strtok "$1" PACKAGE . CONFIG = VALUE + [ $? -ne 3 ] && { + uci_usage set 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