git: 8e6e1224184e - vendor/nvi - import nvi 2.2.0-3bbdfe4

Baptiste Daroussin bapt at FreeBSD.org
Wed May 19 11:41:16 UTC 2021


The branch vendor/nvi has been updated by bapt:

URL: https://cgit.FreeBSD.org/src/commit/?id=8e6e1224184eb6cd3dfa05b2ecd9515c59f4f425

commit 8e6e1224184eb6cd3dfa05b2ecd9515c59f4f425
Author:     Baptiste Daroussin <bapt at FreeBSD.org>
AuthorDate: 2021-05-19 11:35:56 +0000
Commit:     Baptiste Daroussin <bapt at FreeBSD.org>
CommitDate: 2021-05-19 11:35:56 +0000

    import nvi 2.2.0-3bbdfe4
---
 .gitignore           |   5 ++
 CMakeLists.txt       |  38 ++++++++++++--
 catalog/dump.c       |  12 ++---
 cl/cl.h              |   3 --
 cl/cl_read.c         |   4 +-
 cl/extern.h          |  31 -----------
 common/common.h      |   6 +--
 common/conv.h        |   2 +-
 common/exf.c         |  27 ++++++++++
 common/extern.h      | 131 ----------------------------------------------
 common/key.h         |   6 +--
 common/options.h     |   4 ++
 common/options_def.h |  84 -----------------------------
 common/recover.c     |  12 +++++
 ex/ex.c              |   3 +-
 ex/ex_cscope.c       |  14 +++++
 ex/ex_def.h          |  76 ---------------------------
 ex/extern.h          | 131 ----------------------------------------------
 ex/version.h         |   1 -
 man/vi.1             |  50 +++++++++++++-----
 vi/extern.h          | 145 ---------------------------------------------------
 vi/v_increment.c     |   4 +-
 vi/vs_line.c         |   2 +-
 23 files changed, 155 insertions(+), 636 deletions(-)

diff --git a/.gitignore b/.gitignore
index aac7860d7299..2b79229e57e0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,3 +7,8 @@ extern.h
 version.h
 tags
 build/
+
+# Ignore files by the GNU Global source code tagging system.
+/GPATH
+/GRTAGS
+/GTAGS
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 996e0e72de99..66d3ca2aafb0 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -13,20 +13,28 @@ project(nvi2 C)
 
 include(CheckIncludeFiles)
 include(CheckFunctionExists)
+include(CheckSymbolExists)
 include(CheckStructHasMember)
 include(CheckCSourceCompiles)
+include(CheckCCompilerFlag)
 
 mark_as_advanced(CMAKE_INSTALL_PREFIX)
 
 option(USE_WIDECHAR "Enable wide character support" ON)
 option(USE_ICONV "Enable iconv support" ON)
 
-add_compile_options(-fcolor-diagnostics)
+check_c_compiler_flag(-fcolor-diagnostics USE_FCOLOR_DIAGNOSTICS)
+if(USE_FCOLOR_DIAGNOSTICS)
+    add_compile_options(-fcolor-diagnostics)
+endif()
+
 add_compile_options($<$<CONFIG:Debug>:-Wall>)
 add_compile_options($<$<CONFIG:Debug>:-Wno-parentheses>)
 add_compile_options($<$<CONFIG:Debug>:-Wno-uninitialized>)
 add_compile_options($<$<CONFIG:Debug>:-Wmissing-prototypes>)
-add_compile_options($<$<CONFIG:Debug>:-Wsystem-headers>)
+if (NOT APPLE)
+    add_compile_options($<$<CONFIG:Debug>:-Wsystem-headers>)
+endif()
 add_compile_options($<$<CONFIG:Release>:-Wuninitialized>)
 add_compile_options($<$<CONFIG:Release>:-Wno-dangling-else>)
 add_compile_options(-Wstack-protector -fstack-protector)
@@ -126,6 +134,11 @@ if(NOT RESOLV_IN_LIBC)
     target_link_libraries(nvi PRIVATE ${RESOLV_LIBRARY})
 endif()
 
+check_symbol_exists(asprintf "stdio.h" ASPRINTF_IN_STDIO_H)
+if(NOT ASPRINTF_IN_STDIO_H)
+    target_compile_definitions(nvi PRIVATE _GNU_SOURCE)
+endif()
+
 if(USE_WIDECHAR)
     find_library(CURSES_LIBRARY NAMES ncursesw cursesw curses HINTS /usr/lib)
     find_library(TERMINFO_LIBRARY NAMES tinfow terminfo HINTS /usr/lib)
@@ -142,7 +155,10 @@ else()
     target_compile_options(nvi PRIVATE -Wno-pointer-sign)
 endif()
 
-target_link_libraries(nvi PRIVATE ${CURSES_LIBRARY} ${TERMINFO_LIBRARY})
+target_link_libraries(nvi PRIVATE ${CURSES_LIBRARY})
+if(TERMINFO_LIBRARY)
+    target_link_libraries(nvi PRIVATE ${TERMINFO_LIBRARY})
+endif()
 
 if(USE_ICONV)
     check_function_exists(iconv ICONV_IN_LIBC)
@@ -189,6 +205,18 @@ check_function_exists(dbopen DBOPEN_IN_LIBC)
 if(NOT DBOPEN_IN_LIBC)
     target_link_libraries(nvi PRIVATE db1)
 endif()
