Module Name:    src
Committed By:   christos
Date:           Thu Nov 28 23:19:43 UTC 2013

Modified Files:
        src/external/bsd/nvi/dist/common: exf.c main.c screen.c
        src/external/bsd/nvi/dist/ex: ex_edit.c ex_tag.c
        src/external/bsd/nvi/dist/vi: v_ex.c vi.c vs_split.c

Log Message:
Make sure that the next pointers are NULL when we insert screens in the list.
This avoids the problem when screens are re-used that have stale pointers in
them. This was not an issue with circleq's because all the pointers used to
be updated.


To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 src/external/bsd/nvi/dist/common/exf.c
cvs rdiff -u -r1.3 -r1.4 src/external/bsd/nvi/dist/common/main.c \
    src/external/bsd/nvi/dist/common/screen.c
cvs rdiff -u -r1.3 -r1.4 src/external/bsd/nvi/dist/ex/ex_edit.c
cvs rdiff -u -r1.7 -r1.8 src/external/bsd/nvi/dist/ex/ex_tag.c
cvs rdiff -u -r1.3 -r1.4 src/external/bsd/nvi/dist/vi/v_ex.c \
    src/external/bsd/nvi/dist/vi/vi.c
cvs rdiff -u -r1.4 -r1.5 src/external/bsd/nvi/dist/vi/vs_split.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/external/bsd/nvi/dist/common/exf.c
diff -u src/external/bsd/nvi/dist/common/exf.c:1.5 src/external/bsd/nvi/dist/common/exf.c:1.6
--- src/external/bsd/nvi/dist/common/exf.c:1.5	Wed Nov 27 15:31:01 2013
+++ src/external/bsd/nvi/dist/common/exf.c	Thu Nov 28 18:19:43 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: exf.c,v 1.5 2013/11/27 20:31:01 tron Exp $ */
+/*	$NetBSD: exf.c,v 1.6 2013/11/28 23:19:43 christos Exp $ */
 /*-
  * Copyright (c) 1992, 1993, 1994
  *	The Regents of the University of California.  All rights reserved.
@@ -402,6 +402,7 @@ no_lock:
 
 	/* Switch... */
 	++ep->refcnt;
+	TAILQ_NEXT(sp, q) = NULL;
 	TAILQ_INSERT_HEAD(&ep->scrq, sp, eq);
 	sp->ep = ep;
 	sp->frp = frp;
