1ecb72b961
git-svn-id: svn://svn.openwrt.org/openwrt/packages@16712 3c298f89-4303-0410-b956-a3cf2f4a3e73
123 lines
2.8 KiB
Bash
123 lines
2.8 KiB
Bash
#!/bin/sh
|
|
# Shell script compatibility wrappers for /sbin/uci
|
|
#
|
|
# Copyright (C) 2008 Felix Fietkau <nbd@openwrt.org>
|
|
# Copyright (C) 2009 Daniel Dickinson <crazycshore@gmail.com>
|
|
#
|
|
# This program is free software; you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation; either version 2 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
# General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program; if not, write to the Free Software
|
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
|
|
# $UCI and $UCISTATE must be set
|
|
|
|
CONFIG_APPEND=
|
|
_C=0
|
|
LOAD_STATE=1
|
|
LIST_SEP=" "
|
|
|
|
config_load() {
|
|
local PACKAGE="$1"
|
|
local DATA
|
|
local RET
|
|
|
|
_C=0
|
|
|
|
if [ -z "$CONFIG_APPEND" ]; then
|
|
CONFIG_SECTIONS=
|
|
CONFIG_NUM_SECTIONS=0
|
|
CONFIG_SECTION=
|
|
fi
|
|
export NO_EXPORT=
|
|
DATA="$($UCI -P $UCISTATE -S -n export "$PACKAGE" 2>/dev/null)"
|
|
RET="$?"
|
|
[ "$RET" != 0 -o -z "$DATA" ] || eval "$DATA"
|
|
unset DATA
|
|
|
|
${CONFIG_SECTION:+config_cb}
|
|
return "$RET"
|
|
}
|
|
|
|
reset_cb() {
|
|
config_cb() { return 0; }
|
|
option_cb() { return 0; }
|
|
list_cb() { return 0; }
|
|
}
|
|
reset_cb
|
|
config () {
|
|
local cfgtype="$1"
|
|
local name="$2"
|
|
|
|
CONFIG_NUM_SECTIONS=$(($CONFIG_NUM_SECTIONS + 1))
|
|
name="${name:-cfg$CONFIG_NUM_SECTIONS}"
|
|
append CONFIG_SECTIONS "$name"
|
|
[ -n "$NO_CALLBACK" ] || config_cb "$cfgtype" "$name"
|
|
CONFIG_SECTION="$name"
|
|
eval "CONFIG_${CONFIG_SECTION}_TYPE=\"$cfgtype\""
|
|
}
|
|
|
|
option () {
|
|
local varname="$1"; shift
|
|
local value="$*"
|
|
|
|
eval "CONFIG_${CONFIG_SECTION}_${varname}=\"$value\""
|
|
[ -n "$NO_CALLBACK" ] || option_cb "$varname" "$*"
|
|
}
|
|
|
|
list() {
|
|
local varname="$1"; shift
|
|
local value="$*"
|
|
local len
|
|
|
|
config_get len "$CONFIG_SECTION" "${varname}_LENGTH"
|
|
len="$((${len:-0} + 1))"
|
|
config_set "$CONFIG_SECTION" "${varname}_ITEM$len" "$value"
|
|
config_set "$CONFIG_SECTION" "${varname}_LENGTH" "$len"
|
|
append "CONFIG_${CONFIG_SECTION}_${varname}" "$value" "$LIST_SEP"
|
|
list_cb "$varname" "$*"
|
|
}
|
|
|
|
config_get() {
|
|
case "$3" in
|
|
"") eval "echo \"\${CONFIG_${1}_${2}}\"";;
|
|
*) eval "$1=\${CONFIG_${2}_${3}}";;
|
|
esac
|
|
}
|
|
|
|
config_foreach() {
|
|
local function="$1"
|
|
[ "$#" -ge 1 ] && shift
|
|
local type="$1"
|
|
[ "$#" -ge 1 ] && shift
|
|
local section cfgtype
|
|
|
|
[ -z "$CONFIG_SECTIONS" ] && return 0
|
|
for section in ${CONFIG_SECTIONS}; do
|
|
config_get cfgtype "$section" TYPE
|
|
[ -n "$type" -a "x$cfgtype" != "x$type" ] && continue
|
|
$function "$section" "$@"
|
|
done
|
|
}
|
|
|
|
package() {
|
|
return 0
|
|
}
|
|
|
|
append() {
|
|
local var="$1"
|
|
local value="$2"
|
|
local sep="${3:- }"
|
|
|
|
eval "$var=\${$var:+\${$var}\${value:+\$sep}}\$value"
|
|
}
|
|
|