+if (APPLE)
+    # Avoid using an incompatible db.h installed to /usr/local (since this is
+    # part of the default search path on macOS)
+    set(DB_H_GUESS "${CMAKE_OSX_SYSROOT}/usr/include/db.h")
+    if (NOT EXISTS ${DB_H_GUESS})
+        message(FATAL_ERROR "Could not find db.h at the expected path (${DB_H_GUESS}).")
+    endif()
+    add_definitions("-DDB_H_ABS_PATH=<${DB_H_GUESS}>")
+else()
+    find_path(DB_INCLUDE_DIR db.h PATH_SUFFIXES db1)
+    target_include_directories(nvi PRIVATE ${DB_INCLUDE_DIR})
+endif()
 
 check_include_files(libutil.h HAVE_LIBUTIL_H)
 check_include_files(ncurses.h HAVE_NCURSES_H)
@@ -196,6 +224,10 @@ check_include_files(ncursesw/ncurses.h HAVE_NCURSESW_NCURSES_H)
 check_include_files(pty.h HAVE_PTY_H)
 check_include_files(term.h HAVE_TERM_H)
 check_struct_has_member("struct dirent" d_namlen dirent.h HAVE_DIRENT_D_NAMLEN LANGUAGE C)
+check_struct_has_member("struct stat" st_mtimespec
+    "sys/types.h;sys/stat.h" HAVE_STRUCT_STAT_ST_MTIMESPEC LANGUAGE C)
+check_struct_has_member("struct stat" st_mtim
+    "sys/types.h;sys/stat.h" HAVE_STRUCT_STAT_ST_MTIM LANGUAGE C)
 
 configure_file(files/config.h.in config.h)
 
diff --git a/catalog/dump.c b/catalog/dump.c
index 248f718d719b..ef893d647edf 100644
--- a/catalog/dump.c
+++ b/catalog/dump.c
@@ -35,24 +35,24 @@ parse(FILE *fp)
 {
 	int ch, s1, s2, s3;
 
-#define	TESTD(s) do {							\
+#define	TESTD(s) {							\
 	if ((s = getc(fp)) == EOF)					\
 		return;							\
 	if (!isdigit(s))						\
 		continue;						\
-} while (0)
-#define	TESTP do {							\
+}
+#define	TESTP {								\
 	if ((ch = getc(fp)) == EOF)					\
 		return;							\
 	if (ch != '|')							\
 		continue;						\
-} while (0)
-#define	MOVEC(t) do {							\
+}
+#define	MOVEC(t) {							\
 	do {								\
 		if ((ch = getc(fp)) == EOF)				\
 			return;						\
 	} while (ch != (t));						\
