Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 6 Feb 2014 11:38:40 +0000 (UTC)
From:      Aleksandr Rybalko <ray@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r261547 - head/sys/teken
Message-ID:  <201402061138.s16BceLv096268@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: ray
Date: Thu Feb  6 11:38:39 2014
New Revision: 261547
URL: http://svnweb.freebsd.org/changeset/base/261547

Log:
  Fix crash on load of bigger font. It reduce width and height of terminal, but
  current cursor position stay bigger that terminal window size, so next input
  triggers assert.
  
  Reported by:	emaste
  
  Sponsored by:	The FreeBSD Foundation

Modified:
  head/sys/teken/teken.c

Modified: head/sys/teken/teken.c
==============================================================================
--- head/sys/teken/teken.c	Thu Feb  6 10:52:51 2014	(r261546)
+++ head/sys/teken/teken.c	Thu Feb  6 11:38:39 2014	(r261547)
@@ -338,10 +338,26 @@ teken_get_winsize(teken_t *t)
 	return (&t->t_winsize);
 }
 
+static void
+taken_trim_cursor_pos(teken_t *t, const teken_pos_t *new)
+{
+	const teken_pos_t *cur;
+
+	cur = &t->t_winsize;
+
+	if (cur->tp_row < new->tp_row || cur->tp_col < new->tp_col)
+		return;
+	if (t->t_cursor.tp_row >= new->tp_row)
+		t->t_cursor.tp_row = new->tp_row - 1;
+	if (t->t_cursor.tp_col >= new->tp_col)
+		t->t_cursor.tp_col = new->tp_col - 1;
+}
+
 void
 teken_set_winsize(teken_t *t, const teken_pos_t *p)
 {
 
+	taken_trim_cursor_pos(t, p);
 	t->t_winsize = *p;
 	teken_subr_do_reset(t);
 }
@@ -350,6 +366,7 @@ void
 teken_set_winsize_noreset(teken_t *t, const teken_pos_t *p)
 {
 
+	taken_trim_cursor_pos(t, p);
 	t->t_winsize = *p;
 	teken_subr_do_resize(t);
 }



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201402061138.s16BceLv096268>