Message ID | 20090801080156.GE2701@salstar.sk (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 01.08.2009, at 10:01, Ján ONDREJ (SAL) wrote: > On Sat, Aug 01, 2009 at 09:04:55AM +0200, Ján ONDREJ (SAL) wrote: >> On Fri, Jul 31, 2009 at 09:55:39PM +0200, Alexander Graf wrote: >>> >>> On 31.07.2009, at 20:19, Glauber Costa <glommer@redhat.com> wrote: >>> >>>> cp "$1" "$2" >>>> +sum=$(echo "obase=8; $sum" | bc) >>>> printf "\\$sum" | dd of="$2" bs=1 count=1 seek=$size conv=notrunc >>>> 2>/ >>>> dev/null >> >> May be it's better to use awk: >> >> echo $sum | awk '{ printf("%c", $1) }' \ >> | dd of="$2" bs=1 count=1 seek=$size conv=notrunc 2>/dev/null >> >> This version accepts decimal $sum, does not need conversion to octal. > > Ane may be it's better to write whole checksum in awk, it's faster and > cleaner. See attached patch (I am sorry, I don't know how to use git- > email). My awk magic is pretty bad, but I think this version is missing the padding, right? Alex -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Sat, Aug 01, 2009 at 10:19:20AM +0200, Alexander Graf wrote: > > On 01.08.2009, at 10:01, Ján ONDREJ (SAL) wrote: > >> On Sat, Aug 01, 2009 at 09:04:55AM +0200, Ján ONDREJ (SAL) wrote: >>> On Fri, Jul 31, 2009 at 09:55:39PM +0200, Alexander Graf wrote: >>>> >>>> On 31.07.2009, at 20:19, Glauber Costa <glommer@redhat.com> wrote: >>>> >>>>> cp "$1" "$2" >>>>> +sum=$(echo "obase=8; $sum" | bc) >>>>> printf "\\$sum" | dd of="$2" bs=1 count=1 seek=$size conv=notrunc >>>>> 2>/ >>>>> dev/null >>> >>> May be it's better to use awk: >>> >>> echo $sum | awk '{ printf("%c", $1) }' \ >>> | dd of="$2" bs=1 count=1 seek=$size conv=notrunc 2>/dev/null >>> >>> This version accepts decimal $sum, does not need conversion to octal. >> >> Ane may be it's better to write whole checksum in awk, it's faster and >> cleaner. See attached patch (I am sorry, I don't know how to use git- >> email). > > My awk magic is pretty bad, but I think this version is missing the > padding, right? Right. If you prefer this version agains Paolos double printf, I can update it, if not, just use Pauols solution. SAL -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/pc-bios/optionrom/signrom.sh b/pc-bios/optionrom/signrom.sh index 4273d1f..065b6a9 100755 --- a/pc-bios/optionrom/signrom.sh +++ b/pc-bios/optionrom/signrom.sh @@ -18,28 +18,31 @@ # # Copyright Novell Inc, 2009 # Authors: Alexander Graf <agraf@suse.de> +# Jan Ondrej (SAL) <ondrejj(at)salstar.sk> # # Syntax: signrom.sh <input> <output> # did we get proper arguments? test "$1" -a "$2" || exit 1 -sum=0 - -# find out the file size -x=`dd if="$1" bs=1 count=1 skip=2 2>/dev/null | od -t u1 -A n` -#size=`expr $x \* 512 - 1` -size=$(( $x * 512 - 1 )) - -# now get the checksum -for i in `od -A n -t u1 -v "$1"`; do - # add each byte's value to sum - sum=$(( $sum + $i )) -done - -sum=$(( $sum % 256 )) -sum=$(( 256 - $sum )) - -# and write the output file -cp "$1" "$2" -printf "\\$sum" | dd of="$2" bs=1 count=1 seek=$size conv=notrunc 2>/dev/null +od -A n -t u1 -v "$1" | awk ' + BEGIN { + checksum=0 + # last byte will be replaced by checksum + last=-1 + } + { + # go over all record in row + for(i=1; i<=NF; i++) { + checksum+=$i + if (last>=0) { + printf "%c", last + } + last=$i + } + } + END { + # compute checksum + printf "%c", 256-(checksum%256) + } +' > $2