-} while (0)
+}
 	for (;;) {
 		MOVEC('"');
 		TESTD(s1);
diff --git a/cl/cl.h b/cl/cl.h
index d230a55a56d7..a04c9e9f1b0d 100644
--- a/cl/cl.h
+++ b/cl/cl.h
@@ -7,9 +7,6 @@
  * See the LICENSE file for redistribution information.
  */
 
-#ifdef USE_WIDECHAR
-#define _XOPEN_SOURCE_EXTENDED
-#endif
 #ifdef HAVE_NCURSESW_NCURSES_H
 #include <ncursesw/ncurses.h>
 #elif defined HAVE_NCURSES_H
diff --git a/cl/cl_read.c b/cl/cl_read.c
index ddf3acc1918c..8dc1d3cbebc9 100644
--- a/cl/cl_read.c
+++ b/cl/cl_read.c
@@ -317,10 +317,10 @@ cl_resize(SCR *sp, size_t lines, size_t columns)
 	argv[0] = &a;
 	argv[1] = &b;
 
-	a.len = SPRINTF(b1, sizeof(b1), L("lines=%lu"), (u_long)lines);
+	a.len = SPRINTF(b1, SIZE(b1), L("lines=%lu"), (u_long)lines);
 	if (opts_set(sp, argv, NULL))
 		return (1);
-	a.len = SPRINTF(b1, sizeof(b1), L("columns=%lu"), (u_long)columns);
+	a.len = SPRINTF(b1, SIZE(b1), L("columns=%lu"), (u_long)columns);
 	if (opts_set(sp, argv, NULL))
 		return (1);
 	return (0);
diff --git a/cl/extern.h b/cl/extern.h
deleted file mode 100644
index 7b01ccd3f8cf..000000000000
--- a/cl/extern.h
+++ /dev/null
@@ -1,31 +0,0 @@
-int cl_waddstr(SCR *, const CHAR_T *, size_t);
-int cl_addstr(SCR *, const char *, size_t);
-int cl_attr(SCR *, scr_attr_t, int);
-int cl_baud(SCR *, u_long *);
-int cl_bell(SCR *);
-int cl_clrtoeol(SCR *);
-int cl_cursor(SCR *, size_t *, size_t *);
-int cl_deleteln(SCR *);
-int cl_discard(SCR *, SCR **);
-int cl_ex_adjust(SCR *, exadj_t);
-int cl_insertln(SCR *);
-int cl_keyval(SCR *, scr_keyval_t, CHAR_T *, int *);
-int cl_move(SCR *, size_t, size_t);
-int cl_refresh(SCR *, int);
-int cl_rename(SCR *, char *, int);
-void cl_setname(GS *, char *);
-int cl_split(SCR *, SCR *);
-int cl_suspend(SCR *, int *);
-void cl_usage(void);
-int sig_init(GS *, SCR *);
-int cl_event(SCR *, EVENT *, u_int32_t, int);
-int cl_screen(SCR *, u_int32_t);
-int cl_quit(GS *);
-int cl_getcap(SCR *, char *, char **);
-int cl_term_init(SCR *);
-int cl_term_end(GS *);
-int cl_fmap(SCR *, seq_t, CHAR_T *, size_t, CHAR_T *, size_t);
-int cl_optchange(SCR *, int, char *, u_long *);
-int cl_omesg(SCR *, CL_PRIVATE *, int);
-int cl_ssize(SCR *, int, size_t *, size_t *, int *);
-int cl_putchar(int);
diff --git a/common/common.h b/common/common.h
index dc4155610225..45f22fb49d1b 100644
--- a/common/common.h
+++ b/common/common.h
@@ -11,10 +11,10 @@
 #define TCSASOFT 0
 #endif
 
-#ifdef __linux__
-#include "/usr/include/db1/db.h"	/* Only include db1. */
+#ifdef DB_H_ABS_PATH
+#include DB_H_ABS_PATH
 #else
-#include "/usr/include/db.h"	/* Only include db1. */
+#include <db.h>
 #endif
 #include <regex.h>		/* May refer to the bundled regex. */
 
diff --git a/common/conv.h b/common/conv.h
index ee3efb5a8308..4daa8221ff8f 100644
--- a/common/conv.h
+++ b/common/conv.h
@@ -28,7 +28,7 @@ typedef int	iconv_t;
 #define KEY_NEEDSWIDE(sp, ch)						\
 	(INTISWIDE(ch) && KEY_LEN(sp, ch) <= 4)
 #define KEY_COL(sp, ch)							\
-	(KEY_NEEDSWIDE(sp, ch) ? CHAR_WIDTH(sp, ch) : KEY_LEN(sp, ch))
+	(KEY_NEEDSWIDE(sp, ch) ? XCHAR_WIDTH(sp, ch) : KEY_LEN(sp, ch))
 
 enum { IC_FE_CHAR2INT, IC_FE_INT2CHAR, IC_IE_CHAR2INT, IC_IE_TO_UTF16 };
 
diff --git a/common/exf.c b/common/exf.c
index f9eb2150276d..49e39c242648 100644
--- a/common/exf.c
+++ b/common/exf.c
@@ -199,7 +199,14 @@ file_init(SCR *sp, FREF *frp, char *rcv_name, int flags)
 		if (!LF_ISSET(FS_OPENERR))
 			F_SET(frp, FR_NEWFILE);
 
+#if defined HAVE_STRUCT_STAT_ST_MTIMESPEC
+		ep->mtim = sb.st_mtimespec;
+#elif defined HAVE_STRUCT_STAT_ST_MTIM
 		ep->mtim = sb.st_mtim;
+#else
+		ep->mtim.tv_sec = sb.st_mtime;
+		ep->mtim.tv_nsec = 0;
+#endif
 	} else {
 		/*
 		 * XXX
@@ -218,7 +225,14 @@ file_init(SCR *sp, FREF *frp, char *rcv_name, int flags)
 		ep->mdev = sb.st_dev;
 		ep->minode = sb.st_ino;
 
+#if defined HAVE_STRUCT_STAT_ST_MTIMESPEC
+		ep->mtim = sb.st_mtimespec;
+#elif defined HAVE_STRUCT_STAT_ST_MTIM
 		ep->mtim = sb.st_mtim;
+#else
+		ep->mtim.tv_sec = sb.st_mtime;
+		ep->mtim.tv_nsec = 0;
+#endif
 
 		if (!S_ISREG(sb.st_mode))
 			msgq_str(sp, M_ERR, oname,
@@ -796,7 +810,13 @@ file_write(SCR *sp, MARK *fm, MARK *tm, char *name, int flags)
 		if (noname && !LF_ISSET(FS_FORCE | FS_APPEND) &&
 		    ((F_ISSET(ep, F_DEVSET) &&
 		    (sb.st_dev != ep->mdev || sb.st_ino != ep->minode)) ||
+#if defined HAVE_STRUCT_STAT_ST_MTIMESPEC
+		    timespeccmp(&sb.st_mtimespec, &ep->mtim, !=))) {
+#elif defined HAVE_STRUCT_STAT_ST_MTIM
 		    timespeccmp(&sb.st_mtim, &ep->mtim, !=))) {
+#else
+		    sb.st_mtime != ep->mtim.tv_sec)) {
+#endif
 			msgq_str(sp, M_ERR, name, LF_ISSET(FS_POSSIBLE) ?
 "250|%s: file modified more recently than this copy; use ! to override" :
 "251|%s: file modified more recently than this copy");
@@ -895,7 +915,14 @@ success_open:
 			ep->mdev = sb.st_dev;
 			ep->minode = sb.st_ino;
 
+#if defined HAVE_STRUCT_STAT_ST_MTIMESPEC
+			ep->mtim = sb.st_mtimespec;
+#elif defined HAVE_STRUCT_STAT_ST_MTIM
 			ep->mtim = sb.st_mtim;
+#else
+			ep->mtim.tv_sec = sb.st_mtime;
+			ep->mtim.tv_nsec = 0;
+#endif
 		}
 	}
 
diff --git a/common/extern.h b/common/extern.h
deleted file mode 100644
index c887696080de..000000000000
--- a/common/extern.h
+++ /dev/null
@@ -1,131 +0,0 @@
-char * codeset(void);
-void conv_init(SCR *, SCR *);
-int conv_enc(SCR *, int, char *);
-void conv_end(SCR *);
-int cut(SCR *, CHAR_T *, MARK *, MARK *, int);
-int cut_line(SCR *, recno_t, size_t, size_t, CB *);
-void cut_close(GS *);
-TEXT *text_init(SCR *, const CHAR_T *, size_t, size_t);
-void text_lfree(TEXTH *);
-void text_free(TEXT *);
-int del(SCR *, MARK *, MARK *, int);
-int looks_utf8(const char *, size_t);
-int looks_utf16(const char *, size_t);
-int decode_utf8(const char *);
-int decode_utf16(const char *, int);
-FREF *file_add(SCR *, char *);
-int file_init(SCR *, FREF *, char *, int);
-int file_end(SCR *, EXF *, int);
-int file_write(SCR *, MARK *, MARK *, char *, int);
-int file_m1(SCR *, int, int);
-int file_m2(SCR *, int);
-int file_m3(SCR *, int);
-int file_aw(SCR *, int);
-void set_alt_name(SCR *, char *);
-lockr_t file_lock(SCR *, char *, int, int);
-int v_key_init(SCR *);
-void v_key_ilookup(SCR *);
-size_t v_key_len(SCR *, ARG_CHAR_T);
-char *v_key_name(SCR *, ARG_CHAR_T);
-e_key_t v_key_val(SCR *, ARG_CHAR_T);
-int v_event_push(SCR *, EVENT *, CHAR_T *, size_t, u_int);
-int v_event_get(SCR *, EVENT *, int, u_int32_t);
-void v_event_err(SCR *, EVENT *);
-int v_event_flush(SCR *, u_int);
-int db_eget(SCR *, recno_t, CHAR_T **, size_t *, int *);
-int db_get(SCR *, recno_t, u_int32_t, CHAR_T **, size_t *);
-int db_delete(SCR *, recno_t);
-int db_append(SCR *, int, recno_t, CHAR_T *, size_t);
-int db_insert(SCR *, recno_t, CHAR_T *, size_t);
-int db_set(SCR *, recno_t, CHAR_T *, size_t);
-int db_exist(SCR *, recno_t);
-int db_last(SCR *, recno_t *);
-int db_rget(SCR *, recno_t, char **, size_t *);
-int db_rset(SCR *, recno_t, char *, size_t);
-void db_err(SCR *, recno_t);
-int log_init(SCR *, EXF *);
-int log_end(SCR *, EXF *);
-int log_cursor(SCR *);
-int log_line(SCR *, recno_t, u_int);
-int log_mark(SCR *, LMARK *);
-int log_backward(SCR *, MARK *);
-int log_setline(SCR *);
-int log_forward(SCR *, MARK *);
-int editor(GS *, int, char *[]);
-void v_end(GS *);
-int mark_init(SCR *, EXF *);
-int mark_end(SCR *, EXF *);
-int mark_get(SCR *, ARG_CHAR_T, MARK *, mtype_t);
-int mark_set(SCR *, ARG_CHAR_T, MARK *, int);
-int mark_insdel(SCR *, lnop_t, recno_t);
-void msgq(SCR *, mtype_t, const char *, ...);
-void msgq_wstr(SCR *, mtype_t, const CHAR_T *, const char *);
-void msgq_str(SCR *, mtype_t, const char *, const char *);
-void mod_rpt(SCR *);
-void msgq_status(SCR *, recno_t, u_int);
-int msg_open(SCR *, char *);
-void msg_close(GS *);
-const char *msg_cmsg(SCR *, cmsg_t, size_t *);
-const char *msg_cat(SCR *, const char *, size_t *);
-char *msg_print(SCR *, const char *, int *);
-int opts_init(SCR *, int *);
-int opts_set(SCR *, ARGS *[], char *);
-int o_set(SCR *, int, u_int, char *, u_long);
-int opts_empty(SCR *, int, int);
-void opts_dump(SCR *, enum optdisp);
-int opts_save(SCR *, FILE *);
-OPTLIST const *opts_search(CHAR_T *);
-void opts_nomatch(SCR *, CHAR_T *);
-int opts_copy(SCR *, SCR *);
-void opts_free(SCR *);
-int f_altwerase(SCR *, OPTION *, char *, u_long *);
-int f_columns(SCR *, OPTION *, char *, u_long *);
-int f_lines(SCR *, OPTION *, char *, u_long *);
-int f_lisp(SCR *, OPTION *, char *, u_long *);
-int f_msgcat(SCR *, OPTION *, char *, u_long *);
-int f_print(SCR *, OPTION *, char *, u_long *);
-int f_readonly(SCR *, OPTION *, char *, u_long *);
-int f_recompile(SCR *, OPTION *, char *, u_long *);
-int f_reformat(SCR *, OPTION *, char *, u_long *);
-int f_ttywerase(SCR *, OPTION *, char *, u_long *);
-int f_w300(SCR *, OPTION *, char *, u_long *);
-int f_w1200(SCR *, OPTION *, char *, u_long *);
-int f_w9600(SCR *, OPTION *, char *, u_long *);
-int f_window(SCR *, OPTION *, char *, u_long *);
-int f_encoding(SCR *, OPTION *, char *, u_long *);
-int put(SCR *, CB *, CHAR_T *, MARK *, MARK *, int);
-int rcv_tmp(SCR *, EXF *, char *);
-int rcv_init(SCR *);
-int rcv_sync(SCR *, u_int);
-int rcv_list(SCR *);
-int rcv_read(SCR *, FREF *);
-int screen_init(GS *, SCR *, SCR **);
-int screen_end(SCR *);
-SCR *screen_next(SCR *);
-int f_search(SCR *,
-   MARK *, MARK *, CHAR_T *, size_t, CHAR_T **, u_int);
-int b_search(SCR *,
-   MARK *, MARK *, CHAR_T *, size_t, CHAR_T **, u_int);
-void search_busy(SCR *, busy_t);
-int seq_set(SCR *, CHAR_T *,
-   size_t, CHAR_T *, size_t, CHAR_T *, size_t, seq_t, int);
-int seq_delete(SCR *, CHAR_T *, size_t, seq_t);
-int seq_free(SEQ *);
-SEQ *seq_find
-  (SCR *, SEQ **, EVENT *, CHAR_T *, size_t, seq_t, int *);
-void seq_close(GS *);
-int seq_dump(SCR *, seq_t, int);
-int seq_save(SCR *, FILE *, char *, seq_t);
-int e_memcmp(CHAR_T *, EVENT *, size_t);
-void *binc(SCR *, void *, size_t *, size_t);
-int nonblank(SCR *, recno_t, size_t *);
-char *join(char *, char *);
-char *expanduser(char *);
-char *quote(char *);
-char *v_strdup(SCR *, const char *, size_t);
-CHAR_T *v_wstrdup(SCR *, const CHAR_T *, size_t);
-enum nresult nget_uslong(u_long *, const CHAR_T *, CHAR_T **, int);
-enum nresult nget_slong(long *, const CHAR_T *, CHAR_T **, int);
-void timepoint_steady(struct timespec *);
-void timepoint_system(struct timespec *);
-void TRACE(SCR *, const char *, ...);
diff --git a/common/key.h b/common/key.h
index 3e55d3044129..ae0ba92d1ce5 100644
--- a/common/key.h
+++ b/common/key.h
@@ -22,8 +22,8 @@
     sp->conv.input2int(sp, n, nlen, &(cw), &wlen, &w)
 #define CONST
 #define INTISWIDE(c)        (wctob(c) == EOF)
-#define CHAR_WIDTH(sp, ch)  wcwidth(ch)
-#define CAN_PRINT(sp, ch)   (CHAR_WIDTH(sp, ch) > 0)
+#define XCHAR_WIDTH(sp, ch) wcwidth(ch)
+#define CAN_PRINT(sp, ch)   (XCHAR_WIDTH(sp, ch) > 0)
 #else
 #define FILE2INT5(sp,buf,n,nlen,w,wlen) \
     (w = n, wlen = nlen, 0)
@@ -37,7 +37,7 @@
     (w = n, wlen = nlen, 0)
 #define CONST               const
 #define INTISWIDE(c)        0
-#define CHAR_WIDTH(sp, ch)  1
+#define XCHAR_WIDTH(sp, ch) 1
 #define CAN_PRINT(sp, ch)   isprint(ch)
 #endif
 #define FILE2INT(sp,n,nlen,w,wlen)					    \
diff --git a/common/options.h b/common/options.h
index 5ed12d39c342..d723a51217bc 100644
--- a/common/options.h
+++ b/common/options.h
@@ -97,4 +97,8 @@ enum optdisp { NO_DISPLAY, ALL_DISPLAY, CHANGED_DISPLAY, SELECT_DISPLAY };
 /* Options array. */
 extern OPTLIST const optlist[];
 
+#ifdef O_PATH
+#undef O_PATH	/* bits/fcntl-linux.h may have defined O_PATH. */
+#endif
+
 #include "options_def.h"
diff --git a/common/options_def.h b/common/options_def.h
deleted file mode 100644
index 54dd6c20c891..000000000000
--- a/common/options_def.h
+++ /dev/null
@@ -1,84 +0,0 @@
-#define O_ALTWERASE 0
-#define O_AUTOINDENT 1
-#define O_AUTOPRINT 2
-#define O_AUTOWRITE 3
-#define O_BACKUP 4
-#define O_BEAUTIFY 5
-#define O_CDPATH 6
-#define O_CEDIT 7
-#define O_COLUMNS 8
-#define O_COMBINED 9
-#define O_COMMENT 10
-#define O_TMPDIR 11
-#define O_EDCOMPATIBLE 12
-#define O_ERRORBELLS 13
-#define O_ESCAPETIME 14
-#define O_EXPANDTAB 15
-#define O_EXRC 16
-#define O_EXTENDED 17
-#define O_FILEC 18
-#define O_FILEENCODING 19
-#define O_FLASH 20
-#define O_HARDTABS 21
-#define O_ICLOWER 22
-#define O_IGNORECASE 23
-#define O_INPUTENCODING 24
-#define O_KEYTIME 25
-#define O_LEFTRIGHT 26
-#define O_LINES 27
-#define O_LISP 28
-#define O_LIST 29
-#define O_LOCKFILES 30
-#define O_MAGIC 31
-#define O_MATCHCHARS 32
-#define O_MATCHTIME 33
-#define O_MESG 34
-#define O_MODELINE 35
-#define O_MSGCAT 36
-#define O_NOPRINT 37
-#define O_NUMBER 38
-#define O_OCTAL 39
-#define O_OPEN 40
-#define O_OPTIMIZE 41
-#define O_PARAGRAPHS 42
-#define O_PATH 43
-#define O_PRINT 44
-#define O_PROMPT 45
-#define O_READONLY 46
-#define O_RECDIR 47
-#define O_REDRAW 48
-#define O_REMAP 49
-#define O_REPORT 50
-#define O_RULER 51
-#define O_SCROLL 52
-#define O_SEARCHINCR 53
-#define O_SECTIONS 54
-#define O_SECURE 55
-#define O_SHELL 56
-#define O_SHELLMETA 57
-#define O_SHIFTWIDTH 58
-#define O_SHOWMATCH 59
-#define O_SHOWMODE 60
-#define O_SIDESCROLL 61
-#define O_SLOWOPEN 62
-#define O_SOURCEANY 63
-#define O_TABSTOP 64
-#define O_TAGLENGTH 65
-#define O_TAGS 66
-#define O_TERM 67
-#define O_TERSE 68
-#define O_TILDEOP 69
-#define O_TIMEOUT 70
-#define O_TTYWERASE 71
-#define O_VERBOSE 72
-#define O_W1200 73
-#define O_W300 74
-#define O_W9600 75
-#define O_WARN 76
-#define O_WINDOW 77
-#define O_WINDOWNAME 78
-#define O_WRAPLEN 79
-#define O_WRAPMARGIN 80
-#define O_WRAPSCAN 81
-#define O_WRITEANY 82
-#define O_OPTIONCOUNT 83
diff --git a/common/recover.c b/common/recover.c
index 120cf4f60b19..cf222bfb5200 100644
--- a/common/recover.c
+++ b/common/recover.c
@@ -701,7 +701,13 @@ rcv_read(SCR *sp, FREF *frp)
 		/* If we've found more than one, take the most recent. */
 		(void)fstat(fileno(fp), &sb);
 		if (recp == NULL ||
+#if defined HAVE_STRUCT_STAT_ST_MTIMESPEC
+		    timespeccmp(&rec_mtim, &sb.st_mtimespec, <)) {
+#elif defined HAVE_STRUCT_STAT_ST_MTIM
 		    timespeccmp(&rec_mtim, &sb.st_mtim, <)) {
+#else
+		    rec_mtim.tv_sec < sb.st_mtime) {
+#endif
 			p = recp;
 			t = pathp;
 			recp = recpath;
@@ -710,7 +716,13 @@ rcv_read(SCR *sp, FREF *frp)
 				free(p);
 				free(t);
 			}
+#if defined HAVE_STRUCT_STAT_ST_MTIMESPEC
+			rec_mtim = sb.st_mtimespec;
+#elif defined HAVE_STRUCT_STAT_ST_MTIM
 			rec_mtim = sb.st_mtim;
+#else
+			rec_mtim.tv_sec = sb.st_mtime;
+#endif
 			if (sv_fd != -1)
 				(void)close(sv_fd);
 			sv_fd = dup(fileno(fp));
diff --git a/ex/ex.c b/ex/ex.c
index 343131537afa..fd920a8df9a1 100644
--- a/ex/ex.c
+++ b/ex/ex.c
@@ -2266,7 +2266,8 @@ ex_comm_search(CHAR_T *name, size_t len)
 			return (NULL);
 		if (cp->name[0] != name[0])
 			continue;
-		if (!MEMCMP(name, cp->name, len))
+		if (STRLEN(cp->name) >= len &&
+			!MEMCMP(name, cp->name, len))
 			return (cp);
 	}
 	return (NULL);
