base-files: add network_get_uptime() to /lib/functions/network.sh
[openwrt/openwrt.git] / package / base-files / files / lib / functions.sh
index 4879a3708acb59f0585cfc52e71d9ec1f047e5c8..860fc045100f15a0725e47a38f28f9855835291a 100755 (executable)
@@ -57,16 +57,16 @@ config () {
        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" "$*"
 }
 
@@ -81,7 +81,7 @@ list() {
        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() {
@@ -92,7 +92,7 @@ config_unset() {
 # config_get <section> <option>
 config_get() {
        case "$3" in
-               "") eval echo "\${CONFIG_${1}_${2}:-\${4}}";;
+               "") eval echo "\"\${CONFIG_${1}_${2}:-\${4}}\"";;
                *)  eval export ${NO_EXPORT:+-n} -- "${1}=\${CONFIG_${2}_${3}:-\${4}}";;
        esac
 }
@@ -113,11 +113,8 @@ 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"
+       export ${NO_EXPORT:+-n} "CONFIG_${section}_${option}=${value}"
 }
 
 config_foreach() {
@@ -153,34 +150,29 @@ config_list_foreach() {
        done
 }
 
-insert_modules() {
-       for m in $*; do
-               if [ -f /etc/modules.d/$m ]; then
-                       sed 's/^[^#]/insmod &/' /etc/modules.d/$m | ash 2>&- || :
-               else
-                       modprobe $m
-               fi
-       done
-}
-
 default_prerm() {
        local root="${IPKG_INSTROOT}"
-       local name
+       local pkgname="$(basename ${1%.*})"
+       local ret=0
 
-       name=$(basename ${1%.*})
-       [ -f "$root/usr/lib/opkg/info/${name}.prerm-pkg" ] && . "$root/usr/lib/opkg/info/${name}.prerm-pkg"
+       if [ -f "$root/usr/lib/opkg/info/${pkgname}.prerm-pkg" ]; then
+               ( . "$root/usr/lib/opkg/info/${pkgname}.prerm-pkg" )
+               ret=$?
+       fi
 
        local shell="$(which bash)"
-       for i in `cat "$root/usr/lib/opkg/info/${name}.list" | grep "^/etc/init.d/"`; do
+       for i in $(grep -s "^/etc/init.d/" "$root/usr/lib/opkg/info/${pkgname}.list"); do
                if [ -n "$root" ]; then
                        ${shell:-/bin/sh} "$root/etc/rc.common" "$root$i" disable
                else
                        if [ "$PKG_UPGRADE" != "1" ]; then
                                "$i" disable
                        fi
-                       "$i" stop || /bin/true
+                       "$i" stop
                fi
        done
+
+       return $ret
 }
 
 add_group_and_user() {
@@ -202,7 +194,7 @@ add_group_and_user() {
                        if [ -n "$gname" ] && [ -n "$gid" ]; then
                                group_exists "$gname" || group_add "$gname" "$gid"
                        elif [ -n "$gname" ]; then
-                               group_add_next "$gname"; gid=$?
+                               gid="$(group_add_next "$gname")"
                        fi
 
                        if [ -n "$uname" ]; then
@@ -221,6 +213,7 @@ add_group_and_user() {
 default_postinst() {
        local root="${IPKG_INSTROOT}"
        local pkgname="$(basename ${1%.*})"
+       local filelist="/usr/lib/opkg/info/${pkgname}.list"
        local ret=0
 
        add_group_and_user "${pkgname}"
@@ -235,24 +228,29 @@ default_postinst() {
                rm -fR $root/rootfs-overlay/
        fi
 
-       if [ -z "$root" ] && grep -q -s "^/etc/modules.d/" "/usr/lib/opkg/info/${pkgname}.list"; then
-               kmodloader
-       fi
+       if [ -z "$root" ]; then
+               if grep -m1 -q -s "^/etc/modules.d/" "$filelist"; then
+                       kmodloader
+               fi
 
-       if [ -z "$root" ] && grep -q -s "^/etc/uci-defaults/" "/usr/lib/opkg/info/${pkgname}.list"; then
-               . /lib/functions/system.sh
-               [ -d /tmp/.uci ] || mkdir -p /tmp/.uci
-               for i in $(sed -ne 's!^/etc/uci-defaults/!!p' "/usr/lib/opkg/info/${pkgname}.list"); do (
-                       cd /etc/uci-defaults
-                       [ -f "$i" ] && . ./"$i" && rm -f "$i"
-               ) done
-               uci commit
-       fi
+               if grep -m1 -q -s "^/etc/sysctl.d/" "$filelist"; then
+                       /etc/init.d/sysctl restart
+               fi
 
-       [ -n "$root" ] || rm -f /tmp/luci-indexcache 2>/dev/null
+               if grep -m1 -q -s "^/etc/uci-defaults/" "$filelist"; then
+                       . /lib/functions/system.sh
+                       [ -d /tmp/.uci ] || mkdir -p /tmp/.uci
+                       for i in $(grep -s "^/etc/uci-defaults/" "$filelist"); do
+                               ( [ -f "$i" ] && cd "$(dirname $i)" && . "$i" ) && rm -f "$i"
+                       done
+                       uci commit
+               fi
+
+               rm -f /tmp/luci-indexcache
+       fi
 
        local shell="$(which bash)"
-       for i in $(grep -s "^/etc/init.d/" "$root/usr/lib/opkg/info/${pkgname}.list"); do
+       for i in $(grep -s "^/etc/init.d/" "$root$filelist"); do
                if [ -n "$root" ]; then
                        ${shell:-/bin/sh} "$root/etc/rc.common" "$root$i" enable
                else
@@ -296,9 +294,7 @@ group_add() {
        [ -f "${IPKG_INSTROOT}/etc/group" ] || return 1
        [ -n "$IPKG_INSTROOT" ] || lock /var/lock/group
        echo "${name}:x:${gid}:" >> ${IPKG_INSTROOT}/etc/group
-       rc=$?
        [ -n "$IPKG_INSTROOT" ] || lock -u /var/lock/group
-       return $rc
 }
 
 group_exists() {
@@ -308,14 +304,17 @@ group_exists() {
 group_add_next() {
        local gid gids
        gid=$(grep -s "^${1}:" ${IPKG_INSTROOT}/etc/group | cut -d: -f3)
-       [ -n "$gid" ] && return $gid
+       if [ -n "$gid" ]; then
+               echo $gid
+               return
+       fi
        gids=$(cat ${IPKG_INSTROOT}/etc/group | cut -d: -f3)
        gid=65536
        while [ -n "$(echo "$gids" | grep "^$gid$")" ] ; do
                gid=$((gid + 1))
        done
        group_add $1 $gid
-       return $gid
+       echo $gid
 }
 
 group_add_user() {
@@ -348,9 +347,7 @@ user_add() {
        [ -n "$IPKG_INSTROOT" ] || lock /var/lock/passwd
        echo "${name}:x:${uid}:${gid}:${desc}:${home}:${shell}" >> ${IPKG_INSTROOT}/etc/passwd
        echo "${name}:x:0:0:99999:7:::" >> ${IPKG_INSTROOT}/etc/shadow
-       rc=$?
        [ -n "$IPKG_INSTROOT" ] || lock -u /var/lock/passwd
-       return $rc
 }
 
 user_exists() {