diff options
Diffstat (limited to 'package/base-files/files/lib')
| -rw-r--r-- | package/base-files/files/lib/functions/boot.sh | 77 | 
1 files changed, 56 insertions, 21 deletions
| diff --git a/package/base-files/files/lib/functions/boot.sh b/package/base-files/files/lib/functions/boot.sh index 91ab9306e..fc93eba49 100644 --- a/package/base-files/files/lib/functions/boot.sh +++ b/package/base-files/files/lib/functions/boot.sh @@ -6,19 +6,66 @@ mount() {  	/bin/busybox mount "$@"  } +boot_hook_splice_start() { +	export -n PI_HOOK_SPLICE=1 +} + +boot_hook_splice_finish() { +	local hook +	for hook in $PI_STACK_LIST; do +		local v; eval "v=\${${hook}_splice:+\$${hook}_splice }$hook" +		export -n "${hook}=${v% }" +		export -n "${hook}_splice=" +	done +	export -n PI_HOOK_SPLICE= +} + +boot_hook_init() { +	local hook="${1}_hook" +	export -n "PI_STACK_LIST=${PI_STACK_LIST:+$PI_STACK_LIST }$hook" +	export -n "$hook=" +} +  boot_hook_add() { -    	local hook="${1}_hook" -	local value="$2" -	local sep=" " -	 -	eval "$hook=\"\${$hook:+\${$hook}\${value:+\$sep}}\$value\"" +	local hook="${1}_hook${PI_HOOK_SPLICE:+_splice}" +	local func="${2}" + +	[ -n "$func" ] && { +		local v; eval "v=\$$hook" +		export -n "$hook=${v:+$v }$func" +	} +} + +boot_hook_shift() { +	local hook="${1}_hook" +	local rvar="${2}" + +	local v; eval "v=\$$hook" +	[ -n "$v" ] && { +		local first="${v%% *}" + +		[ "$v" != "${v#* }" ] && \ +			export -n "$hook=${v#* }" || \ +			export -n "$hook=" + +		export -n "$rvar=$first" +		return 0 +	} + +	return 1  }  boot_run_hook() { -    local boot_func -    for boot_func in $(eval "echo \"\$${1}_hook\""); do -	$boot_func "$1" "$2" -    done +	local hook="$1" +	local func + +	while boot_hook_shift "$hook" func; do +		local ran; eval "ran=\$PI_RAN_$func" +		[ -n "$ran" ] || { +			export -n "PI_RAN_$func=1" +			$func "$1" "$2" +		} +	done  }  find_mtd_part() { @@ -99,15 +146,3 @@ ramoverlay() {  	fopivot /tmp/root /rom 1  } -pi_include() { -	if [ -f "/tmp/overlay/$1" ]; then -		. "/tmp/overlay/$1" -	elif [ -f "$1" ]; then -		. "$1" -	else -		echo "WARNING: $1 not found" -		return 1 -	fi -	return 0 -} - | 