diff --git a/ex/ex_cscope.c b/ex/ex_cscope.c
index 74d7f8af95be..e07aa64df802 100644
--- a/ex/ex_cscope.c
+++ b/ex/ex_cscope.c
@@ -261,7 +261,14 @@ cscope_add(SCR *sp, EXCMD *cmdp, CHAR_T *dname)
 	csc->dname = csc->buf;
 	csc->dlen = len;
 	memcpy(csc->dname, np, len);
+#if defined HAVE_STRUCT_STAT_ST_MTIMESPEC
+	csc->mtim = sb.st_mtimespec;
+#elif defined HAVE_STRUCT_STAT_ST_MTIM
 	csc->mtim = sb.st_mtim;
+#else
+	csc->mtim.tv_sec = sb.st_mtime;
+	csc->mtim.tv_nsec = 0;
+#endif
 
 	/* Get the search paths for the cscope. */
 	if (get_paths(sp, csc))
@@ -812,8 +819,15 @@ csc_file(SCR *sp, CSC *csc, char *name, char **dirp, size_t *dlenp, int *isolder
 			free(buf);
 			*dirp = *pp;
 			*dlenp = strlen(*pp);
+#if defined HAVE_STRUCT_STAT_ST_MTIMESPEC
+			*isolderp = timespeccmp(
+			    &sb.st_mtimespec, &csc->mtim, <);
+#elif defined HAVE_STRUCT_STAT_ST_MTIM
 			*isolderp = timespeccmp(
 			    &sb.st_mtim, &csc->mtim, <);
+#else
+			*isolderp = sb.st_mtime < csc->mtim.tv_sec;
+#endif
 			return;
 		}
 		free(buf);
