#!/bin/bash
#
# chkconfig: 2345 5 95
# description: Intel IA-32 Execution Layer
# processname: ia32el

# source function library
. /etc/init.d/functions

RETVAL=0

start() {
	echo -n $"Starting Intel IA-32 Execution Layer: "
	if [ ! -e /proc/sys/fs/binfmt_misc/register ]; then
		initlog $INITLOG_ARGS -c "/sbin/insmod binfmt_misc"
		initlog $INITLOG_ARGS -c "mount -t binfmt_misc none /proc/sys/fs/binfmt_misc"
		if [ ! -e /proc/sys/fs/binfmt_misc/register ]; then
			failure $"binfmt_misc could not be loaded"
			echo
			exit 1
		fi
	fi

	echo ':ia32el:M::\x7f\x45\x4c\x46\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x03\x00::/usr/lib/ia32el/libia32x.so:P' > /proc/sys/fs/binfmt_misc/register
	echo ':ia32el_so:M::\x7f\x45\x4c\x46\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x03\x00::/usr/lib/ia32el/libia32x.so:P' > /proc/sys/fs/binfmt_misc/register
	if [ -f /proc/sys/fs/binfmt_misc/ia32el -a -f /proc/sys/fs/binfmt_misc/ia32el_so ]; then
		success
		echo
		exit 0
	else
		failure $"could not register ia32el"
		[ -f /proc/sys/fs/binfmt_misc/ia32el ] && echo -1 > /proc/sys/fs/binfmt_misc/ia32el
		[ -f /proc/sys/fs/binfmt_misc/ia32el_so ] && echo -1 > /proc/sys/fs/binfmt_misc/ia32el_so
		echo
		exit 1
	fi
}

stop() {
	echo -n $"Stopping Intel IA-32 Execution Layer: "
	[ -f /proc/sys/fs/binfmt_misc/ia32el ] && echo -1 > /proc/sys/fs/binfmt_misc/ia32el
	[ -f /proc/sys/fs/binfmt_misc/ia32el_so ] && echo -1 > /proc/sys/fs/binfmt_misc/ia32el_so
	[ ! -f /proc/sys/fs/binfmt_misc/ia32el -a ! -f /proc/sys/fs/binfmt_misc/ia32el_so ] \
		&& success || failure
	echo
}

case "$1" in
  start)
	start
	;;
  stop)
	stop
	;;
  restart|reload)
	stop
	start
	RETVAL=$?
	;;
  condrestart)
	if [ -f /proc/sys/fs/binfmt_misc/ia32el -o -f /proc/sys/fs/binfmt_misc/ia32el_so ]; then
	    stop
	    start
	    RETVAL=$?
	fi
	;;
  status)
	/usr/lib/ia32el/is_ia32el 2>/dev/null
	RETVAL=$?
	case "$RETVAL" in
	0) echo $"Intel IA-32 Execution Layer in use";;
	1) echo $"Kernel IA-32 compatibility";;
	*) echo $"No IA-32 Support";;
	esac
	;;
  *)
	echo $"Usage: $0 {start|stop|restart|condrestart|status}"
	exit 1
esac

exit $RETVAL
