I prefer this diff instead.

 - todd

Index: usr.bin/vi/common/exf.c
===================================================================
RCS file: /cvs/src/usr.bin/vi/common/exf.c,v
retrieving revision 1.36
diff -u -p -u -r1.36 exf.c
--- usr.bin/vi/common/exf.c     24 Apr 2015 21:48:31 -0000      1.36
+++ usr.bin/vi/common/exf.c     7 Jul 2015 15:53:28 -0000
@@ -185,7 +185,8 @@ file_init(SCR *sp, FREF *frp, char *rcv_
                (void)snprintf(tname, sizeof(tname),
                    "%s/vi.XXXXXXXXXX", O_STR(sp, O_TMP_DIRECTORY));
                fd = mkstemp(tname);
-               if (fd == -1 || fchmod(fd, S_IRUSR | S_IWUSR) == -1) {
+               if (fd == -1 || fstat(fd, &sb) == -1 ||
+                   fchmod(fd, S_IRUSR | S_IWUSR) == -1) {
                        msgq(sp, M_SYSERR,
                            "237|Unable to create temporary file");
                        if (fd != -1) {
@@ -210,8 +211,6 @@ file_init(SCR *sp, FREF *frp, char *rcv_
                psize = 1024;
                if (!LF_ISSET(FS_OPENERR))
                        F_SET(frp, FR_NEWFILE);
-
-               (void)clock_gettime(CLOCK_REALTIME, &ep->mtim);
        } else {
                /*
                 * XXX
@@ -226,16 +225,17 @@ file_init(SCR *sp, FREF *frp, char *rcv_
                        psize = 1;
                psize *= 1024;
 
-               F_SET(ep, F_DEVSET);
-               ep->mdev = sb.st_dev;
-               ep->minode = sb.st_ino;
-
-               ep->mtim = sb.st_mtim;
-
                if (!S_ISREG(sb.st_mode))
                        msgq_str(sp, M_ERR, oname,
                            "238|Warning: %s is not a regular file");
        }
+
+       /* Save device, inode and modification time. */
+       F_SET(ep, F_DEVSET);
+       ep->mdev = sb.st_dev;
+       ep->minode = sb.st_ino;
+
+       ep->mtim = sb.st_mtim;
 
        /* Set up recovery. */
        memset(&oinfo, 0, sizeof(RECNOINFO));

Reply via email to