# Copyright (C) 2006 OpenWrt.org
# Copyright (C) 2006 Fokus Fraunhofer <carsten.tittel@fokus.fraunhofer.de>
-alias debug=${DEBUG:-:}
+
+debug () {
+ ${DEBUG:-:} "$@"
+}
+mount() {
+ busybox mount "$@"
+}
# newline
N="
_C=0
NO_EXPORT=1
LOAD_STATE=1
+LIST_SEP=" "
hotplug_dev() {
env -i ACTION=$1 INTERFACE=$2 /sbin/hotplug-call net
val2="${val##* $remove }"
[ "$val2" = "$val" ] && return
val="${val1## } ${val2%% }"
+ val="${val%% }"
eval "export ${NO_EXPORT:+-n} -- \"$var=\$val\""
}
reset_cb() {
config_cb() { return 0; }
option_cb() { return 0; }
+ list_cb() { return 0; }
}
reset_cb
option () {
local varname="$1"; shift
local value="$*"
-
+
export ${NO_EXPORT:+-n} "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" 0
+ [ $len = 0 ] && append CONFIG_LIST_STATE "${CONFIG_SECTION}_${varname}"
+ len=$(($len + 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_rename() {
local OLD="$1"
local NEW="$2"
config_clear() {
local SECTION="$1"
local oldvar
-
- export ${NO_EXPORT:+-n} CONFIG_SECTIONS="$(echo " $CONFIG_SECTIONS " | sed -e "s, $OLD , ,")"
+
+ list_remove CONFIG_SECTIONS "$SECTION"
export ${NO_EXPORT:+-n} CONFIG_SECTIONS="${SECTION:+$CONFIG_SECTIONS}"
for oldvar in `set | grep ^CONFIG_${SECTION:+${SECTION}_} | \
done
}
+# config_get <variable> <section> <option> [<default>]
+# config_get <section> <option>
config_get() {
case "$3" in
- "") eval "echo \"\${CONFIG_${1}_${2}}\"";;
- *) eval "export ${NO_EXPORT:+-n} -- \"$1=\${CONFIG_${2}_${3}}\"";;
+ "") eval echo "\${CONFIG_${1}_${2}:-\${4}}";;
+ *) eval export ${NO_EXPORT:+-n} -- "${1}=\${CONFIG_${2}_${3}:-\${4}}";;
esac
}
# config_get_bool <variable> <section> <option> [<default>]
config_get_bool() {
local _tmp
- config_get "_tmp" "$2" "$3"
+ config_get _tmp "$2" "$3" "$4"
case "$_tmp" in
- 1|on|true|enabled) export ${NO_EXPORT:+-n} "$1=1";;
- 0|off|false|disabled) export ${NO_EXPORT:+-n} "$1=0";;
- *) eval "$1=$4";;
+ 1|on|true|enabled) _tmp=1;;
+ 0|off|false|disabled) _tmp=0;;
+ *) _tmp="$4";;
esac
+ export ${NO_EXPORT:+-n} "$1=$_tmp"
}
config_set() {
done
}
+config_list_foreach() {
+ [ "$#" -ge 3 ] || return 0
+ local section="$1"; shift
+ local option="$1"; shift
+ local function="$1"; shift
+ local val
+ local len
+ local c=1
+
+ config_get len "${section}" "${option}_LENGTH"
+ [ -z "$len" ] && return 0
+ while [ $c -le "$len" ]; do
+ config_get val "${section}" "${option}_ITEM$c"
+ eval "$function \"\$val\" \"$@\""
+ c="$(($c + 1))"
+ done
+}
+
load_modules() {
[ -d /etc/modules.d ] && {
cd /etc/modules.d
echo -e "\xde\xad\xc0\xde" | mtd -qq write - "$1"
}
-uci_apply_defaults() {(
+uci_apply_defaults() {
cd /etc/uci-defaults || return 0
files="$(ls)"
[ -z "$files" ] && return 0
( . "./$(basename $file)" ) && rm -f "$file"
done
uci commit
-)}
+}
+
+service_kill() {
+ local name="${1}"
+ local pid="${2:-$(pidof "$name")}"
+ local grace="${3:-5}"
+
+ [ -f "$pid" ] && pid="$(head -n1 "$pid" 2>/dev/null)"
+
+ for pid in $pid; do
+ [ -d "/proc/$pid" ] || continue
+ local try=0
+ kill -TERM $pid 2>/dev/null && \
+ while grep -qs "$name" "/proc/$pid/cmdline" && [ $((try++)) -lt $grace ]; do sleep 1; done
+ kill -KILL $pid 2>/dev/null && \
+ while grep -qs "$name" "/proc/$pid/cmdline"; do sleep 1; done
+ done
+}
+
+
+pi_include() {
+ if [ -f "/tmp/overlay/$1" ]; then
+ . "/tmp/overlay/$1"
+ elif [ -f "$1" ]; then
+ . "$1"
+ elif [ -d "/tmp/overlay/$1" ]; then
+ if [ -n "$(ls /tmp/overlay/$1/*.sh 2>/dev/null)" ]; then
+ for src_script in /tmp/overlay/$1/*.sh; do
+ . "$src_script"
+ done
+ fi
+ elif [ -d "$1" ]; then
+ if [ -n "$(ls $1/*.sh 2>/dev/null)" ]; then
+ for src_script in $1/*.sh; do
+ . "$src_script"
+ done
+ fi
+ else
+ echo "WARNING: $1 not found"
+ return 1
+ fi
+ return 0
+}
[ -z "$IPKG_INSTROOT" -a -f /lib/config/uci.sh ] && . /lib/config/uci.sh