#!/bin/bash
set -e

function printblocks() {
    img="$1"
    for i in `seq 0 13`; do 
	dd bs=4k count=1 skip=$i 2>/dev/null < "$img" | dd bs=1 count=1 2>/dev/null | cat -A
	echo -n " "
    done
    echo "-- $img"
}

function writeblock() {
    img="$1"
    block="$2" # 0 .. num_blocks - 1
    data="$3"
    dd bs=4k count=1 of="$img" seek="$block" conv=notrunc < "$data" 2> /dev/null
}

sudo losetup -d /dev/loop0 || true
sudo rmmod crcloop || true

make
sudo dmesg -c > /dev/null
sudo modprobe loop
sudo insmod crcloop.ko debug=2
if [ ! -d tmp ]; then
    mkdir tmp
fi
for i in `seq 1 4096`; do echo -n A; done > tmp/A
for i in `seq 1 4096`; do echo -n B; done > tmp/B
(cd tmp && cat A B A B A A B B A A A B B B > img)
sudo losetup -p 0 -e 7 /dev/loop0 tmp/img < /dev/null
sudo chmod a+rw /dev/loop0

printblocks tmp/img
printblocks /dev/loop0

writeblock tmp/img 0 tmp/B
printblocks tmp/img
printblocks /dev/loop0

writeblock /dev/loop0 0 tmp/B
printblocks tmp/img
printblocks /dev/loop0

sudo losetup -d /dev/loop0
sudo rmmod crcloop

sudo dmesg -c > tmp/log
sed 's/:[0-9]*://g' < tmp/log > tmp/log2 

diff -u test1.out tmp/log2
