base-files: Add new functions for ath11k caldata
[openwrt/staging/pepe2k.git] / package / base-files / files / lib / functions.sh
old mode 100755 (executable)
new mode 100644 (file)
index 7da0c87..7b3203f
@@ -1,4 +1,3 @@
-#!/bin/sh
 # Copyright (C) 2006-2014 OpenWrt.org
 # Copyright (C) 2006 Fokus Fraunhofer <carsten.tittel@fokus.fraunhofer.de>
 # Copyright (C) 2010 Vertical Communications
@@ -33,6 +32,30 @@ xor() {
        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"
@@ -41,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"
@@ -108,7 +139,7 @@ config_unset() {
 # config_get <section> <option>
 config_get() {
        case "$2${3:-$1}" in
-               *[^A-Za-z0-9_]*) : ;;
+               *[!A-Za-z0-9_]*) : ;;
                *)
                        case "$3" in
                                "") eval echo "\"\${CONFIG_${1}_${2}:-\${4}}\"";;
@@ -118,15 +149,22 @@ config_get() {
        esac
 }
 
-# config_get_bool <variable> <section> <option> [<default>]
-config_get_bool() {
-       local _tmp
-       config_get _tmp "$2" "$3" "$4"
+# get_bool <value> [<default>]
+get_bool() {
+       local _tmp="$1"
        case "$_tmp" in
                1|on|true|yes|enabled) _tmp=1;;
                0|off|false|no|disabled) _tmp=0;;
-               *) _tmp="$4";;
+               *) _tmp="$2";;
        esac
+       echo -n "$_tmp"
+}
+
+# config_get_bool <variable> <section> <option> [<default>]
+config_get_bool() {
+       local _tmp
+       config_get _tmp "$2" "$3" "$4"
+       _tmp="$(get_bool "$_tmp" "$4")"
        export ${NO_EXPORT:+-n} "$1=$_tmp"
 }
 
@@ -203,10 +241,10 @@ add_group_and_user() {
        if [ -n "$rusers" ]; then
                local tuple oIFS="$IFS"
                for tuple in $rusers; do
-                       local uid gid uname gname
+                       local uid gid uname gname addngroups addngroup addngname addngid
 
                        IFS=":"
-                       set -- $tuple; uname="$1"; gname="$2"
+                       set -- $tuple; uname="$1"; gname="$2"; addngroups="$3"
                        IFS="="
                        set -- $uname; uname="$1"; uid="$2"
                        set -- $gname; gname="$1"; gid="$2"
@@ -226,7 +264,24 @@ add_group_and_user() {
                                group_add_user "$gname" "$uname"
                        fi
 
-                       unset uid gid uname gname
+                       if [ -n "$uname" ] &&  [ -n "$addngroups" ]; then
+                               oIFS="$IFS"
+                               IFS=","
+                               for addngroup in $addngroups ; do
+                                       IFS="="
+                                       set -- $addngroup; addngname="$1"; addngid="$2"
+                                       if [ -n "$addngid" ]; then
+                                               group_exists "$addngname" || group_add "$addngname" "$addngid"
+                                       else
+                                               group_add_next "$addngname"
+                                       fi
+
+                                       group_add_user "$addngname" "$uname"
+                               done
+                               IFS="$oIFS"
+                       fi
+
+                       unset uid gid uname gname addngroups addngroup addngname addngid
                done
        fi
 }
@@ -239,11 +294,6 @@ default_postinst() {
 
        add_group_and_user "${pkgname}"
 
-       if [ -f "$root/usr/lib/opkg/info/${pkgname}.postinst-pkg" ]; then
-               ( . "$root/usr/lib/opkg/info/${pkgname}.postinst-pkg" )
-               ret=$?
-       fi
-
        if [ -d "$root/rootfs-overlay" ]; then
                cp -R $root/rootfs-overlay/. $root/
                rm -fR $root/rootfs-overlay/
@@ -269,6 +319,11 @@ default_postinst() {
                rm -f /tmp/luci-indexcache
        fi
 
+       if [ -f "$root/usr/lib/opkg/info/${pkgname}.postinst-pkg" ]; then
+               ( . "$root/usr/lib/opkg/info/${pkgname}.postinst-pkg" )
+               ret=$?
+       fi
+
        local shell="$(command -v bash)"
        for i in $(grep -s "^/etc/init.d/" "$root$filelist"); do
                if [ -n "$root" ]; then
@@ -292,6 +347,11 @@ include() {
        done
 }
 
+ipcalc() {
+       set -- $(ipcalc.sh "$@")
+       [ $? -eq 0 ] && export -- "$@"
+}
+
 find_mtd_index() {
        local PART="$(grep "\"$1\"" /proc/mtd | awk -F: '{print $1}')"
        local INDEX="${PART##mtd}"
@@ -307,6 +367,25 @@ find_mtd_part() {
        echo "${INDEX:+$PREFIX$INDEX}"
 }
 
+find_mmc_part() {
+       local DEVNAME PARTNAME ROOTDEV
+
+       if grep -q "$1" /proc/mtd; then
+               echo "" && return 0
+       fi
+
+       if [ -n "$2" ]; then
+               ROOTDEV="$2"
+       else
+               ROOTDEV="mmcblk*"
+       fi
+
+       for DEVNAME in /sys/block/$ROOTDEV/mmcblk*p*; do
+               PARTNAME="$(grep PARTNAME ${DEVNAME}/uevent | cut -f2 -d'=')"
+               [ "$PARTNAME" = "$1" ] && echo "/dev/$(basename $DEVNAME)" && return 0
+       done
+}
+
 group_add() {
        local name="$1"
        local gid="$2"
@@ -344,6 +423,9 @@ group_add_user() {
        echo "$grp" | grep -q ":$" && delim=""
        [ -n "$IPKG_INSTROOT" ] || lock /var/lock/passwd
        sed -i "s/$grp/$grp$delim$2/g" ${IPKG_INSTROOT}/etc/group
+       if [ -z "$IPKG_INSTROOT" ] && [ -x /usr/sbin/selinuxenabled ] && selinuxenabled; then
+               restorecon /etc/group
+       fi
        [ -n "$IPKG_INSTROOT" ] || lock -u /var/lock/passwd
 }
 
@@ -378,4 +460,14 @@ board_name() {
        [ -e /tmp/sysinfo/board_name ] && cat /tmp/sysinfo/board_name || echo "generic"
 }
 
+cmdline_get_var() {
+       local var=$1
+       local cmdlinevar tmp
+
+       for cmdlinevar in $(cat /proc/cmdline); do
+               tmp=${cmdlinevar##${var}}
+               [ "=" = "${tmp:0:1}" ] && echo ${tmp:1}
+       done
+}
+
 [ -z "$IPKG_INSTROOT" ] && [ -f /lib/config/uci.sh ] && . /lib/config/uci.sh