Date: Wed, 22 Sep 2021 10:31:08 GMT From: Baptiste Daroussin <bapt@FreeBSD.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org Subject: git: 4581de213ef4 - stable/12 - import nvi 2.2.0-3bbdfe4 Message-ID: <202109221031.18MAV8OE009340@gitrepo.freebsd.org>
next in thread | raw e-mail | index | archive | help
The branch stable/12 has been updated by bapt: URL: https://cgit.FreeBSD.org/src/commit/?id=4581de213ef452b0e593a7d87b930d48d64aa71d commit 4581de213ef452b0e593a7d87b930d48d64aa71d Author: Baptiste Daroussin <bapt@FreeBSD.org> AuthorDate: 2021-05-21 20:50:50 +0000 Commit: Baptiste Daroussin <bapt@FreeBSD.org> CommitDate: 2021-09-22 10:29:20 +0000 import nvi 2.2.0-3bbdfe4 (cherry picked from commit 6680e5a52f8abf059bbbd3e0be66d9dce476cdf9) --- contrib/nvi/.gitignore | 5 + contrib/nvi/CMakeLists.txt | 38 +- contrib/nvi/cl/cl.h | 3 - contrib/nvi/cl/cl_read.c | 4 +- contrib/nvi/cl/extern.h | 31 -- contrib/nvi/common/common.h | 6 +- contrib/nvi/common/conv.h | 2 +- contrib/nvi/common/exf.c | 27 ++ contrib/nvi/common/extern.h | 131 ------- contrib/nvi/common/key.h | 6 +- contrib/nvi/common/options.h | 4 + contrib/nvi/common/recover.c | 12 + contrib/nvi/ex/ex.c | 3 +- contrib/nvi/ex/ex_cscope.c | 14 + contrib/nvi/ex/extern.h | 131 ------- contrib/nvi/man/vi.1 | 50 ++- contrib/nvi/vi/extern.h | 145 -------- contrib/nvi/vi/v_increment.c | 4 +- contrib/nvi/vi/vs_line.c | 2 +- usr.bin/vi/Makefile | 5 +- usr.bin/vi/config.h | 9 + {contrib/nvi => usr.bin/vi}/ex/version.h | 2 + {contrib/nvi/ex => usr.bin/vi}/ex_def.h | 0 usr.bin/vi/extern.h | 444 +++++++++++++++++++++++ {contrib/nvi/common => usr.bin/vi}/options_def.h | 0 25 files changed, 607 insertions(+), 471 deletions(-) diff --git a/contrib/nvi/.gitignore b/contrib/nvi/.gitignore index aac7860d7299..2b79229e57e0 100644 --- a/contrib/nvi/.gitignore +++ b/contrib/nvi/.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/contrib/nvi/CMakeLists.txt b/contrib/nvi/CMakeLists.txt index 996e0e72de99..66d3ca2aafb0 100644 --- a/contrib/nvi/CMakeLists.txt +++ b/contrib/nvi/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/contrib/nvi/cl/cl.h b/contrib/nvi/cl/cl.h index d230a55a56d7..a04c9e9f1b0d 100644 --- a/contrib/nvi/cl/cl.h +++ b/contrib/nvi/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/contrib/nvi/cl/cl_read.c b/contrib/nvi/cl/cl_read.c index ddf3acc1918c..8dc1d3cbebc9 100644 --- a/contrib/nvi/cl/cl_read.c +++ b/contrib/nvi/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/contrib/nvi/cl/extern.h b/contrib/nvi/cl/extern.h deleted file mode 100644 index 7b01ccd3f8cf..000000000000 --- a/contrib/nvi/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/contrib/nvi/common/common.h b/contrib/nvi/common/common.h index f2cb42fa9b9c..45f22fb49d1b 100644 --- a/contrib/nvi/common/common.h +++ b/contrib/nvi/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 <db.h> /* Only include db1. */ +#include <db.h> #endif #include <regex.h> /* May refer to the bundled regex. */ diff --git a/contrib/nvi/common/conv.h b/contrib/nvi/common/conv.h index ee3efb5a8308..4daa8221ff8f 100644 --- a/contrib/nvi/common/conv.h +++ b/contrib/nvi/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/contrib/nvi/common/exf.c b/contrib/nvi/common/exf.c index f9eb2150276d..49e39c242648 100644 --- a/contrib/nvi/common/exf.c +++ b/contrib/nvi/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/contrib/nvi/common/extern.h b/contrib/nvi/common/extern.h deleted file mode 100644 index c887696080de..000000000000 --- a/contrib/nvi/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/contrib/nvi/common/key.h b/contrib/nvi/common/key.h index 3e55d3044129..ae0ba92d1ce5 100644 --- a/contrib/nvi/common/key.h +++ b/contrib/nvi/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/contrib/nvi/common/options.h b/contrib/nvi/common/options.h index 5ed12d39c342..d723a51217bc 100644 --- a/contrib/nvi/common/options.h +++ b/contrib/nvi/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/contrib/nvi/common/recover.c b/contrib/nvi/common/recover.c index 120cf4f60b19..cf222bfb5200 100644 --- a/contrib/nvi/common/recover.c +++ b/contrib/nvi/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/contrib/nvi/ex/ex.c b/contrib/nvi/ex/ex.c index 343131537afa..fd920a8df9a1 100644 --- a/contrib/nvi/ex/ex.c +++ b/contrib/nvi/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/contrib/nvi/ex/ex_cscope.c b/contrib/nvi/ex/ex_cscope.c index 74d7f8af95be..e07aa64df802 100644 --- a/contrib/nvi/ex/ex_cscope.c +++ b/contrib/nvi/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/contrib/nvi/ex/extern.h b/contrib/nvi/ex/extern.h deleted file mode 100644 index 9d7b1d674c3c..000000000000 --- a/contrib/nvi/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/contrib/nvi/man/vi.1 b/contrib/nvi/man/vi.1 index 8c75e9e66a33..b6eaf6964bbd 100644 --- a/contrib/nvi/man/vi.1 +++ b/contrib/nvi/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 +.Op Ar file +.Xc +Edit a different file by opening a new screen to the right of the current +screen. +.Pp +.It Xo .Op Ar range .Cm w Ns Op Cm rite Ns .Op Cm !\& @@ -2194,8 +2207,7 @@ command. .It Xo .Op Ar range .Cm w Ns Op Cm rite -.Op Cm !\& -.Op Ar file +.Cm !\& Ns Ar shell-command .Xc .It Xo .Op Ar range @@ -2209,7 +2221,21 @@ command. .Op >> .Op Ar file .Xc -Write the file. +Write the entire file, or +.Ar range . +.Sq !\& +overwrites a different, preexisting file. +.Sq >> +appends to a file that may preexist. Whitespace followed by +.Sq !\& +pipes the file to +.Ar shell-command . +.Cm wn +moves to the next file if writing succeeds. +.Cm wq +exits the editor if writing succeeds, unless there are more files to edit; +.Sq !\& +exits regardless. .Pp .It Xo .Op Ar range diff --git a/contrib/nvi/vi/extern.h b/contrib/nvi/vi/extern.h deleted file mode 100644 index 8e145c6318ef..000000000000 --- a/contrib/nvi/vi/extern.h +++ /dev/null @@ -1,145 +0,0 @@ -int cs_init(SCR *, VCS *); -int cs_next(SCR *, VCS *); -int cs_fspace(SCR *, VCS *); -int cs_fblank(SCR *, VCS *); -int cs_prev(SCR *, VCS *); -int cs_bblank(SCR *, VCS *); -int v_at(SCR *, VICMD *); -int v_chrepeat(SCR *, VICMD *); -int v_chrrepeat(SCR *, VICMD *); -int v_cht(SCR *, VICMD *); -int v_chf(SCR *, VICMD *); -int v_chT(SCR *, VICMD *); -int v_chF(SCR *, VICMD *); -int v_delete(SCR *, VICMD *); -int v_again(SCR *, VICMD *); -int v_exmode(SCR *, VICMD *); -int v_join(SCR *, VICMD *); -int v_shiftl(SCR *, VICMD *); -int v_shiftr(SCR *, VICMD *); -int v_suspend(SCR *, VICMD *); -int v_switch(SCR *, VICMD *); -int v_tagpush(SCR *, VICMD *); -int v_tagpop(SCR *, VICMD *); -int v_filter(SCR *, VICMD *); -int v_ex(SCR *, VICMD *); -int v_ecl_exec(SCR *); -int v_increment(SCR *, VICMD *); -int v_screen_copy(SCR *, SCR *); -int v_screen_end(SCR *); -int v_optchange(SCR *, int, char *, u_long *); -int v_iA(SCR *, VICMD *); -int v_ia(SCR *, VICMD *); -int v_iI(SCR *, VICMD *); -int v_ii(SCR *, VICMD *); -int v_iO(SCR *, VICMD *); -int v_io(SCR *, VICMD *); -int v_change(SCR *, VICMD *); -int v_Replace(SCR *, VICMD *); -int v_subst(SCR *, VICMD *); -int v_left(SCR *, VICMD *); -int v_cfirst(SCR *, VICMD *); -int v_first(SCR *, VICMD *); -int v_ncol(SCR *, VICMD *); -int v_zero(SCR *, VICMD *); -int v_mark(SCR *, VICMD *); -int v_bmark(SCR *, VICMD *); -int v_fmark(SCR *, VICMD *); -int v_emark(SCR *, VICMD *); -int v_match(SCR *, VICMD *); -int v_buildmcs(SCR *, char *); -int v_paragraphf(SCR *, VICMD *); -int v_paragraphb(SCR *, VICMD *); -int v_buildps(SCR *, char *, char *); -int v_Put(SCR *, VICMD *); -int v_put(SCR *, VICMD *); -int v_redraw(SCR *, VICMD *); -int v_replace(SCR *, VICMD *); -int v_right(SCR *, VICMD *); -int v_dollar(SCR *, VICMD *); -int v_screen(SCR *, VICMD *); -int v_lgoto(SCR *, VICMD *); -int v_home(SCR *, VICMD *); -int v_middle(SCR *, VICMD *); -int v_bottom(SCR *, VICMD *); -int v_up(SCR *, VICMD *); -int v_cr(SCR *, VICMD *); -int v_down(SCR *, VICMD *); -int v_hpageup(SCR *, VICMD *); -int v_hpagedown(SCR *, VICMD *); -int v_pagedown(SCR *, VICMD *); -int v_pageup(SCR *, VICMD *); -int v_lineup(SCR *, VICMD *); -int v_linedown(SCR *, VICMD *); -int v_searchb(SCR *, VICMD *); -int v_searchf(SCR *, VICMD *); -int v_searchN(SCR *, VICMD *); -int v_searchn(SCR *, VICMD *); -int v_searchw(SCR *, VICMD *); -int v_correct(SCR *, VICMD *, int); -int v_sectionf(SCR *, VICMD *); -int v_sectionb(SCR *, VICMD *); -int v_sentencef(SCR *, VICMD *); -int v_sentenceb(SCR *, VICMD *); -int v_status(SCR *, VICMD *); -int v_tcmd(SCR *, VICMD *, ARG_CHAR_T, u_int); -int v_txt(SCR *, VICMD *, MARK *, - const CHAR_T *, size_t, ARG_CHAR_T, recno_t, u_long, u_int32_t); -int v_txt_auto(SCR *, recno_t, TEXT *, size_t, TEXT *); -int v_ulcase(SCR *, VICMD *); -int v_mulcase(SCR *, VICMD *); -int v_Undo(SCR *, VICMD *); -int v_undo(SCR *, VICMD *); -void v_eof(SCR *, MARK *); -void v_eol(SCR *, MARK *); -void v_nomove(SCR *); -void v_sof(SCR *, MARK *); -void v_sol(SCR *); -int v_isempty(CHAR_T *, size_t); -void v_emsg(SCR *, char *, vim_t); -int v_wordW(SCR *, VICMD *); -int v_wordw(SCR *, VICMD *); -int v_wordE(SCR *, VICMD *); -int v_worde(SCR *, VICMD *); -int v_wordB(SCR *, VICMD *); -int v_wordb(SCR *, VICMD *); -int v_xchar(SCR *, VICMD *); -int v_Xchar(SCR *, VICMD *); -int v_yank(SCR *, VICMD *); -int v_z(SCR *, VICMD *); -int vs_crel(SCR *, long); -int v_zexit(SCR *, VICMD *); -int vi(SCR **); -int v_curword(SCR *); -int vs_line(SCR *, SMAP *, size_t *, size_t *); -int vs_number(SCR *); -void vs_busy(SCR *, const char *, busy_t); -void vs_home(SCR *); -void vs_update(SCR *, const char *, const CHAR_T *); -void vs_msg(SCR *, mtype_t, char *, size_t); -int vs_ex_resolve(SCR *, int *); -int vs_resolve(SCR *, SCR *, int); -int vs_repaint(SCR *, EVENT *); -int vs_refresh(SCR *, int); -int vs_column(SCR *, size_t *); -size_t vs_screens(SCR *, recno_t, size_t *); -size_t vs_columns(SCR *, CHAR_T *, recno_t, size_t *, size_t *); -size_t vs_rcm(SCR *, recno_t, int); -size_t vs_colpos(SCR *, recno_t, size_t); -int vs_change(SCR *, recno_t, lnop_t); -int vs_sm_fill(SCR *, recno_t, pos_t); -int vs_sm_scroll(SCR *, MARK *, recno_t, scroll_t); -int vs_sm_1up(SCR *); -int vs_sm_1down(SCR *); -int vs_sm_next(SCR *, SMAP *, SMAP *); -int vs_sm_prev(SCR *, SMAP *, SMAP *); -int vs_sm_cursor(SCR *, SMAP **); -int vs_sm_position(SCR *, MARK *, u_long, pos_t); -recno_t vs_sm_nlines(SCR *, SMAP *, recno_t, size_t); -int vs_split(SCR *, SCR *, int); -int vs_vsplit(SCR *, SCR *); -int vs_discard(SCR *, SCR **); -int vs_fg(SCR *, SCR **, CHAR_T *, int); -int vs_bg(SCR *); -int vs_swap(SCR *, SCR **, char *); -int vs_resize(SCR *, long, adj_t); diff --git a/contrib/nvi/vi/v_increment.c b/contrib/nvi/vi/v_increment.c index 6c59836cab7e..2583d9704579 100644 --- a/contrib/nvi/vi/v_increment.c +++ b/contrib/nvi/vi/v_increment.c @@ -198,7 +198,7 @@ nonum: msgq(sp, M_ERR, "181|Cursor not in a number"); /* If we cross 0, signed numbers lose their sign. */ if (lval == 0 && ntype == fmt[SDEC]) ntype = fmt[DEC]; - nlen = SPRINTF(nbuf, sizeof(nbuf), ntype, lval); + nlen = SPRINTF(nbuf, SIZE(nbuf), ntype, lval); } else { if ((nret = nget_uslong(&ulval, t, NULL, base)) != NUM_OK) goto err; @@ -220,7 +220,7 @@ nonum: msgq(sp, M_ERR, "181|Cursor not in a number"); if (base == 16) wlen -= 2; *** 529 LINES SKIPPED ***
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202109221031.18MAV8OE009340>