#!/bin/bash

#
# Copyright (C) 2007 Karel Zak <kzak@redhat.com>
#
# This file is part of util-linux-ng.
#
# 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="$(dirname $0)/../.."
TS_DESC="fsck endianness"

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

set -o pipefail

($TS_CMD_FSCKCRAMFS -x TEST_X_FLAG 2>&1 || true) \
	| grep -q "compiled without -x support" && ts_skip "fsck: compiled without -x support"

IMAGE_LITTLE="$TS_SELF/cramfs-little.img"	#Known good little endian image
IMAGE_BIG="$TS_SELF/cramfs-big.img"		#Known good big endian image

IMAGE_CREATED="$TS_OUTDIR/${TS_TESTNAME}-cramfs.img"	#Image created during the test and compared against the known images.
IMAGE_DATA="$TS_OUTDIR/${TS_TESTNAME}-data"

test_image() {
	local FROM_ENDIANNESS="$1"; shift
	local TO_ENDIANNESS="$1"; shift
	local FROM_IMAGE="$1"; shift

	rm -rf "$IMAGE_DATA"
	ts_log "extract from $FROM_ENDIANNESS endian"
	$TS_CMD_FSCKCRAMFS -v -x $IMAGE_DATA $FROM_IMAGE | head -n1 | cut -d" " -f4 2>&1 >> $TS_OUTPUT

	ts_log "create $TO_ENDIANNESS endian"
	$TS_CMD_MKCRAMFS -N "$TO_ENDIANNESS" "$IMAGE_DATA" "$IMAGE_CREATED" 2>&1 >> $TS_OUTPUT

	md5sum $IMAGE_CREATED | cut -d" " -f1 >> $TS_OUTPUT

	rm "$IMAGE_CREATED"
}

test_image "little" "big" "$IMAGE_LITTLE"
test_image "big" "little" "$IMAGE_BIG"

ts_finalize

