X-Git-Url: http://git.openwrt.org/?a=blobdiff_plain;f=package%2Fbase-files%2Ffiles%2Flib%2Ffunctions.sh;h=7b3203f55abf527d49e1644de124a1d9a546ab71;hb=652a6677d5fa3c1eb0b9b58b8bf5d95c7eb6c130;hp=3a5a65dcc7ee1dc9d490d58bca517c6650d55ba7;hpb=d099a349806f2f6a4945c382ab8b7ed47228bac4;p=openwrt%2Fstaging%2Fpepe2k.git diff --git a/package/base-files/files/lib/functions.sh b/package/base-files/files/lib/functions.sh old mode 100755 new mode 100644 index 3a5a65dcc7..7b3203f55a --- a/package/base-files/files/lib/functions.sh +++ b/package/base-files/files/lib/functions.sh @@ -1,5 +1,4 @@ -#!/bin/sh -# Copyright (C) 2006-2013 OpenWrt.org +# Copyright (C) 2006-2014 OpenWrt.org # Copyright (C) 2006 Fokus Fraunhofer # Copyright (C) 2010 Vertical Communications @@ -17,6 +16,46 @@ NO_EXPORT=1 LOAD_STATE=1 LIST_SEP=" " +# xor multiple hex values of the same length +xor() { + local val + local ret="0x$1" + local retlen=${#1} + + shift + while [ -n "$1" ]; do + val="0x$1" + ret=$((ret ^ val)) + shift + done + + printf "%0${retlen}x" "$ret" +} + +data_2bin() { + local data=$1 + local len=${#1} + local bin_data + + for i in $(seq 0 2 $(($len - 1))); do + bin_data="${bin_data}\x${data:i:2}" + done + + echo -ne $bin_data +} + +data_2xor_val() { + local data=$1 + local len=${#1} + local xor_data + + for i in $(seq 0 4 $(($len - 1))); do + xor_data="${xor_data}${data:i:4} " + done + + echo -n ${xor_data:0:-1} +} + append() { local var="$1" local value="$2" @@ -25,6 +64,14 @@ append() { eval "export ${NO_EXPORT:+-n} -- \"$var=\${$var:+\${$var}\${value:+\$sep}}\$value\"" } +prepend() { + local var="$1" + local value="$2" + local sep="${3:- }" + + eval "export ${NO_EXPORT:+-n} -- \"$var=\$value\${$var:+\${sep}\${$var}}\"" +} + list_contains() { local var="$1" local str="$2" @@ -54,19 +101,19 @@ config () { local cfgtype="$1" local name="$2" - export ${NO_EXPORT:+-n} CONFIG_NUM_SECTIONS=$(($CONFIG_NUM_SECTIONS + 1)) + 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" + config_set "$CONFIG_SECTION" "TYPE" "${cfgtype}" + [ -n "$NO_CALLBACK" ] || config_cb "$cfgtype" "$name" } option () { local varname="$1"; shift local value="$*" - export ${NO_EXPORT:+-n} "CONFIG_${CONFIG_SECTION}_${varname}=$value" + config_set "$CONFIG_SECTION" "${varname}" "${value}" [ -n "$NO_CALLBACK" ] || option_cb "$varname" "$*" } @@ -77,11 +124,11 @@ list() { config_get len "$CONFIG_SECTION" "${varname}_LENGTH" 0 [ $len = 0 ] && append CONFIG_LIST_STATE "${CONFIG_SECTION}_${varname}" - len=$(($len + 1)) + 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" "$*" + [ -n "$NO_CALLBACK" ] || list_cb "$varname" "$*" } config_unset() { @@ -91,21 +138,33 @@ config_unset() { # config_get