Index: external/bsd/nvi/dist/cl/cl_main.c
===================================================================
RCS file: /cvsroot/src/external/bsd/nvi/dist/cl/cl_main.c,v
retrieving revision 1.5
diff -p -u -r1.5 cl_main.c
--- external/bsd/nvi/dist/cl/cl_main.c	25 Nov 2015 20:25:20 -0000	1.5
+++ external/bsd/nvi/dist/cl/cl_main.c	27 Aug 2017 13:25:20 -0000
@@ -311,6 +311,10 @@ h_winch(int signo)
 		continue;
 
 	F_SET(clp, CL_SIGWINCH);
+
+	/* If there was a previous handler, call that. */
+	if (clp->oact[INDX_WINCH].sa_handler)
+		clp->oact[INDX_WINCH].sa_handler(signo);
 }
 #undef	GLOBAL_CLP
 
Index: external/bsd/nvi/dist/cl/cl_screen.c
===================================================================
RCS file: /cvsroot/src/external/bsd/nvi/dist/cl/cl_screen.c,v
retrieving revision 1.5
diff -p -u -r1.5 cl_screen.c
--- external/bsd/nvi/dist/cl/cl_screen.c	25 Nov 2015 20:25:20 -0000	1.5
+++ external/bsd/nvi/dist/cl/cl_screen.c	27 Aug 2017 13:25:20 -0000
@@ -430,7 +430,7 @@ cl_vi_end(GS *gp)
 	 * Move to the bottom of the window (some endwin implementations don't
 	 * do this for you).
 	 */
-	if (!F_ISSET(clp, CL_IN_EX)) {
+	if (!F_ISSET(clp, CL_IN_EX) && !F_ISSET(gp, G_SRESTART)) {
 		(void)move(0, 0);
 		(void)deleteln();
 		(void)move(LINES - 1, 0);
