dracut, dracut-functions: better vercmp

credits go to V. Lowther
master
Amadeusz Żołnowski 2010-06-11 21:10:34 +02:00 committed by Harald Hoyer
parent 5f927f201d
commit 22ecea456b
2 changed files with 21 additions and 28 deletions

2
dracut
View File

@ -184,7 +184,7 @@ abs_outfile=$(readlink -f "$outfile") && outfile="$abs_outfile"


srcmods="/lib/modules/$kernel/" srcmods="/lib/modules/$kernel/"
[[ $drivers_dir ]] && { [[ $drivers_dir ]] && {
if verlt $(modprobe --version | cut -d' ' -f3) 3.7; then if vercmp $(modprobe --version | cut -d' ' -f3) lt 3.7; then
derror 'To use --kmoddir option module-init-tools >= 3.7 is required.' derror 'To use --kmoddir option module-init-tools >= 3.7 is required.'
exit 1 exit 1
fi fi

View File

@ -24,38 +24,31 @@ IF_dynamic=""
# Generic substring function. If $2 is in $1, return 0. # Generic substring function. If $2 is in $1, return 0.
strstr() { [[ $1 =~ $2 ]]; } strstr() { [[ $1 =~ $2 ]]; }


# Version comparision function. Returns result similar to C strcmp, # Version comparision function. Assumes Linux style version scheme.
# but instead of -1 is 2. Function assumes version scheme like does # $1 = version a
# Linux kernel. # $2 = comparision op (gt, ge, eq, le, lt, ne)
# $1 < $2 -> 2 # $3 = version b
# $1 = $2 -> 0
# $1 > $2 -> 1
# To remember it easy, ask the question: Which argument is greater? ;-)
vercmp() { vercmp() {
local i n1=(${1//./ }) n2=(${2//./ }) local n1=(${1//./ }) op=$2 n2=(${3//./ }) i res


for ((i=0; ; i++)) for ((i=0; ; i++))
do do
[[ ${n1[i]} && ! ${n2[i]} ]] && return 1 if [[ ! ${n1[i]}${n2[i]} ]]; then res=0
[[ ! ${n1[i]} && ${n2[i]} ]] && return 2 elif ((${n1[i]:-0} > ${n2[i]:-0})); then res=1
[[ ${n1[i]} && ${n2[i]} ]] || return 0 elif ((${n1[i]:-0} < ${n2[i]:-0})); then res=2
((${n1[i]} > ${n2[i]})) && return 1 else continue
((${n1[i]} < ${n2[i]})) && return 2 fi
break
done done
}


# Variation of version comparision function. If $1 >= $2, return 0. case $op in
verge() { gt) ((res == 1));;
vercmp $1 $2 ge) ((res != 2));;

eq) ((res == 0));;
[[ $? = 0 || $? = 1 ]] le) ((res != 1));;
} lt) ((res == 2));;

ne) ((res != 0));;
# Variation of version comparision function. If $1 < $2, return 0. esac
verlt() {
vercmp $1 $2

[[ $? = 2 ]]
} }


# Log initrd creation. # Log initrd creation.