diff options
Diffstat (limited to 'package/base-files')
-rw-r--r-- | package/base-files/Makefile | 2 | ||||
l---------[-rwxr-xr-x] | package/base-files/files/etc/functions.sh | 321 | ||||
-rwxr-xr-x | package/base-files/files/lib/functions.sh | 320 |
3 files changed, 322 insertions, 321 deletions
diff --git a/package/base-files/Makefile b/package/base-files/Makefile index 530d2ca..c3b0350 100644 --- a/package/base-files/Makefile +++ b/package/base-files/Makefile @@ -10,7 +10,7 @@ include $(TOPDIR)/rules.mk include $(INCLUDE_DIR)/kernel.mk PKG_NAME:=base-files -PKG_RELEASE:=87 +PKG_RELEASE:=88 PKG_FILE_DEPENDS:=$(PLATFORM_DIR)/ $(GENERIC_PLATFORM_DIR)/base-files/ PKG_BUILD_DEPENDS:=opkg/host diff --git a/package/base-files/files/etc/functions.sh b/package/base-files/files/etc/functions.sh index e4b3bad..13b3190 100755..120000 --- a/package/base-files/files/etc/functions.sh +++ b/package/base-files/files/etc/functions.sh @@ -1,320 +1 @@ -#!/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 +../lib/functions.sh
\ No newline at end of file diff --git a/package/base-files/files/lib/functions.sh b/package/base-files/files/lib/functions.sh new file mode 100755 index 0000000..e4b3bad --- /dev/null +++ b/package/base-files/files/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 |