This is missing:
- Moving virecover to /usr/bin
- Regen'ing autoconf
- Adding it to default ~/.profile
- Removing virecover rc script
? test
? testcase
Index: dist/common/options.c
===================================================================
RCS file: /cvsroot/src/external/bsd/nvi/dist/common/options.c,v
retrieving revision 1.5
diff -u -r1.5 options.c
--- dist/common/options.c       6 Nov 2017 03:21:13 -0000       1.5
+++ dist/common/options.c       11 Nov 2017 00:42:55 -0000
@@ -31,6 +31,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <pwd.h>
 #include <unistd.h>
 
 #include "common.h"
@@ -393,7 +394,13 @@
        OI(O_PARAGRAPHS, L("paragraphs=IPLPPPQPP LIpplpipbp"));
        (void)SPRINTF(b2, SIZE(b2), L("path=%s"), "");
        OI(O_PATH, b2);
-       (void)SPRINTF(b2, SIZE(b2), L("recdir=%s"), _PATH_PRESERVE);
+
+       if ((s = getenv("HOME")) == NULL) {
+               struct passwd *pw = getpwuid(getuid());
+               s = pw->pw_dir;
+       }
+
+       (void)SPRINTF(b2, SIZE(b2), L("recdir=%s/%s"), s, _PATH_PRESERVE);
        OI(O_RECDIR, b2);
        OI(O_SECTIONS, L("sections=NHSHH HUnhsh"));
        (void)SPRINTF(b2, SIZE(b2),
Index: dist/common/recover.c
===================================================================
RCS file: /cvsroot/src/external/bsd/nvi/dist/common/recover.c,v
retrieving revision 1.9
diff -u -r1.9 recover.c
--- dist/common/recover.c       4 Nov 2017 14:20:12 -0000       1.9
+++ dist/common/recover.c       11 Nov 2017 00:42:56 -0000
@@ -37,6 +37,7 @@
 #include <fcntl.h>
 #include <limits.h>
 #include <pwd.h>
+#include <stdbool.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -120,8 +121,36 @@
 static char    *rcv_gets(char *, size_t, int);
 static int      rcv_mailfile(SCR *, int, char *);
 static int      rcv_mktemp(SCR *, char *, const char *, int);
+static void     rcv_mkpath(char *path);
 
 /*
+ * rcv_mkpath --
+ *     Create a directory
+ */
+static void
+rcv_mkpath(char *path)
+{
+       char *slash;
+       bool done = false;
+
+       slash = path;
+
+       for (;;) {
+               slash += strspn(slash, "/");
+               slash += strcspn(slash, "/");
+
+               done = (*slash == '\0');
+               *slash = '\0';
+
+               mkdir(path, S_IRUSR | S_IWUSR | S_IXUSR);
+
+               if (done) {
+                       break;
+               }
+               *slash = '/';
+       }
+}
+/*
  * rcv_tmp --
  *     Build a file name that will be used as the recovery file.
  *
@@ -150,10 +179,14 @@
                goto err;
        dp = O_STR(sp, O_RECDIR);
        if (stat(dp, &sb)) {
-               if (errno != ENOENT || mkdir(dp, 0)) {
+               if (errno != ENOENT) {
                        msgq(sp, M_SYSERR, "%s", dp);
                        goto err;
+               } else /* ENOENT, create the directory */ {
+                       (void)snprintf(path, sizeof(path), "%s", dp);
+                       rcv_mkpath(path);
                }
+
                (void)chmod(dp, S_IRWXU | S_IRWXG | S_IRWXO | S_ISVTX);
        }
 
Index: dist/dist/configure.ac
===================================================================
RCS file: /cvsroot/src/external/bsd/nvi/dist/dist/configure.ac,v
retrieving revision 1.2
diff -u -r1.2 configure.ac
--- dist/dist/configure.ac      25 Nov 2013 23:03:18 -0000      1.2
+++ dist/dist/configure.ac      11 Nov 2017 00:42:56 -0000
@@ -169,35 +169,8 @@
 AC_PATH_PROGS(vi_cv_path_perl, perl5 perl, no)
 
 dnl Check for the "preserve" path.
-dnl Historically, nvi has used /var/tmp/vi.recover.  The Linux filesystem
-dnl standard (FSSTND) uses /var/preserve; we add the vi.recover directory
-dnl beneath it so that we don't have name collisions with other editors.
-dnl Other systems have /var/preserve as well, so we test first for an already
-dnl existing name, and then use the first one that's writeable.
-AC_SUBST(vi_cv_path_preserve)
-AC_MSG_CHECKING(for preserve directory)
-AC_CACHE_VAL(vi_cv_path_preserve, [dnl
-       dirlist="/var/preserve /var/tmp /usr/tmp"
-       vi_cv_path_preserve=no
-       for i in $dirlist; do
-               if test -d $i/vi.recover; then
-                       vi_cv_path_preserve=$i/vi.recover
-                       break;
-               fi
-       done
-       if test "$vi_cv_path_preserve" = no; then
-               for i in $dirlist; do
-                       if test -d $i -a -w $i; then
-                               vi_cv_path_preserve=$i/vi.recover
-                               break;
-                       fi
-               done
+AC_DEFINE(vi_cv_path_preserve, ".vi/recover/", [Directory in user homedir for 
recovery files])
 
-       fi])
-if test "$vi_cv_path_preserve" = no; then
-       AC_MSG_ERROR([No writeable preserve directory found.])
-fi
-AC_MSG_RESULT($vi_cv_path_preserve)
 AC_PATH_PROG(vi_cv_path_fuser, fuser, no)
 AC_PATH_PROG(vi_cv_path_lsof, lsof, no)
 AC_SUBST(INUSE)
Index: usr.bin/nvi/pathnames.h
===================================================================
RCS file: /cvsroot/src/external/bsd/nvi/usr.bin/nvi/pathnames.h,v
retrieving revision 1.1
diff -u -r1.1 pathnames.h
--- usr.bin/nvi/pathnames.h     22 Nov 2013 16:00:45 -0000      1.1
+++ usr.bin/nvi/pathnames.h     11 Nov 2017 00:42:56 -0000
@@ -21,7 +21,7 @@
 #endif
 
 #ifndef        _PATH_PRESERVE
-#define        _PATH_PRESERVE  "/var/tmp/vi.recover"
+#define        _PATH_PRESERVE  ".vi/recover/"
 #endif
 
 #ifndef _PATH_SYSV_PTY
Index: usr.bin/recover/virecover
===================================================================
RCS file: /cvsroot/src/external/bsd/nvi/usr.bin/recover/virecover,v
retrieving revision 1.4
diff -u -r1.4 virecover
--- usr.bin/recover/virecover   9 Nov 2017 15:03:01 -0000       1.4
+++ usr.bin/recover/virecover   11 Nov 2017 00:42:56 -0000
@@ -6,7 +6,7 @@
 #
 # Script to recover nvi edit sessions.
 
-RECDIR="/var/tmp/vi.recover"
+RECDIR="$HOME/.vi/recover"
 SENDMAIL="/usr/sbin/sendmail"
 
 # Check editor backup files.

Reply via email to