X-Git-Url: https://git.rohieb.name/openwrt.git/blobdiff_plain/4f09c2f1f6c0d603d93c61b9f977156599862302..5eca1169a020f0d082a08ff282375f2ae2915503:/package/base-files/default/etc/functions.sh diff --git a/package/base-files/default/etc/functions.sh b/package/base-files/default/etc/functions.sh index fbb5a160c..9c3057ed0 100755 --- a/package/base-files/default/etc/functions.sh +++ b/package/base-files/default/etc/functions.sh @@ -1,10 +1,15 @@ #!/bin/sh +# Copyright (C) 2006 OpenWrt.org +# Copyright (C) 2006 Fokus Fraunhofer + alias debug=${DEBUG:-:} # newline N=" " +_C=0 + # valid interface? if_valid () ( ifconfig "$1" >&- 2>&- || @@ -20,29 +25,55 @@ append() { local var="$1" local value="$2" local sep="${3:- }" - eval "export ${var}=\"\${${var}:+\${${var}}${value:+$sep}}$value\"" + eval "export ${var}=\"\${${var}:+\${${var}}${value:+$sep}}\$value\"" } -config_cb() { - return 0 -} -option_cb() { - return 0 +reset_cb() { + config_cb() { + return 0 + } + option_cb() { + return 0 + } } +reset_cb config () { - config_cb "$@" - _C=$((${_C:-0} + 1)) - export CONFIG_SECTION="${2:-cfg${_C}}" - export CONFIG_${CONFIG_SECTION}_TYPE="$1" + 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" } option () { - local varname="$1" ; shift + local varname="$1"; shift export CONFIG_${CONFIG_SECTION}_${varname}="$*" option_cb "$varname" "$*" } +config_rename() { + local OLD="$1" + local NEW="$2" + local oldsetting + local newvar + + [ -z "$OLD" -o -z "$NEW" ] && return + for oldsetting in `set | grep ^CONFIG_${OLD}_ | \ + sed -e 's/\(.*\)=.*$/\1/'` ; do + newvar="CONFIG_${NEW}_${oldsetting##CONFIG_${OLD}_}" + eval "${newvar}=\${$oldsetting}" + unset "$oldsetting" + done + [ "$CONFIG_SECTION" = "$OLD" ] && CONFIG_SECTION="$NEW" +} + +config_unset() { + config_set "$1" "$2" "" +} + config_clear() { [ -z "$CONFIG_SECTION" ] && return for oldsetting in `set | grep ^CONFIG_${CONFIG_SECTION}_ | \ @@ -53,18 +84,22 @@ config_clear() { } config_load() { - local CD="" - if [ \! -e "$1" -a -e "/etc/config/$1" ]; then - cd /etc/config && local CD=1 - fi - [ -e "$1" ] && . $1 - ${CD:+cd - >/dev/null} + local DIR="./" + _C=0 + [ \! -e "$1" -a -e "/etc/config/$1" ] && { + DIR="/etc/config/" + } + [ -e "$DIR$1" ] && { + CONFIG_FILENAME="$DIR$1" + . ${CONFIG_FILENAME} + } || return 1 + ${CD:+cd -} >/dev/null ${CONFIG_SECTION:+config_cb} } config_get() { case "$3" in - "") eval "echo \${CONFIG_${1}_${2}}";; + "") eval "echo \"\${CONFIG_${1}_${2}}\"";; *) eval "$1=\"\${CONFIG_${2}_${3}}\"";; esac } @@ -76,3 +111,9 @@ config_set() { load_modules() { sed 's/^[^#]/insmod &/' $* | ash 2>&- || : } + +include() { + for file in $(ls $1/*.sh 2>/dev/null); do + . $file + done +}