Message ID | 20200324172757.1173824-3-mreitz@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | qemu-img: Fix check's leak/corruption fix report | expand |
On 3/24/20 12:27 PM, Max Reitz wrote: > Similarly to peek_file_[bl]e, we may want to write binary integers into > a file. Currently, this often means messing around with poke_file and > raw binary strings. I hope these functions make it a bit more > comfortable. > > Signed-off-by: Max Reitz <mreitz@redhat.com> > Code-suggested-by: Eric Blake <eblake@redhat.com> > --- > tests/qemu-iotests/common.rc | 24 ++++++++++++++++++++++++ > 1 file changed, 24 insertions(+) > > diff --git a/tests/qemu-iotests/common.rc b/tests/qemu-iotests/common.rc > index 4c246c0450..bf3b9fdea0 100644 > --- a/tests/qemu-iotests/common.rc > +++ b/tests/qemu-iotests/common.rc > @@ -53,6 +53,30 @@ poke_file() > printf "$3" | dd "of=$1" bs=1 "seek=$2" conv=notrunc &>/dev/null > } > > +# poke_file_le $img_filename $offset $byte_width $value > +# Example: poke_file_le "$TEST_IMG" 512 2 65534 > +poke_file_le() Yep, that's nicer. > +{ > + local img=$1 ofs=$2 len=$3 val=$4 str='' > + > + while ((len--)); do > + str+=$(printf '\\x%02x' $((val & 0xff))) > + val=$((val >> 8)) > + done > + > + poke_file "$img" "$ofs" "$str" > +} and so is that (but I'm biased, here :) Reviewed-by: Eric Blake <eblake@redhat.com>
diff --git a/tests/qemu-iotests/common.rc b/tests/qemu-iotests/common.rc index 4c246c0450..bf3b9fdea0 100644 --- a/tests/qemu-iotests/common.rc +++ b/tests/qemu-iotests/common.rc @@ -53,6 +53,30 @@ poke_file() printf "$3" | dd "of=$1" bs=1 "seek=$2" conv=notrunc &>/dev/null } +# poke_file_le $img_filename $offset $byte_width $value +# Example: poke_file_le "$TEST_IMG" 512 2 65534 +poke_file_le() +{ + local img=$1 ofs=$2 len=$3 val=$4 str='' + + while ((len--)); do + str+=$(printf '\\x%02x' $((val & 0xff))) + val=$((val >> 8)) + done + + poke_file "$img" "$ofs" "$str" +} + +# poke_file_be $img_filename $offset $byte_width $value +# Example: poke_file_be "$TEST_IMG" 512 2 65279 +poke_file_be() +{ + local img=$1 ofs=$2 len=$3 val=$4 + local str=$(printf "%0$((len * 2))x\n" $val | sed 's/\(..\)/\\x\1/g') + + poke_file "$img" "$ofs" "$str" +} + # peek_file_le 'test.img' 512 2 => 65534 peek_file_le() {
Similarly to peek_file_[bl]e, we may want to write binary integers into a file. Currently, this often means messing around with poke_file and raw binary strings. I hope these functions make it a bit more comfortable. Signed-off-by: Max Reitz <mreitz@redhat.com> Code-suggested-by: Eric Blake <eblake@redhat.com> --- tests/qemu-iotests/common.rc | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+)