#!/bin/bash
#
# Copyright (C) 2009 Karel Zak <kzak@redhat.com>
#
# This file is part of util-linux.
#
# This file is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This file is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
TS_TOPDIR="${0%/*}/../.."
TS_DESC="mkfs fsck"

. $TS_TOPDIR/functions.sh
ts_init "$*"

ts_check_test_command "$TS_CMD_MKMINIX"
ts_check_test_command "$TS_CMD_FSCKMINIX"

mkfs_and_fsck_minix() {
	local ret
	ts_log "#####################################"
	ts_log "$ mkfs.minix $1 image"
	$TS_CMD_MKMINIX $1 $img >> $TS_OUTPUT 2>&1
	ret=$?
	echo "return mkfs: $ret" >> $TS_OUTPUT
	test $ret = 0 || return $ret

	ts_log "$ fsck.minix -lavsf image"
	$TS_CMD_FSCKMINIX -lavsf $img >> $TS_OUTPUT 2>&1
	ret=$?
	echo "return fsck: $ret" >> $TS_OUTPUT
	return $ret
}

img=$(ts_image_init)

# TODO looping over arbitrary badblock files (-l bad) gives a lot segfaults
for ver in "" "-1" "-2" "-3"; do
for n in "" "-n 14" "-n 30" "-n 60"; do
	mkfs_and_fsck_minix "$ver $n"
done
done

rm -f $img

sed -i "s@$img@image@g" $TS_OUTPUT

ts_finalize

