#! /bin/sh
### BEGIN INIT INFO
# Provides:          checkfs
# Required-Start:    modutils checkroot
# Required-Stop:
# Should-Start:      lvm cryptdisks
# Should-Stop:
# Default-Start:     S
# Default-Stop:
# Short-Description: Forces fsck on AC or battery power, but does not stop regular boot if fsck finds errors.
### END INIT INFO

# Include /usr/bin in path to find on_ac_power if /usr/ is on the root
# partition.
PATH=/sbin:/bin:/usr/bin
FSCK_LOGFILE=/var/log/fsck/checkfs
[ "$FSCKFIX" ] || FSCKFIX=no
. /lib/init/vars.sh

. /lib/lsb/init-functions

do_start () {
	# See if we're on AC Power.  If not, we're not gonna run our
	# check.  If on_ac_power (in /usr/) is unavailable, behave as
	# before and check all file systems needing it.

	#MJM 11/10/07 deleted check to see if AC power is on to remove restart associated with fsck

	if which on_ac_power >/dev/null 2>&1
	then
		on_ac_power >/dev/null 2>&1
		if [ $? -eq 1 ]
		then
			[ "$VERBOSE" = no ] || log_success_msg "Robotic automation setup, skipping file system check,battery power in use."
			BAT=yes
		else 
			[ "$VERBOSE" = no ] || log_success_msg "Robotic automation setup, skipping file system check, AC power in use."
		fi
	fi

	#
	#Checking file systems.
	#

	if [ ! -f /fastboot ] && [ "$FSCKTYPES" != "none" ]
	then
		if [ -f /forcefsck ]
		then
			force="-f"
		else
			force=""
		fi

		if [ "$FSCKTYPES" = yes ] 
		then
			fix="-y"
		else
			fix="-a"
		fi

		spinner="-C"
		case "$TERM" in
		  dumb|network|unknown|"")
			spinner=""
			;;
		esac
		[ "$(uname -m)" = s390 ] && spinner="" #this should go away 
		FSCKTYPES_OPT=""
		[ "$FSCKTYPES" ] && FSCKTYPES_OPT="-t $FSCKTYPES"

		handle_failed_fsck() {
			log_failure_msg "File system check failed. 
A log is being saved in ${FSCK_LOGFILE} if that location is writable. 
Please repair the file system manually."
			log_warning_msg "System will continue to boot in 5 seconds."
			sleep 5
		}


		log_action_begin_msg "Checking file systems"
		logsave -s $FSCK_LOGFILE fsck $spinner -R -A $fix $force $FSCKTYPES_OPT
		FSCKCODE=$?

		if [ "$FSCKCODE" -gt 1 ]
		then
			log_action_end_msg 1 "code $FSCKCODE"
			handle_failed_fsck
		else
			log_action_end_msg 0
		fi
	fi

	rm -f /fastboot /forcefsck
}

case "$1" in
  start|"")
	do_start
	;;
  restart|reload|force-reload)
	echo "Error: argument '$1' not supported" >&2
	exit 3
	;;
  stop)
	# No-op
	;;
  *)
	echo "Usage: checkfs.sh [start|stop]" >&2
	exit 3
	;;
esac

:

