FreeBSD-5.3/etc/rc.d/virecover

#!/bin/sh
#
# $NetBSD: virecover,v 1.6 2002/03/22 04:34:00 thorpej Exp $
# $FreeBSD: src/etc/rc.d/virecover,v 1.8.2.1 2004/10/10 09:50:54 mtm Exp $
#

# PROVIDE: virecover
# REQUIRE: mountcritremote ldconfig
# BEFORE:  DAEMON
#
# XXX: should require `mail'!

. /etc/rc.subr

name="virecover"
rcvar="`set_rcvar`"
stop_cmd=":"
start_cmd="virecover_start"

virecover_start()
{
	[ -d /var/tmp/vi.recover ] || return
	find /var/tmp/vi.recover ! -type f -a ! -type d -delete
	vibackup=`echo /var/tmp/vi.recover/vi.*`
	if [ "${vibackup}" != '/var/tmp/vi.recover/vi.*' ]; then
		echo -n 'Recovering vi editor sessions:'
		for i in /var/tmp/vi.recover/vi.*; do
			# Only test files that are readable.
			if [ ! -r "${i}" ]; then
				continue
			fi

			# Unmodified nvi editor backup files either have the
			# execute bit set or are zero length.  Delete them.
			if [ -x "${i}" -o ! -s "${i}" ]; then
				rm -f "${i}"
			fi
		done

		# It is possible to get incomplete recovery files, if the editor
		# crashes at the right time.
		virecovery=`echo /var/tmp/vi.recover/recover.*`
		if [ "${virecovery}" != "/var/tmp/vi.recover/recover.*" ]; then
			for i in /var/tmp/vi.recover/recover.*; do
				# Only test files that are readable.
				if [ ! -r "${i}" ]; then
					continue
				fi

				# Delete any recovery files that are zero length,
				# corrupted, or that have no corresponding backup file.
				# Else send mail to the user.
				recfile=`awk '/^X-vi-recover-path:/{print $2}' < "${i}"`
				if [ -n "${recfile}" -a -s "${recfile}" ]; then
					sendmail -t < "${i}"
				else
					rm -f "${i}"
				fi
			done
		fi
		echo '.'
	fi
}

load_rc_config $name
run_rc_command "$1"