diff options
| -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 530d2ca35..c3b035088 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 e4b3badb4..13b3190e7 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 000000000..e4b3badb4 --- /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 | 