diff --git a/ex/ex_def.h b/ex/ex_def.h
deleted file mode 100644
index 7afb7b19d677..000000000000
--- a/ex/ex_def.h
+++ /dev/null
@@ -1,76 +0,0 @@
-#define C_SCROLL 0
-#define C_BANG 1
-#define C_HASH 2
-#define C_SUBAGAIN 3
-#define C_STAR 4
-#define C_SHIFTL 5
-#define C_EQUAL 6
-#define C_SHIFTR 7
-#define C_AT 8
-#define C_APPEND 9
-#define C_ABBR 10
-#define C_ARGS 11
-#define C_BG 12
-#define C_CHANGE 13
-#define C_CD 14
-#define C_CHDIR 15
-#define C_COPY 16
-#define C_CSCOPE 17
-#define C_DELETE 18
-#define C_DISPLAY 19
-#define C_EDIT 20
-#define C_EX 21
-#define C_EXUSAGE 22
-#define C_FILE 23
-#define C_FG 24
-#define C_GLOBAL 25
-#define C_HELP 26
-#define C_INSERT 27
-#define C_JOIN 28
-#define C_K 29
-#define C_LIST 30
-#define C_MOVE 31
-#define C_MARK 32
-#define C_MAP 33
-#define C_MKEXRC 34
-#define C_NEXT 35
-#define C_NUMBER 36
-#define C_OPEN 37
-#define C_PRINT 38
-#define C_PRESERVE 39
-#define C_PREVIOUS 40
-#define C_PUT 41
-#define C_QUIT 42
-#define C_READ 43
-#define C_RECOVER 44
-#define C_RESIZE 45
-#define C_REWIND 46
-#define C_SUBSTITUTE 47
-#define C_SCRIPT 48
-#define C_SET 49
-#define C_SHELL 50
-#define C_SOURCE 51
-#define C_STOP 52
-#define C_SUSPEND 53
-#define C_T 54
-#define C_TAG 55
-#define C_TAGNEXT 56
-#define C_TAGPOP 57
-#define C_TAGPREV 58
-#define C_TAGTOP 59
-#define C_UNDO 60
-#define C_UNABBREVIATE 61
-#define C_UNMAP 62
-#define C_V 63
-#define C_VERSION 64
-#define C_VISUAL_EX 65
-#define C_VISUAL_VI 66
-#define C_VIUSAGE 67
-#define C_VSPLIT 68
-#define C_WRITE 69
-#define C_WN 70
-#define C_WQ 71
-#define C_XIT 72
-#define C_YANK 73
-#define C_Z 74
-#define C_SUBTILDE 75
diff --git a/ex/extern.h b/ex/extern.h
deleted file mode 100644
index 9d7b1d674c3c..000000000000
--- a/ex/extern.h
+++ /dev/null
@@ -1,131 +0,0 @@
-int ex(SCR **);
-int ex_cmd(SCR *);
-int ex_range(SCR *, EXCMD *, int *);
-int ex_is_abbrev(CHAR_T *, size_t);
-int ex_is_unmap(CHAR_T *, size_t);
-void ex_badaddr
-  (SCR *, EXCMDLIST const *, enum badaddr, enum nresult);
-int ex_abbr(SCR *, EXCMD *);
-int ex_unabbr(SCR *, EXCMD *);
-int ex_append(SCR *, EXCMD *);
-int ex_change(SCR *, EXCMD *);
-int ex_insert(SCR *, EXCMD *);
-int ex_next(SCR *, EXCMD *);
-int ex_prev(SCR *, EXCMD *);
-int ex_rew(SCR *, EXCMD *);
-int ex_args(SCR *, EXCMD *);
-char **ex_buildargv(SCR *, EXCMD *, char *);
-int argv_init(SCR *, EXCMD *);
-int argv_exp0(SCR *, EXCMD *, CHAR_T *, size_t);
-int argv_exp1(SCR *, EXCMD *, CHAR_T *, size_t, int);
-int argv_exp2(SCR *, EXCMD *, CHAR_T *, size_t);
-int argv_exp3(SCR *, EXCMD *, CHAR_T *, size_t);
-int argv_flt_ex(SCR *, EXCMD *, CHAR_T *, size_t);
-int argv_free(SCR *);
-int argv_flt_path(SCR *, EXCMD *, CHAR_T *, size_t);
-CHAR_T *argv_esc(SCR *, EXCMD *, CHAR_T *, size_t);
-CHAR_T *argv_uesc(SCR *, EXCMD *, CHAR_T *, size_t);
-int ex_at(SCR *, EXCMD *);
-int ex_bang(SCR *, EXCMD *);
-int ex_cd(SCR *, EXCMD *);
-int ex_cscope(SCR *, EXCMD *);
-int cscope_end(SCR *);
-int cscope_display(SCR *);
-int cscope_search(SCR *, TAGQ *, TAG *);
-int ex_delete(SCR *, EXCMD *);
-int ex_display(SCR *, EXCMD *);
-int ex_edit(SCR *, EXCMD *);
-int ex_equal(SCR *, EXCMD *);
-int ex_file(SCR *, EXCMD *);
-int ex_filter(SCR *, 
-   EXCMD *, MARK *, MARK *, MARK *, CHAR_T *, enum filtertype);
-int ex_global(SCR *, EXCMD *);
-int ex_v(SCR *, EXCMD *);
-int ex_g_insdel(SCR *, lnop_t, recno_t);
-int ex_screen_copy(SCR *, SCR *);
-int ex_screen_end(SCR *);
-int ex_optchange(SCR *, int, char *, u_long *);
-int ex_exrc(SCR *);
-int ex_run_str(SCR *, char *, CHAR_T *, size_t, int, int);
-int ex_join(SCR *, EXCMD *);
-int ex_map(SCR *, EXCMD *);
-int ex_unmap(SCR *, EXCMD *);
-int ex_mark(SCR *, EXCMD *);
-int ex_mkexrc(SCR *, EXCMD *);
-int ex_copy(SCR *, EXCMD *);
-int ex_move(SCR *, EXCMD *);
-int ex_open(SCR *, EXCMD *);
-int ex_preserve(SCR *, EXCMD *);
-int ex_recover(SCR *, EXCMD *);
-int ex_list(SCR *, EXCMD *);
-int ex_number(SCR *, EXCMD *);
-int ex_pr(SCR *, EXCMD *);
-int ex_print(SCR *, EXCMD *, MARK *, MARK *, u_int32_t);
-int ex_ldisplay(SCR *, const CHAR_T *, size_t, size_t, u_int);
-int ex_scprint(SCR *, MARK *, MARK *);
-int ex_printf(SCR *, const char *, ...);
-int ex_puts(SCR *, const char *);
-int ex_fflush(SCR *sp);
-int ex_put(SCR *, EXCMD *);
-int ex_quit(SCR *, EXCMD *);
-int ex_read(SCR *, EXCMD *);
-int ex_readfp(SCR *, char *, FILE *, MARK *, recno_t *, int);
-int ex_bg(SCR *, EXCMD *);
-int ex_fg(SCR *, EXCMD *);
-int ex_resize(SCR *, EXCMD *);
-int ex_sdisplay(SCR *);
-int ex_script(SCR *, EXCMD *);
-int sscr_exec(SCR *, recno_t);
-int sscr_input(SCR *);
-int sscr_end(SCR *);
-int ex_set(SCR *, EXCMD *);
-int ex_shell(SCR *, EXCMD *);
-int ex_exec_proc(SCR *, EXCMD *, char *, const char *, int);
-int proc_wait(SCR *, long, const char *, int, int);
-int ex_shiftl(SCR *, EXCMD *);
-int ex_shiftr(SCR *, EXCMD *);
-int ex_retab(SCR *, EXCMD *);
-int ex_source(SCR *, EXCMD *);
-int ex_stop(SCR *, EXCMD *);
-int ex_s(SCR *, EXCMD *);
-int ex_subagain(SCR *, EXCMD *);
-int ex_subtilde(SCR *, EXCMD *);
-int re_compile(SCR *,
-    CHAR_T *, size_t, CHAR_T **, size_t *, regex_t *, u_int);
-void re_error(SCR *, int, regex_t *);
-int ex_tag_first(SCR *, CHAR_T *);
-int ex_tag_push(SCR *, EXCMD *);
-int ex_tag_next(SCR *, EXCMD *);
-int ex_tag_prev(SCR *, EXCMD *);
-int ex_tag_nswitch(SCR *, TAG *, int);
-int ex_tag_Nswitch(SCR *, TAG *, int);
-int ex_tag_pop(SCR *, EXCMD *);
-int ex_tag_top(SCR *, EXCMD *);
-int ex_tag_display(SCR *);
-int ex_tag_copy(SCR *, SCR *);
-int tagq_free(SCR *, TAGQ *);
-int tagq_push(SCR*, TAGQ*, int, int );
-void tag_msg(SCR *, tagmsg_t, char *);
-int ex_tagf_alloc(SCR *, char *);
-int ex_tag_free(SCR *);
-int ex_txt(SCR *, TEXTH *, ARG_CHAR_T, u_int32_t);
-int ex_undo(SCR *, EXCMD *);
-int ex_help(SCR *, EXCMD *);
-int ex_usage(SCR *, EXCMD *);
-int ex_viusage(SCR *, EXCMD *);
-void ex_cinit(SCR *, EXCMD *, int, int, recno_t, recno_t, int);
-int ex_getline(SCR *, FILE *, size_t *);
-int ex_ncheck(SCR *, int);
-int ex_init(SCR *);
-void ex_wemsg(SCR *, CHAR_T *, exm_t);
-void ex_emsg(SCR *, char *, exm_t);
-int ex_version(SCR *, EXCMD *);
-int ex_visual(SCR *, EXCMD *);
-int ex_wn(SCR *, EXCMD *);
-int ex_wq(SCR *, EXCMD *);
-int ex_write(SCR *, EXCMD *);
-int ex_xit(SCR *, EXCMD *);
-int ex_writefp(SCR *,
-   char *, FILE *, MARK *, MARK *, u_long *, u_long *, int);
-int ex_yank(SCR *, EXCMD *);
-int ex_z(SCR *, EXCMD *);
diff --git a/ex/version.h b/ex/version.h
deleted file mode 100644
index 742b145ebd3f..000000000000
--- a/ex/version.h
+++ /dev/null
@@ -1 +0,0 @@
-#define VI_VERSION "2.2.0 (2020-08-01)"
diff --git a/man/vi.1 b/man/vi.1
index ce7b883f8497..62f28d72569c 100644
--- a/man/vi.1
+++ b/man/vi.1
@@ -1809,7 +1809,8 @@ Display buffers, Cscope connections, screens or tags.
 .Op Ar +cmd
 .Op Ar file
 .Xc
