xref: /freebsd/contrib/nvi/files/recover.in (revision cfd6422a5217410fbd66f7a7a8a64d9d85e61229)
1#!/bin/sh
2#
3# Script to recover nvi edit sessions.
4
5RECDIR="@vi_cv_path_preserve@"
6
7[ -d ${RECDIR} ] || exit 1
8find ${RECDIR} ! -type f -a ! -type d -delete
9
10# Check editor backup files.
11vibackup=`echo ${RECDIR}/vi.*`
12if [ "${vibackup}" != '${RECDIR}/vi.*' ]; then
13	echo -n 'Recovering vi editor sessions:'
14	for i in ${RECDIR}/vi.*; do
15		# Only test files that are readable.
16		if [ ! -r "${i}" ]; then
17			continue
18		fi
19
20		# Unmodified nvi editor backup files either have the
21		# execute bit set or are zero length.  Delete them.
22		if [ -x "${i}" -o ! -s "${i}" ]; then
23			rm -f "${i}"
24		fi
25	done
26else exit
27fi
28
29# It is possible to get incomplete recovery files, if the editor crashes
30# at the right time.
31virecovery=`echo ${RECDIR}/recover.*`
32if [ "${virecovery}" != "${RECDIR}/recover.*" ]; then
33	for i in ${RECDIR}/recover.*; do
34		# Only test files that are readable.
35		if [ ! -r "${i}" ]; then
36			continue
37		fi
38
39		# Delete any recovery files that are zero length, corrupted,
40		# or that have no corresponding backup file.  Else send mail
41		# to the user.
42		recfile=`awk '/^X-vi-data: *file;/ { sub(/^.*;/, " "); \
43		    do { if (substr($0,1,1) == " ") print; else exit } \
44		    while(getline) }' < "${i}" | uudecode -mr`
45		if [ -n "${recfile}" -a -s "${recfile}" ]; then
46			sendmail -odb -t < "${i}"
47			echo -n '.'
48		else
49			rm -f "${i}"
50		fi
51	done
52fi
53echo ' done.'
54