-# int KV_to_int(string)
-#
-# Convert a string type kernel version (2.4.0) to an int (132096)
-# for easy compairing or versions ...
-#
-KV_to_int() {
- [ -z "$1" ] && return 1
-
- local KV_MAJOR="$(KV_major "$1")"
- local KV_MINOR="$(KV_minor "$1")"
- local KV_MICRO="$(KV_micro "$1")"
- local KV_int=$(( KV_MAJOR * 65536 + KV_MINOR * 256 + KV_MICRO ))
-
- # We make version 2.2.0 the minimum version we will handle as
- # a sanity check ... if its less, we fail ...
- if [ "${KV_int}" -ge 131584 ] ; then
- echo "${KV_int}"
- return 0
- fi
-
- return 1
-}
-
-# int get_KV()
-#
-# Return the kernel version (major, minor and micro concated) as an integer.
-# Assumes X and Y of X.Y.Z are numbers. Also assumes that some leading
-# portion of Z is a number.
-# e.g. 2.4.25, 2.6.10, 2.6.4-rc3, 2.2.40-poop, 2.0.15+foo
-#
-get_KV() {
- local KV="$(uname -r)"
-
- echo "$(KV_to_int "${KV}")"
-
- return $?
-}
-
-# bool get_bootparam(param)
-#
-# return 0 if gentoo=param was passed to the kernel
-#
-# EXAMPLE: if get_bootparam "nodevfs" ; then ....
-#
-get_bootparam() {
- local x copt params retval=1
-
- [ ! -r "/proc/cmdline" ] && return 1
-
- for copt in $(< /proc/cmdline)
- do
- if [ "${copt%=*}" = "gentoo" ]
- then
- params="$(gawk -v PARAMS="${copt##*=}" '
- BEGIN {
- split(PARAMS, nodes, ",")
- for (x in nodes)
- print nodes[x]
- }')"
-
- # Parse gentoo option
- for x in ${params}
- do
- if [ "${x}" = "$1" ]
- then
-# echo "YES"
- retval=0
- fi
- done
- fi
- done
-
- return ${retval}
-}
-
-# Safer way to list the contents of a directory,
-# as it do not have the "empty dir bug".
-#
-# char *dolisting(param)
-#
-# print a list of the directory contents
-#
-# NOTE: quote the params if they contain globs.
-# also, error checking is not that extensive ...
-#
-dolisting() {
- local x=
- local y=
- local tmpstr=
- local mylist=
- local mypath="$*"
-
- if [ "${mypath%/\*}" != "${mypath}" ]
- then
- mypath="${mypath%/\*}"
- fi
-
- for x in ${mypath}
- do
- [ ! -e "${x}" ] && continue
-
- if [ ! -d "${x}" ] && ( [ -L "${x}" -o -f "${x}" ] )
- then
- mylist="${mylist} $(ls "${x}" 2> /dev/null)"
- else
- [ "${x%/}" != "${x}" ] && x="${x%/}"
-
- cd "${x}"; tmpstr="$(ls)"
-
- for y in ${tmpstr}
- do
- mylist="${mylist} ${x}/${y}"
- done
- fi
- done
-
- echo "${mylist}"
-}
-
-# char *add_suffix(char * configfile)
-#
-# Returns a config file name with the softlevel suffix
-# appended to it. For use with multi-config services.
-add_suffix() {
- if [ "${RC_USE_CONFIG_PROFILE}" = "yes" -a -e "$1.${DEFAULTLEVEL}" ]
- then
- echo "$1.${DEFAULTLEVEL}"
- else
- echo "$1"
- fi
-
- return 0
-}
-
-# Network filesystems list for common use in rc-scripts.
-# This variable is used in is_net_fs and other places such as
-# localmount.
-NET_FS_LIST="afs cifs coda gfs ncpfs nfs nfs4 shfs smbfs"
-
-# bool is_net_fs(path)
-#
-# return 0 if path is the mountpoint of a networked filesystem
-#
-# EXAMPLE: if is_net_fs / ; then ...
-#
-is_net_fs() {
- local fstype
- # /proc/mounts is always accurate but may not always be available
- if [ -e /proc/mounts ]; then
- fstype="$( sed -n -e '/^rootfs/!s:.* '"$1"' \([^ ]*\).*:\1:p' /proc/mounts )"
- else
- fstype="$( mount | sed -n -e 's:.* on '"$1"' type \([^ ]*\).*:\1:p' )"
- fi
- case " ${NET_FS_LIST} " in
- *" ${fstype} "*)
- return 0
- ;;
- *)
- return 1
- ;;
- esac
-}
-
-# bool is_uml_sys()
-#
-# return 0 if the currently running system is User Mode Linux
-#
-# EXAMPLE: if is_uml_sys ; then ...
-#
-is_uml_sys() {
- grep -qs 'UML' /proc/cpuinfo
- return $?
-}
-
-# bool is_vserver_sys()
-#
-# return 0 if the currently running system is a Linux VServer
-#
-# EXAMPLE: if is_vserver_sys ; then ...
-#
-is_vserver_sys() {
- grep -qs '^s_context:[[:space:]]*[1-9]' /proc/self/status
- return $?
-}
-
-# bool get_mount_fstab(path)
-#
-# return the parameters to pass to the mount command generated from fstab
-#
-# EXAMPLE: cmd=$( get_mount_fstab /proc )
-# cmd=${cmd:--t proc none /proc}
-# mount -n ${cmd}
-#
-get_mount_fstab() {
- awk '$1 ~ "^#" { next }
- $2 == "'$*'" { if (found++ == 0) { print "-t "$3,"-o "$4,$1,$2 } }
- END { if (found > 1) { print "More than one entry for '$*' found in /etc/fstab!" > "/dev/stderr" } }
- ' /etc/fstab
-}
-
-# char *reverse_list(list)
-#
-# Returns the reversed order of list
-#
-reverse_list() {
- local ret
- ret=''
- while [ "$#" -gt 0 ] ; do
- if [ -z "${ret}" ] ; then
- ret="$1"
- else
- ret="$1 ${ret}"
- fi
- shift
- done
- printf '%s' "${ret}"
-}
-
-
-# bool is_older_than(reference, files/dirs to check)
-#
-# return 0 if any of the files/dirs are newer than
-# the reference file
-#
-# EXAMPLE: if is_older_than a.out *.o ; then ...
-is_older_than() {
- local x=
- local ref="$1"
- shift
-
- for x in "$@" ; do
- [ "${x}" -nt "${ref}" ] && return 0
-
- if [ -d "${x}" ] ; then
- is_older_than "${ref}" "${x}"/* && return 0
- fi
- done
-
- return 1
-}
-
-if [ -z "${EBUILD}" ] ; then
- # Setup a basic $PATH. Just add system default to existing.
- # This should solve both /sbin and /usr/sbin not present when
- # doing 'su -c foo', or for something like: PATH= rcscript start
- PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/sbin:${PATH}"
-
- if [ "$(/sbin/consoletype 2> /dev/null)" = "serial" ] ; then
- # We do not want colors/endcols on serial terminals
- RC_NOCOLOR="yes"
- RC_ENDCOL="no"
- fi
-
- for arg in "$@" ; do
- case "${arg}" in
- # Lastly check if the user disabled it with --nocolor argument
- --nocolor|-nc)
- RC_NOCOLOR="yes"
- ;;
- esac
- done
-
-else
- # Should we use colors ?
- case "$*" in
- *depend*)
- # Check user pref in portage
- RC_NOCOLOR="$(portageq envvar NOCOLOR 2>/dev/null)"
- [ "${RC_NOCOLOR}" = "true" ] && RC_NOCOLOR="yes"
- ;;
- *)
- # We do not want colors during emerge depend
- RC_NOCOLOR="yes"
- # No output is seen during emerge depend, so this is not needed.
- RC_ENDCOL="no"
- ;;
- esac
-fi
-
-COLS=0
-
-case "$*" in
- *depend*)
- # We do not want stty to run during emerge depend
- [ -n "${EBUILD}" ] && COLS=80
-esac
-
-# Setup COLS and ENDCOL so eend can line up the [ ok ]
-# width of [ ok ] == 7
-if [ "${COLS}" -eq 0 ] ; then
- COLS="$(stty size 2>/dev/null | cut -d' ' -f2)"
- if [ -z "${COLS}" ] || [ "${COLS}" -le 0 ] ; then
- COLS=80
- fi
-fi
-
-if [ "${RC_ENDCOL}" = "yes" ]; then
- ENDCOL="\e[A\e[$(( ${COLS} - 8 ))G"
-else
- ENDCOL=''
-fi
-
-# Setup the colors so our messages all look pretty
-if [ "${RC_NOCOLOR}" = "yes" ]; then
- unset GOOD WARN BAD NORMAL HILITE BRACKET
-else
- GOOD='\e[32;01m'
- WARN='\e[33;01m'
- BAD='\e[31;01m'
- NORMAL='\e[0m'
- HILITE='\e[36;01m'
- BRACKET='\e[34;01m'
-fi
-
-# vim:ts=4
-# }}}