file="$1"
needle="$2"
- pos="$3"
perl -e '
undef $/;
- $i = index(<>, "'"$needle"'", '"$pos"');
- if ($i < 0) {
- exit 1;
- };
- print $i,"\n"' < "$file"
+ $i = 0; $k=<>;
+ while (($i = index($k, "'"$needle"'", $i)) >= 0) {
+ print $i++,"\n";
+ }; ' < "$file"
}
get_avail() {
# DSA uses kernel versions of the form 2.6.29.3-dsa-dl380-oldxeon, where
# Debian uses versions of the form 2.6.29-2-amd64
if [ "${kervers#3}" != "$kervers" ]; then
- metavers=$(echo $kervers | sed -r -e 's/^3\.[0-9].[0-9]+-[A-Za-z0-9\.]+-(.*)/\1/')
+ metavers=$(echo $kervers | sed -r -e 's/^3\.[0-9]+(\.[0-9])?+-[A-Za-z0-9\.]+-(.*)/\2/')
elif [ "${kervers//dsa}" != "$kervers" ]; then
metavers=$(echo $kervers | sed -r -e 's/^2\.(4|6)\.[0-9]+([\.0-9]+?)-(.*)/2.\1-\3/')
else
header="$2"
filter="$3"
hdroff="$4"
- nextoff=0
-
- while : ; do
- off=`get_offset "$image" $header $nextoff`
- local ret="$?"
- if [ "$ret" != 0 ]; then
- # not found, exit
- return 1
- fi
+ get_offset "$image" $header | head -n 5 | while read off; do
(if [ "$off" != 0 ]; then
dd ibs="$((off+hdroff))" skip=1 count=0
fi &&
dd bs=512k) < "$image" 2>/dev/null | $filter 2>/dev/null
- nextoff=$((off + 1))
done
- return 0
}
get_image_linux() {
local r="$(uname -r)"
local v="$(uname -v| sed -e 's/^#[0-9]*/&:/')"
- local q='@\(#\)FreeBSD '"$r $v"
+ local q='@(#)FreeBSD '"$r $v"
- if zcat "$imagefile" | $STRINGS | egrep -q "$q"; then
+ if zcat "$imagefile" | $STRINGS | grep -F -q "$q"; then
echo "OK"
else
echo "not OK"