-Edit a different file.
+Edit a different file. The capitalized command opens a new screen below the
+current screen.
 .Pp
 .It Xo
 .Cm exu Ns Op Cm sage
@@ -1832,7 +1833,8 @@ Display and optionally change the file name.
 .Xc
 .Nm vi
 mode only.
-Foreground the specified screen.
+Foreground the specified screen. The capitalized command opens a new screen
+below the current screen.
 .Pp
 .It Xo
 .Op Ar range
@@ -1919,7 +1921,8 @@ Write the abbreviations, editor options and maps to the specified
 .Op Cm !\&
 .Op Ar
 .Xc
-Edit the next file from the argument list.
+Edit the next file from the argument list. The capitalized command opens a
+new screen below the current screen.
 .\" .Pp
 .\" .It Xo
 .\" .Op Ar line
@@ -1940,7 +1943,8 @@ option.
 .Cm rev Ns Op Cm ious Ns
 .Op Cm !\&
 .Xc
-Edit the previous file from the argument list.
+Edit the previous file from the argument list. The capitalized command opens
+a new screen below the current screen.
 .Pp
 .It Xo
 .Op Ar range
@@ -2103,7 +2107,8 @@ character is usually
 .Op Cm !\&
 .Ar tagstring
 .Xc
-Edit the file containing the specified tag.
+Edit the file containing the specified tag. The capitalized command opens a
+new screen below the current screen.
 .Pp
 .It Xo
 .Cm tagn Ns Op Cm ext Ns
@@ -2166,15 +2171,15 @@ Enter
 .Nm vi .
 .Pp
 .It Xo
-.Op Cm Vi Ns
-.Cm i Ns Op Cm sual Ns
+.Cm Vi Ns
+.Op Cm sual Ns
 .Op Cm !\&
 .Op Ar +cmd
 .Op Ar file
 .Xc
 .Nm vi
-mode only.
-Edit a new file.
+mode only. Edit a different file by opening a new screen below the current
+screen.
 .Pp
 .It Xo
 .Cm viu Ns Op Cm sage
@@ -2185,6 +2190,14 @@ Display usage for a
 command.
 .Pp
 .It Xo
+.Cm vs Ns Op Cm plit
+.Op Ar +cmd
*** 228 LINES SKIPPED ***


More information about the dev-commits-src-all mailing list