diff options
-rwxr-xr-x | package/base-files/default/bin/uci | 137 | ||||
-rwxr-xr-x | package/base-files/default/etc/functions.sh | 91 |
2 files changed, 124 insertions, 104 deletions
diff --git a/package/base-files/default/bin/uci b/package/base-files/default/bin/uci index d74b89762f..9b50380df2 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 ] && { - 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 <package> [<config>]";; - get) echo "$0 get <package> <config> <option>";; - set) echo "$0 set <package> <config> <option> <value>";; - add) echo "$0 add <package> <type> <config>";; - del) echo "$0 del <package> <config> [<option>]";; + show) echo "$0 show [<package>[.<config>]]";; + get) echo "$0 get <package>.<config>.<option>";; + set) echo "$0 set <package>.<config>[.<option>]=<value>";; + del) echo "$0 del <package>.<config>[.<option>]";; rename) echo "$0 rename <package> <config> <name>";; - commit) echo "$0 commit <package>";; + commit) echo "$0 commit [<package> ... ]";; *) echo "Syntax: $0 <command> <arguments...>" echo uci_usage show uci_usage get uci_usage set - uci_usage add uci_usage del uci_usage rename uci_usage commit @@ -144,11 +163,11 @@ if [ $# -eq 0 ] ; then uci_usage exit 0 fi -CMD="$1" + +local CMD="$1" shift case "$CMD" in set) do_set "$@";; - add) do_add "$@";; del) do_remove "$@";; rename) do_rename "$@";; get) do_get "$@";; diff --git a/package/base-files/default/etc/functions.sh b/package/base-files/default/etc/functions.sh index aa5b000644..7d34f57a49 100755 --- a/package/base-files/default/etc/functions.sh +++ b/package/base-files/default/etc/functions.sh @@ -18,48 +18,48 @@ append() { local var="$1" local value="$2" local sep="${3:- }" - eval "export ${var}=\"\${${var}:+\${${var}}${value:+$sep}}\$value\"" + + eval "$var=\"\${$var:+\${$var}${value:+$sep}}$value\"" } reset_cb() { - config_cb() { - return 0 - } - option_cb() { - return 0 - } + config_cb() { return 0; } + option_cb() { return 0; } } reset_cb config () { - local cfgtype="$1" - local name="$2" - _C=$(($_C + 1)) - name="${name:-cfg${_C}}" - config_cb "$cfgtype" "$name" - export CONFIG_SECTION="$name" - export CONFIG_${CONFIG_SECTION}_TYPE="$cfgtype" + local cfgtype="$1" + local name="$2" + + _C=$((_C + 1)) + name="${name:-cfg${_C}}" + config_cb "$cfgtype" "$name" + CONFIG_SECTION="$name" + eval CONFIG_${CONFIG_SECTION}_TYPE="$cfgtype" } option () { local varname="$1"; shift - export CONFIG_${CONFIG_SECTION}_${varname}="$*" + + eval CONFIG_${CONFIG_SECTION}_${varname}="$*" option_cb "$varname" "$*" } config_rename() { local OLD="$1" local NEW="$2" - local oldsetting + local oldvar local newvar - [ -z "$OLD" -o -z "$NEW" ] && return - for oldsetting in `set | grep ^CONFIG_${OLD}_ | \ + [ "$OLD" -a "$NEW" ] || return + for oldvar in `set | grep ^CONFIG_${OLD}_ | \ sed -e 's/\(.*\)=.*$/\1/'` ; do - newvar="CONFIG_${NEW}_${oldsetting##CONFIG_${OLD}_}" - eval "${newvar}=\${$oldsetting}" - unset "$oldsetting" + newvar="CONFIG_${NEW}_${oldvar##CONFIG_${OLD}_}" + eval "$newvar=\${$oldvar}" + unset "$oldvar" done + [ "$CONFIG_SECTION" = "$OLD" ] && CONFIG_SECTION="$NEW" } @@ -68,38 +68,36 @@ config_unset() { } config_clear() { - [ -z "$CONFIG_SECTION" ] && return - for oldsetting in `set | grep ^CONFIG_${CONFIG_SECTION}_ | \ + local SECTION="$1" + local oldvar + + for oldvar in `set | grep ^CONFIG_${SECTION}_ | \ sed -e 's/\(.*\)=.*$/\1/'` ; do - unset $oldsetting + unset $oldvar done - unset CONFIG_SECTION } config_load() { - CONFIG_SECTION= - local DIR="./" + local file="/etc/config/$1" _C=0 - [ \! -e "$1" -a -e "/etc/config/$1" ] && { - DIR="/etc/config/" - } - [ -e "$DIR$1" ] && { - CONFIG_FILENAME="$DIR$1" - . ${CONFIG_FILENAME} + CONFIG_SECTION= + + [ -e "$file" ] && { + . $file } || return 1 - ${CD:+cd -} >/dev/null + ${CONFIG_SECTION:+config_cb} } config_get() { case "$3" in "") eval "echo \"\${CONFIG_${1}_${2}}\"";; - *) eval "$1=\"\${CONFIG_${2}_${3}}\"";; + *) eval "$1=\"\${CONFIG_${2}_${3}}\"";; esac } config_set() { - export CONFIG_${1}_${2}="${3}" + eval CONFIG_${1}_${2}="$3" } load_modules() { @@ -107,6 +105,8 @@ load_modules() { } include() { + local file + for file in $(ls $1/*.sh 2>/dev/null); do . $file done @@ -114,30 +114,31 @@ include() { find_mtd_part() { local PART="$(grep "\"$1\"" /proc/mtd | awk -F: '{print $1}')" + PART="${PART##mtd}" echo "${PART:+/dev/mtdblock/$PART}" } -strtok() { # <string> <variable> [<separator>] ... - local right - local left="$1" +strtok() { # <string> { <variable> [<separator>] ... } + local tmp + local val="$1" local count=0 shift while [ $# -gt 1 ]; do - right="${left%%$2*}" + tmp="${val%%$2*}" - [ "$right" = "$left" ] && break + [ "$tmp" = "$val" ] && break - left="${left#$right$2}" + val="${val#$tmp$2}" - export $1="$right"; count=$((count+1)) + eval $1="$tmp"; count=$((count+1)) shift 2 done - if [ $# -gt 0 -a "$left" ]; then - export $1="$left"; count=$((count+1)) + if [ $# -gt 0 -a "$val" ]; then + eval $1="$val"; count=$((count+1)) fi return $count |