xref: /dragonfly/etc/rc.d/virecover (revision 743230ab)
1#!/bin/sh
2#
3# $NetBSD: virecover,v 1.6 2002/03/22 04:34:00 thorpej Exp $
4# $FreeBSD: src/etc/rc.d/virecover,v 1.5 2003/05/05 09:53:32 mtm Exp $
5# $DragonFly: src/etc/rc.d/virecover,v 1.2 2004/01/27 00:55:43 rob Exp $
6#
7
8# PROVIDE: virecover
9# REQUIRE: mountcritremote ldconfig
10# BEFORE:  DAEMON
11# KEYWORD: DragonFly
12#
13# XXX: should require `mail'!
14
15. /etc/rc.subr
16
17name="virecover"
18stop_cmd=":"
19start_cmd="virecover_start"
20
21virecover_start()
22{
23	[ -d /var/tmp/vi.recover ] || return
24	find /var/tmp/vi.recover ! -type f -a ! -type d -delete
25	vibackup=`echo /var/tmp/vi.recover/vi.*`
26	if [ "${vibackup}" != '/var/tmp/vi.recover/vi.*' ]; then
27		echo -n 'Recovering vi editor sessions:'
28		for i in /var/tmp/vi.recover/vi.*; do
29			# Only test files that are readable.
30			if [ ! -r "${i}" ]; then
31				continue
32			fi
33
34			# Unmodified nvi editor backup files either have the
35			# execute bit set or are zero length.  Delete them.
36			if [ -x "${i}" -o ! -s "${i}" ]; then
37				rm -f "${i}"
38			fi
39		done
40
41		# It is possible to get incomplete recovery files, if the editor
42		# crashes at the right time.
43		virecovery=`echo /var/tmp/vi.recover/recover.*`
44		if [ "${virecovery}" != "/var/tmp/vi.recover/recover.*" ]; then
45			for i in /var/tmp/vi.recover/recover.*; do
46				# Only test files that are readable.
47				if [ ! -r "${i}" ]; then
48					continue
49				fi
50
51				# Delete any recovery files that are zero length,
52				# corrupted, or that have no corresponding backup file.
53				# Else send mail to the user.
54				recfile=`awk '/^X-vi-recover-path:/{print $2}' < "${i}"`
55				if [ -n "${recfile}" -a -s "${recfile}" ]; then
56					sendmail -t < "${i}"
57				else
58					rm -f "${i}"
59				fi
60			done
61		fi
62		echo '.'
63	fi
64}
65
66load_rc_config $name
67run_rc_command "$1"
68