#!/bin/sh
# extracts .config info from a [b]zImage file
# uses: binoffset (new), dd, zcat, strings, grep
# $arg1 is [b]zImage filename

binoffset="./scripts/binoffset"
test -e $binoffset || cc -o $binoffset ./scripts/binoffset.c || exit 1

IKCFG_ST="0x49 0x4b 0x43 0x46 0x47 0x5f 0x53 0x54"
IKCFG_ED="0x49 0x4b 0x43 0x46 0x47 0x5f 0x45 0x44"
dump_config() {
    file="$1"

    start=`$binoffset $file $IKCFG_ST 2>/dev/null`
    [ "$?" != "0" ] && start="-1"
    if [ "$start" -eq "-1" ]; then
	return
    fi
    end=`$binoffset $file $IKCFG_ED 2>/dev/null`

    start=`expr $start + 8`
    size=`expr $end - $start`

    dd if="$file" ibs=1 skip="$start" count="$size" 2>/dev/null | zcat

    clean_up
    exit 0
}


usage()
{
	echo "  usage: extract-ikconfig [b]zImage_filename"
}

clean_up()
{
	if [ "$TMPFILE" != "" ]; then
		rm -f $TMPFILE
	fi
}

if [ $# -lt 1 ]
then
	usage
	exit 1
fi

TMPFILE=`mktemp -t ikconfig-XXXXXX` || exit 1
image="$1"

# vmlinux: Attempt to dump the configuration from the file directly
dump_config "$image"

GZHDR1="0x1f 0x8b 0x08 0x00"
GZHDR2="0x1f 0x8b 0x08 0x08"

# vmlinux.gz: Check for a compressed images
off=`$binoffset "$image" $GZHDR1 2>/dev/null`
[ "$?" != "0" ] && off="-1"
if [ "$off" -eq "-1" ]; then
	off=`$binoffset "$image" $GZHDR2 2>/dev/null`
	[ "$?" != "0" ] && off="-1"
fi
if [ "$off" -eq "0" ]; then
	zcat <"$image" >"$TMPFILE"
	dump_config "$TMPFILE"
elif [ "$off" -ne "-1" ]; then
	(dd ibs="$off" skip=1 count=0 && dd bs=512k) <"$image" 2>/dev/null | \
		zcat >"$TMPFILE"
	dump_config "$TMPFILE"
fi

echo "ERROR: Unable to extract kernel configuration information."
echo "       This kernel image may not have the config info."

clean_up
exit 1
