parent
7de2766a02
commit
b6aef59ea8
@ -1,320 +0,0 @@ |
||||
#!/bin/sh |
||||
# Copyright (C) 2006 OpenWrt.org |
||||
# Copyright (C) 2006 Fokus Fraunhofer <carsten.tittel@fokus.fraunhofer.de> |
||||
|
||||
|
||||
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 |
||||
} |
||||
|
||||
append() { |
||||
local var="$1" |
||||
local value="$2" |
||||
local sep="${3:- }" |
||||
|
||||
eval "export ${NO_EXPORT:+-n} -- \"$var=\${$var:+\${$var}\${value:+\$sep}}\$value\"" |
||||
} |
||||
|
||||
list_contains() { |
||||
local var="$1" |
||||
local str="$2" |
||||
local val |
||||
|
||||
eval "val=\" \${$var} \"" |
||||
[ "${val%% $str *}" != "$val" ] |
||||
} |
||||
|
||||
list_remove() { |
||||
local var="$1" |
||||
local remove="$2" |
||||
local val |
||||
|
||||
eval "val=\" \${$var} \"" |
||||
val1="${val%% $remove *}" |
||||
[ "$val1" = "$val" ] && return |
||||
val2="${val##* $remove }" |
||||
[ "$val2" = "$val" ] && return |
||||
val="${val1## } ${val2%% }" |
||||
val="${val%% }" |
||||
eval "export ${NO_EXPORT:+-n} -- \"$var=\$val\"" |
||||
} |
||||
|
||||
config_load() { |
||||
[ -n "$IPKG_INSTROOT" ] && return 0 |
||||
uci_load "$@" |
||||
} |
||||
|
||||
reset_cb() { |
||||
config_cb() { return 0; } |
||||
option_cb() { return 0; } |
||||
list_cb() { return 0; } |
||||
} |
||||
reset_cb |
||||
|
||||
package() { |
||||
return 0 |
||||
} |
||||
|
||||
config () { |
||||
local cfgtype="$1" |
||||
local name="$2" |
||||
|
||||
export ${NO_EXPORT:+-n} CONFIG_NUM_SECTIONS=$(($CONFIG_NUM_SECTIONS + 1)) |
||||
name="${name:-cfg$CONFIG_NUM_SECTIONS}" |
||||
append CONFIG_SECTIONS "$name" |
||||
[ -n "$NO_CALLBACK" ] || config_cb "$cfgtype" "$name" |
||||
export ${NO_EXPORT:+-n} CONFIG_SECTION="$name" |
||||
export ${NO_EXPORT:+-n} "CONFIG_${CONFIG_SECTION}_TYPE=$cfgtype" |
||||
} |
||||
|
||||
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" |
||||
local oldvar |
||||
local newvar |
||||
|
||||
[ -n "$OLD" -a -n "$NEW" ] || return |
||||
for oldvar in `set | grep ^CONFIG_${OLD}_ | \ |
||||
sed -e 's/\(.*\)=.*$/\1/'` ; do |
||||
newvar="CONFIG_${NEW}_${oldvar##CONFIG_${OLD}_}" |
||||
eval "export ${NO_EXPORT:+-n} \"$newvar=\${$oldvar}\"" |
||||
unset "$oldvar" |
||||
done |
||||
export ${NO_EXPORT:+-n} CONFIG_SECTIONS="$(echo " $CONFIG_SECTIONS " | sed -e "s, $OLD , $NEW ,")" |
||||
|
||||
[ "$CONFIG_SECTION" = "$OLD" ] && export ${NO_EXPORT:+-n} CONFIG_SECTION="$NEW" |
||||
} |
||||
|
||||
config_unset() { |
||||
config_set "$1" "$2" "" |
||||
} |
||||
|
||||
config_clear() { |
||||
local SECTION="$1" |
||||
local oldvar |
||||
|
||||
list_remove CONFIG_SECTIONS "$SECTION" |
||||
export ${NO_EXPORT:+-n} CONFIG_SECTIONS="${SECTION:+$CONFIG_SECTIONS}" |
||||
|
||||
for oldvar in `set | grep ^CONFIG_${SECTION:+${SECTION}_} | \ |
||||
sed -e 's/\(.*\)=.*$/\1/'` ; do |
||||
unset $oldvar |
||||
done |
||||
} |
||||
|
||||
# config_get <variable> <section> <option> [<default>] |
||||
# config_get <section> <option> |
||||
config_get() { |
||||
case "$3" in |
||||
"") 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" "$4" |
||||
case "$_tmp" in |
||||
1|on|true|enabled) _tmp=1;; |
||||
0|off|false|disabled) _tmp=0;; |
||||
*) _tmp="$4";; |
||||
esac |
||||
export ${NO_EXPORT:+-n} "$1=$_tmp" |
||||
} |
||||
|
||||
config_set() { |
||||
local section="$1" |
||||
local option="$2" |
||||
local value="$3" |
||||
local old_section="$CONFIG_SECTION" |
||||
|
||||
CONFIG_SECTION="$section" |
||||
option "$option" "$value" |
||||
CONFIG_SECTION="$old_section" |
||||
} |
||||
|
||||
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 |
||||
eval "$function \"\$section\" \"\$@\"" |
||||
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 |
||||
sed 's/^[^#]/insmod &/' $* | ash 2>&- || : |
||||
} |
||||
} |
||||
|
||||
include() { |
||||
local file |
||||
|
||||
for file in $(ls $1/*.sh 2>/dev/null); do |
||||
. $file |
||||
done |
||||
} |
||||
|
||||
find_mtd_part() { |
||||
local PART="$(grep "\"$1\"" /proc/mtd | awk -F: '{print $1}')" |
||||
local PREFIX=/dev/mtdblock |
||||
|
||||
PART="${PART##mtd}" |
||||
[ -d /dev/mtdblock ] && PREFIX=/dev/mtdblock/ |
||||
echo "${PART:+$PREFIX$PART}" |
||||
} |
||||
|
||||
strtok() { # <string> { <variable> [<separator>] ... } |
||||
local tmp |
||||
local val="$1" |
||||
local count=0 |
||||
|
||||
shift |
||||
|
||||
while [ $# -gt 1 ]; do |
||||
tmp="${val%%$2*}" |
||||
|
||||
[ "$tmp" = "$val" ] && break |
||||
|
||||
val="${val#$tmp$2}" |
||||
|
||||
export ${NO_EXPORT:+-n} "$1=$tmp"; count=$((count+1)) |
||||
shift 2 |
||||
done |
||||
|
||||
if [ $# -gt 0 -a -n "$val" ]; then |
||||
export ${NO_EXPORT:+-n} "$1=$val"; count=$((count+1)) |
||||
fi |
||||
|
||||
return $count |
||||
} |
||||
|
||||
|
||||
jffs2_mark_erase() { |
||||
local part="$(find_mtd_part "$1")" |
||||
[ -z "$part" ] && { |
||||
echo Partition not found. |
||||
return 1 |
||||
} |
||||
echo -e "\xde\xad\xc0\xde" | mtd -qq write - "$1" |
||||
} |
||||
|
||||
uci_apply_defaults() { |
||||
cd /etc/uci-defaults || return 0 |
||||
files="$(ls)" |
||||
[ -z "$files" ] && return 0 |
||||
mkdir -p /tmp/.uci |
||||
for file in $files; do |
||||
( . "./$(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 |
@ -0,0 +1 @@ |
||||
../lib/functions.sh |
@ -0,0 +1,320 @@ |
||||
#!/bin/sh |
||||
# Copyright (C) 2006 OpenWrt.org |
||||
# Copyright (C) 2006 Fokus Fraunhofer <carsten.tittel@fokus.fraunhofer.de> |
||||
|
||||
|
||||
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 |
||||
} |
||||
|
||||
append() { |
||||
local var="$1" |
||||
local value="$2" |
||||
local sep="${3:- }" |
||||
|
||||
eval "export ${NO_EXPORT:+-n} -- \"$var=\${$var:+\${$var}\${value:+\$sep}}\$value\"" |
||||
} |
||||
|
||||
list_contains() { |
||||
local var="$1" |
||||
local str="$2" |
||||
local val |
||||
|
||||
eval "val=\" \${$var} \"" |
||||
[ "${val%% $str *}" != "$val" ] |
||||
} |
||||
|
||||
list_remove() { |
||||
local var="$1" |
||||
local remove="$2" |
||||
local val |
||||
|
||||
eval "val=\" \${$var} \"" |
||||
val1="${val%% $remove *}" |
||||
[ "$val1" = "$val" ] && return |
||||
val2="${val##* $remove }" |
||||
[ "$val2" = "$val" ] && return |
||||
val="${val1## } ${val2%% }" |
||||
val="${val%% }" |
||||
eval "export ${NO_EXPORT:+-n} -- \"$var=\$val\"" |
||||
} |
||||
|
||||
config_load() { |
||||
[ -n "$IPKG_INSTROOT" ] && return 0 |
||||
uci_load "$@" |
||||
} |
||||
|
||||
reset_cb() { |
||||
config_cb() { return 0; } |
||||
option_cb() { return 0; } |
||||
list_cb() { return 0; } |
||||
} |
||||
reset_cb |
||||
|
||||
package() { |
||||
return 0 |
||||
} |
||||
|
||||
config () { |
||||
local cfgtype="$1" |
||||
local name="$2" |
||||
|
||||
export ${NO_EXPORT:+-n} CONFIG_NUM_SECTIONS=$(($CONFIG_NUM_SECTIONS + 1)) |
||||
name="${name:-cfg$CONFIG_NUM_SECTIONS}" |
||||
append CONFIG_SECTIONS "$name" |
||||
[ -n "$NO_CALLBACK" ] || config_cb "$cfgtype" "$name" |
||||
export ${NO_EXPORT:+-n} CONFIG_SECTION="$name" |
||||
export ${NO_EXPORT:+-n} "CONFIG_${CONFIG_SECTION}_TYPE=$cfgtype" |
||||
} |
||||
|
||||
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" |
||||
local oldvar |
||||
local newvar |
||||
|
||||
[ -n "$OLD" -a -n "$NEW" ] || return |
||||
for oldvar in `set | grep ^CONFIG_${OLD}_ | \ |
||||
sed -e 's/\(.*\)=.*$/\1/'` ; do |
||||
newvar="CONFIG_${NEW}_${oldvar##CONFIG_${OLD}_}" |
||||
eval "export ${NO_EXPORT:+-n} \"$newvar=\${$oldvar}\"" |
||||
unset "$oldvar" |
||||
done |
||||
export ${NO_EXPORT:+-n} CONFIG_SECTIONS="$(echo " $CONFIG_SECTIONS " | sed -e "s, $OLD , $NEW ,")" |
||||
|
||||
[ "$CONFIG_SECTION" = "$OLD" ] && export ${NO_EXPORT:+-n} CONFIG_SECTION="$NEW" |
||||
} |
||||
|
||||
config_unset() { |
||||
config_set "$1" "$2" "" |
||||
} |
||||
|
||||
config_clear() { |
||||
local SECTION="$1" |
||||
local oldvar |
||||
|
||||
list_remove CONFIG_SECTIONS "$SECTION" |
||||
export ${NO_EXPORT:+-n} CONFIG_SECTIONS="${SECTION:+$CONFIG_SECTIONS}" |
||||
|
||||
for oldvar in `set | grep ^CONFIG_${SECTION:+${SECTION}_} | \ |
||||
sed -e 's/\(.*\)=.*$/\1/'` ; do |
||||
unset $oldvar |
||||
done |
||||
} |
||||
|
||||
# config_get <variable> <section> <option> [<default>] |
||||
# config_get <section> <option> |
||||
config_get() { |
||||
case "$3" in |
||||
"") 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" "$4" |
||||
case "$_tmp" in |
||||
1|on|true|enabled) _tmp=1;; |
||||
0|off|false|disabled) _tmp=0;; |
||||
*) _tmp="$4";; |
||||
esac |
||||
export ${NO_EXPORT:+-n} "$1=$_tmp" |
||||
} |
||||
|
||||
config_set() { |
||||
local section="$1" |
||||
local option="$2" |
||||
local value="$3" |
||||
local old_section="$CONFIG_SECTION" |
||||
|
||||
CONFIG_SECTION="$section" |
||||
option "$option" "$value" |
||||
CONFIG_SECTION="$old_section" |
||||
} |
||||
|
||||
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 |
||||
eval "$function \"\$section\" \"\$@\"" |
||||
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 |
||||
sed 's/^[^#]/insmod &/' $* | ash 2>&- || : |
||||
} |
||||
} |
||||
|
||||
include() { |
||||
local file |
||||
|
||||
for file in $(ls $1/*.sh 2>/dev/null); do |
||||
. $file |
||||
done |
||||
} |
||||
|
||||
find_mtd_part() { |
||||
local PART="$(grep "\"$1\"" /proc/mtd | awk -F: '{print $1}')" |
||||
local PREFIX=/dev/mtdblock |
||||
|
||||
PART="${PART##mtd}" |
||||
[ -d /dev/mtdblock ] && PREFIX=/dev/mtdblock/ |
||||
echo "${PART:+$PREFIX$PART}" |
||||
} |
||||
|
||||
strtok() { # <string> { <variable> [<separator>] ... } |
||||
local tmp |
||||
local val="$1" |
||||
local count=0 |
||||
|
||||
shift |
||||
|
||||
while [ $# -gt 1 ]; do |
||||
tmp="${val%%$2*}" |
||||
|
||||
[ "$tmp" = "$val" ] && break |
||||
|
||||
val="${val#$tmp$2}" |
||||
|
||||
export ${NO_EXPORT:+-n} "$1=$tmp"; count=$((count+1)) |
||||
shift 2 |
||||
done |
||||
|
||||
if [ $# -gt 0 -a -n "$val" ]; then |
||||
export ${NO_EXPORT:+-n} "$1=$val"; count=$((count+1)) |
||||
fi |
||||
|
||||
return $count |
||||
} |
||||
|
||||
|
||||
jffs2_mark_erase() { |
||||
local part="$(find_mtd_part "$1")" |
||||
[ -z "$part" ] && { |
||||
echo Partition not found. |
||||
return 1 |
||||
} |
||||
echo -e "\xde\xad\xc0\xde" | mtd -qq write - "$1" |
||||
} |
||||
|
||||
uci_apply_defaults() { |
||||
cd /etc/uci-defaults || return 0 |
||||
files="$(ls)" |
||||
[ -z "$files" ] && return 0 |
||||
mkdir -p /tmp/.uci |
||||
for file in $files; do |
||||
( . "./$(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 |
Loading…
Reference in new issue