@@ -691,6 +692,7 @@ file_end(SCR *sp, EXF *ep, int force)
 		if ((sp->db_error = db_close(ep->db)) != 0 && 
 		    !force) {
 			msgq_str(sp, M_DBERR, frp->name, "241|%s: close");
+			TAILQ_NEXT(sp, q) = NULL;
 			TAILQ_INSERT_HEAD(&ep->scrq, sp, eq);
 			++ep->refcnt;
 			return (1);

Index: src/external/bsd/nvi/dist/common/main.c
diff -u src/external/bsd/nvi/dist/common/main.c:1.3 src/external/bsd/nvi/dist/common/main.c:1.4
--- src/external/bsd/nvi/dist/common/main.c:1.3	Mon Nov 25 17:43:46 2013
+++ src/external/bsd/nvi/dist/common/main.c	Thu Nov 28 18:19:43 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: main.c,v 1.3 2013/11/25 22:43:46 christos Exp $ */
+/*	$NetBSD: main.c,v 1.4 2013/11/28 23:19:43 christos Exp $ */
 /*-
  * Copyright (c) 1992, 1993, 1994
  *	The Regents of the University of California.  All rights reserved.
@@ -233,12 +233,14 @@ editor(WIN *wp, int argc, char **argv)
 	 */
 	if (screen_init(gp, NULL, &sp)) {
 		if (sp != NULL) {
+			TAILQ_NEXT(sp, q) = NULL;
 			TAILQ_INSERT_HEAD(&wp->scrq, sp, q);
 			sp->wp = wp;
 		}
 		goto err;
 	}
 	F_SET(sp, SC_EX);
+	TAILQ_NEXT(sp, q) = NULL;
 	TAILQ_INSERT_HEAD(&wp->scrq, sp, q);
 	sp->wp = wp;
 
Index: src/external/bsd/nvi/dist/common/screen.c
diff -u src/external/bsd/nvi/dist/common/screen.c:1.3 src/external/bsd/nvi/dist/common/screen.c:1.4
--- src/external/bsd/nvi/dist/common/screen.c:1.3	Mon Nov 25 17:43:46 2013
+++ src/external/bsd/nvi/dist/common/screen.c	Thu Nov 28 18:19:43 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: screen.c,v 1.3 2013/11/25 22:43:46 christos Exp $	*/
+/*	$NetBSD: screen.c,v 1.4 2013/11/28 23:19:43 christos Exp $	*/
 /*-
  * Copyright (c) 1993, 1994
  *	The Regents of the University of California.  All rights reserved.
@@ -227,6 +227,7 @@ screen_next(SCR *sp)
 	/* Try the hidden queue; if found, move screen to the display queue. */
 	if ((next = TAILQ_FIRST(&gp->hq)) != NULL) {
 		TAILQ_REMOVE(&gp->hq, next, q);
+		TAILQ_NEXT(next, q) = NULL;
 		TAILQ_INSERT_HEAD(&wp->scrq, next, q);
 		next->wp = sp->wp;
 		return (next);

Index: src/external/bsd/nvi/dist/ex/ex_edit.c
diff -u src/external/bsd/nvi/dist/ex/ex_edit.c:1.3 src/external/bsd/nvi/dist/ex/ex_edit.c:1.4
--- src/external/bsd/nvi/dist/ex/ex_edit.c:1.3	Mon Nov 25 17:43:46 2013
+++ src/external/bsd/nvi/dist/ex/ex_edit.c	Thu Nov 28 18:19:43 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: ex_edit.c,v 1.3 2013/11/25 22:43:46 christos Exp $ */
+/*	$NetBSD: ex_edit.c,v 1.4 2013/11/28 23:19:43 christos Exp $ */
 /*-
  * Copyright (c) 1992, 1993, 1994
  *	The Regents of the University of California.  All rights reserved.
@@ -129,6 +129,7 @@ ex_N_edit(SCR *sp, EXCMD *cmdp, FREF *fr
 		/* Copy file state, keep the screen and cursor the same. */
 		new->ep = sp->ep;
 		++new->ep->refcnt;
+		TAILQ_NEXT(new, eq) = NULL;
 		TAILQ_INSERT_HEAD(&new->ep->scrq, new, eq);
 
 		new->frp = frp;

Index: src/external/bsd/nvi/dist/ex/ex_tag.c
diff -u src/external/bsd/nvi/dist/ex/ex_tag.c:1.7 src/external/bsd/nvi/dist/ex/ex_tag.c:1.8
--- src/external/bsd/nvi/dist/ex/ex_tag.c:1.7	Wed Nov 27 22:15:02 2013
+++ src/external/bsd/nvi/dist/ex/ex_tag.c	Thu Nov 28 18:19:43 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: ex_tag.c,v 1.7 2013/11/28 03:15:02 christos Exp $ */
+/*	$NetBSD: ex_tag.c,v 1.8 2013/11/28 23:19:43 christos Exp $ */
 /*-
  * Copyright (c) 1992, 1993, 1994
  *	The Regents of the University of California.  All rights reserved.
@@ -311,6 +311,7 @@ ex_tag_Nswitch(SCR *sp, TAG *tp, int for
 		/* Copy file state. */
 		new->ep = sp->ep;
 		++new->ep->refcnt;
+		TAILQ_NEXT(new, eq) = NULL;
 		TAILQ_INSERT_HEAD(&new->ep->scrq, new, eq);
 
 		new->frp = tp->frp;

Index: src/external/bsd/nvi/dist/vi/v_ex.c
diff -u src/external/bsd/nvi/dist/vi/v_ex.c:1.3 src/external/bsd/nvi/dist/vi/v_ex.c:1.4
--- src/external/bsd/nvi/dist/vi/v_ex.c:1.3	Mon Nov 25 17:43:46 2013
+++ src/external/bsd/nvi/dist/vi/v_ex.c	Thu Nov 28 18:19:43 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: v_ex.c,v 1.3 2013/11/25 22:43:46 christos Exp $ */
+/*	$NetBSD: v_ex.c,v 1.4 2013/11/28 23:19:43 christos Exp $ */
 /*-
  * Copyright (c) 1992, 1993, 1994
  *	The Regents of the University of California.  All rights reserved.
@@ -523,6 +523,7 @@ v_ecl(SCR *sp)
 	/* Attach to the screen. */
 	new->ep = wp->ccl_sp->ep;
 	++new->ep->refcnt;
+	TAILQ_NEXT(new, eq) = NULL;
 	TAILQ_INSERT_HEAD(&new->ep->scrq, new, eq);
 
 	new->frp = wp->ccl_sp->frp;
Index: src/external/bsd/nvi/dist/vi/vi.c
diff -u src/external/bsd/nvi/dist/vi/vi.c:1.3 src/external/bsd/nvi/dist/vi/vi.c:1.4
--- src/external/bsd/nvi/dist/vi/vi.c:1.3	Mon Nov 25 17:43:46 2013
+++ src/external/bsd/nvi/dist/vi/vi.c	Thu Nov 28 18:19:43 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: vi.c,v 1.3 2013/11/25 22:43:46 christos Exp $ */
+/*	$NetBSD: vi.c,v 1.4 2013/11/28 23:19:43 christos Exp $ */
 /*-
  * Copyright (c) 1992, 1993, 1994
  *	The Regents of the University of California.  All rights reserved.
@@ -1033,6 +1033,7 @@ v_dtoh(SCR *sp)
 			_HMAP(tsp) = NULL;
 		}
 		TAILQ_REMOVE(&wp->scrq, tsp, q);
+		TAILQ_NEXT(tsp, q) = NULL;
 		TAILQ_INSERT_TAIL(&gp->hq, tsp, q);
 		/* XXXX Change if hidden screens per window */
 		tsp->wp = 0;
@@ -1041,6 +1042,7 @@ v_dtoh(SCR *sp)
 
 	/* Move current screen back to the display queue. */
 	TAILQ_REMOVE(&gp->hq, sp, q);
+	TAILQ_NEXT(sp, q) = NULL;
 	TAILQ_INSERT_TAIL(&wp->scrq, sp, q);
 	sp->wp = wp;
 

Index: src/external/bsd/nvi/dist/vi/vs_split.c
diff -u src/external/bsd/nvi/dist/vi/vs_split.c:1.4 src/external/bsd/nvi/dist/vi/vs_split.c:1.5
--- src/external/bsd/nvi/dist/vi/vs_split.c:1.4	Wed Nov 27 09:21:31 2013
+++ src/external/bsd/nvi/dist/vi/vs_split.c	Thu Nov 28 18:19:43 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: vs_split.c,v 1.4 2013/11/27 14:21:31 mrg Exp $ */
+/*	$NetBSD: vs_split.c,v 1.5 2013/11/28 23:19:43 christos Exp $ */
 /*-
  * Copyright (c) 1993, 1994
  *	The Regents of the University of California.  All rights reserved.
@@ -317,6 +317,7 @@ vs_insert(SCR *sp, WIN *wp)
 	 * If we reached the end, this screen goes there.  Otherwise,
 	 * put it before or after the screen where we stopped.
 	 */
+	TAILQ_NEXT(sp, q) = NULL;
 	if (tsp == NULL) {
 		TAILQ_INSERT_TAIL(&wp->scrq, sp, q);
 	} else if (tsp->roff < sp->roff ||
@@ -781,6 +782,7 @@ vs_swap(SCR *sp, SCR **nspp, const char 
 	 * code will move the old one to the background queue.
 	 */
 	TAILQ_REMOVE(&gp->hq, nsp, q);
+	TAILQ_NEXT(nsp, q) = NULL;
 	TAILQ_INSERT_AFTER(&wp->scrq, sp, nsp, q);
 
 	/*

Reply via email to