r1353 - in trunk: . ncurses

jim at linuxfromscratch.org jim at linuxfromscratch.org
Wed Jan 18 07:55:00 PST 2006


Author: jim
Date: 2006-01-18 08:54:40 -0700 (Wed, 18 Jan 2006)
New Revision: 1353

Added:
   trunk/ncurses/ncurses-5.5-fixes-1.patch
Modified:
   trunk/
Log:
 r1692 at server:  jim | 2006-01-17 18:09:06 -0800
 Added: ncurses-5.5-fixes-1.patch



Property changes on: trunk
___________________________________________________________________
Name: svk:merge
   - cc2644d5-6cf8-0310-b111-c40428001e49:/patches:1685
   + cc2644d5-6cf8-0310-b111-c40428001e49:/patches:1692

Added: trunk/ncurses/ncurses-5.5-fixes-1.patch
===================================================================
--- trunk/ncurses/ncurses-5.5-fixes-1.patch	2006-01-18 04:14:30 UTC (rev 1352)
+++ trunk/ncurses/ncurses-5.5-fixes-1.patch	2006-01-18 15:54:40 UTC (rev 1353)
@@ -0,0 +1,225 @@
+Submitted by: Alexander E. Patrakov
+Date: 2005-12-07
+Initial Package Version: 5.5
+Upstream Status: Backport
+Origin: Cherry-picked from ftp://invisible-island.net/ncurses/5.5/*.gz
+Description: Fixes the following bugs:
+
+* memory leak in keyname()
+* mishandling of overlapped wide characters, http://bugs.debian.org/316663
+* problems with line-drawing characters on cygwin, http://bugs.debian.org/338234
+* mishandling of EINTR in tcgetattr/tcsetattr, http://bugs.debian.org/339518
+* mishandling of single-column multibyte characters, http://bugs.debian.org/341661
+
+--- ncurses-5.5-20051015+/ncurses/base/MKkeyname.awk	2005-04-30 19:26:25.000000000 +0000
++++ ncurses-5.5-20051022/ncurses/base/MKkeyname.awk	2005-10-22 19:01:23.000000000 +0000
+@@ -97,6 +97,7 @@
+ 	print "						break;"
+ 	print "					}"
+ 	print "				}"
++	print "				free(bound);"
+ 	print "				if (result != 0)"
+ 	print "					break;"
+ 	print "			}"
+--- ncurses-5.5-20051022+/ncurses/base/lib_addch.c	2005-03-27 16:52:16.000000000 +0000
++++ ncurses-5.5-20051029/ncurses/base/lib_addch.c	2005-10-30 00:51:36.000000000 +0000
+@@ -315,7 +315,7 @@
+ 	     * setup though.
+ 	     */
+ 	    for (i = 0; i < len; ++i) {
+-		if (isWidecBase(win->_line[y].text[i])) {
++		if (isWidecBase(win->_line[y].text[x + i])) {
+ 		    break;
+ 		} else if (isWidecExt(win->_line[y].text[x + i])) {
+ 		    for (j = i; x + j <= win->_maxx; ++j) {
+@@ -334,7 +334,9 @@
+ 	    for (i = 0; i < len; ++i) {
+ 		NCURSES_CH_T value = ch;
+ 		SetWidecExt(value, i);
+-		TR(TRACE_VIRTPUT, ("multicolumn %d:%d", i + 1, len));
++		TR(TRACE_VIRTPUT, ("multicolumn %d:%d (%d,%d)",
++				   i + 1, len,
++				   win->_begy + y, win->_begx + x));
+ 		line->text[x] = value;
+ 		CHANGED_CELL(line, x);
+ 		++x;
+--- ncurses-5.5-20051022+/ncurses/base/lib_bkgd.c	2005-04-16 18:03:48.000000000 +0000
++++ ncurses-5.5-20051029/ncurses/base/lib_bkgd.c	2005-10-30 00:41:09.000000000 +0000
+@@ -131,11 +131,11 @@
+ 
+ 	for (y = 0; y <= win->_maxy; y++) {
+ 	    for (x = 0; x <= win->_maxx; x++) {
+-		if (CharEq(win->_line[y].text[x], old_bkgrnd))
++		if (CharEq(win->_line[y].text[x], old_bkgrnd)) {
+ 		    win->_line[y].text[x] = win->_nc_bkgd;
+-		else {
++		} else {
+ 		    NCURSES_CH_T wch = win->_line[y].text[x];
+-		    RemAttr(wch, (~A_ALTCHARSET));
++		    RemAttr(wch, (~(A_ALTCHARSET | A_CHARTEXT)));
+ 		    win->_line[y].text[x] = _nc_render(win, wch);
+ 		}
+ 	    }
+--- ncurses-5.5-20051022+/ncurses/base/lib_erase.c	2001-12-19 01:06:13.000000000 +0000
++++ ncurses-5.5-20051029/ncurses/base/lib_erase.c	2005-10-30 00:36:36.000000000 +0000
+@@ -58,6 +59,24 @@
+ 	    start = win->_line[y].text;
+ 	    end = &start[win->_maxx];
+ 
++	    /*
++	     * If this is a derived window, we have to handle the case where
++	     * a multicolumn character extends into the window that we are
++	     * erasing.
++	     */
++	    if_WIDEC({
++		if (isWidecExt(start[0])) {
++		    int x = (win->_parent != 0) ? (win->_begx) : 0;
++		    while (x-- > 0) {
++			if (isWidecBase(start[-1])) {
++			    --start;
++			    break;
++			}
++			--start;
++		    }
++		}
++	    });
++
+ 	    for (sp = start; sp <= end; sp++)
+ 		*sp = blank;
+ 
+--- ncurses-5.5-20051029+/misc/terminfo.src	2005-10-26 23:21:06.000000000 +0000
++++ ncurses-5.5-20051112/misc/terminfo.src	2005-11-12 23:01:03.000000000 +0000
+@@ -4731,32 +4731,35 @@
+ #   civis [make cursor invisible] causes everything to stackdump? \E[?25l\E[?1c
+ #   ech   [erase characters param] broken \E[%p1%dX
+ #   kcbt  [back-tab key] not implemented in cygwin?  \E[Z
++#
++# 2005/11/12 -TD
++#	Remove cbt since it does not work in current cygwin
++#	Add 'mir' and 'in' flags based on tack
+ cygwin|ansi emulation for Cygwin, 
+-	am, hs, in, msgr, xon, 
++	am, hs, mir, msgr, xon, 
+ 	colors#8, it#8, pairs#64, 
+ 	acsc=+\020\,\021-\030.^Y0\333`\004a\261f\370g\361h\260j\331k\277l\332m\300n\305o~p\304q\304r\304s_t\303u\264v\301w\302x\263y\363z\362{\343|\330}\234~\376, 
+-	bel=^G, bold=\E[1m, cbt=\E[Z, clear=\E[H\E[J, cr=^M, 
+-	cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=\E[B, 
+-	cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, 
+-	cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P, 
+-	dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, el1=\E[1K, fsl=^G, 
+-	home=\E[H, hpa=\E[%i%p1%dG, ht=^I, ich=\E[%p1%d@, 
+-	ich1=\E[@, il=\E[%p1%dL, il1=\E[L, ind=^J, invis=\E[8m, 
+-	kb2=\E[G, kbs=^H, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, 
+-	kcuu1=\E[A, kdch1=\E[3~, kend=\E[4~, kf1=\E[[A, 
+-	kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[25~, 
+-	kf14=\E[26~, kf15=\E[28~, kf16=\E[29~, kf17=\E[31~, 
+-	kf18=\E[32~, kf19=\E[33~, kf2=\E[[B, kf20=\E[34~, 
+-	kf3=\E[[C, kf4=\E[[D, kf5=\E[[E, kf6=\E[17~, kf7=\E[18~, 
+-	kf8=\E[19~, kf9=\E[20~, khome=\E[1~, kich1=\E[2~, 
+-	knp=\E[6~, kpp=\E[5~, kspd=^Z, nel=^M^J, op=\E[39;49m, 
+-	rc=\E8, rev=\E[7m, ri=\EM, rmacs=\E[10m, 
+-	rmcup=\E[2J\E[?47l\E8, rmir=\E[4l, rmpch=\E[10m, 
+-	rmso=\E[27m, rmul=\E[24m, rs1=\Ec\E]R, sc=\E7, 
+-	setab=\E[4%p1%dm, setaf=\E[3%p1%dm, 
++	bel=^G, bold=\E[1m, clear=\E[H\E[J, cr=^M, cub=\E[%p1%dD, 
++	cub1=^H, cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, 
++	cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, 
++	cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, 
++	dl1=\E[M, ed=\E[J, el=\E[K, el1=\E[1K, fsl=^G, home=\E[H, 
++	hpa=\E[%i%p1%dG, ht=^I, ich=\E[%p1%d@, ich1=\E[@, 
++	il=\E[%p1%dL, il1=\E[L, ind=^J, invis=\E[8m, kb2=\E[G, 
++	kbs=^H, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, 
++	kdch1=\E[3~, kend=\E[4~, kf1=\E[[A, kf10=\E[21~, 
++	kf11=\E[23~, kf12=\E[24~, kf13=\E[25~, kf14=\E[26~, 
++	kf15=\E[28~, kf16=\E[29~, kf17=\E[31~, kf18=\E[32~, 
++	kf19=\E[33~, kf2=\E[[B, kf20=\E[34~, kf3=\E[[C, kf4=\E[[D, 
++	kf5=\E[[E, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, 
++	khome=\E[1~, kich1=\E[2~, knp=\E[6~, kpp=\E[5~, kspd=^Z, 
++	nel=^M^J, op=\E[39;49m, rc=\E8, rev=\E[7m, ri=\EM, 
++	rmacs=\E[10m, rmcup=\E[2J\E[?47l\E8, rmir=\E[4l, 
++	rmpch=\E[10m, rmso=\E[27m, rmul=\E[24m, rs1=\Ec\E]R, 
++	sc=\E7, setab=\E[4%p1%dm, setaf=\E[3%p1%dm, 
+ 	sgr=\E[0;10%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;1%;%?%p7%t;8%;%?%p9%t;11%;m, 
+-	sgr0=\E[0;10m, smacs=\E11m, smcup=\E7\E[?47h, smir=\E[4h, 
+-	smpch=\E[11m, smso=\E[7m, smul=\E[4m, tsl=\E];, 
++	sgr0=\E[0;10m, smacs=\E[11m, smcup=\E7\E[?47h, 
++	smir=\E[4h, smpch=\E[11m, smso=\E[7m, smul=\E[4m, tsl=\E];, 
+ 	u6=\E[%i%d;%dR, u7=\E[6n, u8=\E[?6c, u9=\E[c, 
+ 	vpa=\E[%i%p1%dd, 
+ 
+--- ncurses-5.5-20051112+/ncurses/tinfo/lib_ttyflags.c	2003-05-17 23:50:37.000000000 +0000
++++ ncurses-5.5-20051119/ncurses/tinfo/lib_ttyflags.c	2005-11-19 20:36:23.000000000 +0000
+@@ -59,28 +59,51 @@
+ NCURSES_EXPORT(int)
+ _nc_get_tty_mode(TTY * buf)
+ {
+-    if (cur_term == 0
+-	|| GET_TTY(cur_term->Filedes, buf) != 0) {
+-	memset(buf, 0, sizeof(*buf));
+-	return (ERR);
++    int result = OK;
++
++    if (cur_term == 0) {
++	result = ERR;
++    } else {
++	for (;;) {
++	    if (GET_TTY(cur_term->Filedes, buf) != 0) {
++		if (errno == EINTR)
++		    continue;
++		result = ERR;
++	    }
++	    break;
++	}
+     }
++
++    if (result == ERR)
++	memset(buf, 0, sizeof(*buf));
++
+     TR(TRACE_BITS, ("_nc_get_tty_mode(%d): %s",
+ 		    cur_term->Filedes, _nc_trace_ttymode(buf)));
+-    return (OK);
++    return (result);
+ }
+ 
+ NCURSES_EXPORT(int)
+ _nc_set_tty_mode(TTY * buf)
+ {
+-    if (cur_term == 0
+-	|| SET_TTY(cur_term->Filedes, buf) != 0) {
+-	if ((errno == ENOTTY) && (SP != 0))
+-	    SP->_notty = TRUE;
+-	return (ERR);
++    int result = OK;
++
++    if (cur_term == 0) {
++	result = ERR;
++    } else {
++	for (;;) {
++	    if (SET_TTY(cur_term->Filedes, buf) != 0) {
++		if (errno == EINTR)
++		    continue;
++		if ((errno == ENOTTY) && (SP != 0))
++		    SP->_notty = TRUE;
++		result = ERR;
++	    }
++	    break;
++	}
+     }
+     TR(TRACE_BITS, ("_nc_set_tty_mode(%d): %s",
+ 		    cur_term->Filedes, _nc_trace_ttymode(buf)));
+-    return (OK);
++    return (result);
+ }
+ 
+ NCURSES_EXPORT(int)
+--- ncurses-5.5-20051126+/ncurses/widechar/lib_ins_wch.c	2005-09-17 19:25:13.000000000 +0000
++++ ncurses-5.5-20051203/ncurses/widechar/lib_ins_wch.c	2005-12-03 20:24:19.000000000 +0000
+@@ -117,7 +117,7 @@
+ 	    for (cp = wstr; *cp && ((cp - wstr) < n); cp++) {
+ 		int len = wcwidth(*cp);
+ 
+-		if (len != 1) {
++		if (len != 1 || !is8bits(*cp)) {
+ 		    cchar_t tmp_cchar;
+ 		    wchar_t tmp_wchar = *cp;
+ 		    memset(&tmp_cchar, 0, sizeof(tmp_cchar));




More information about the patches mailing list