xterm: Changes to 'debian-unstable'
debian/changelog | 15 +
debian/patches/100_fix_crash_with_tektronix_mode.diff | 70 ++++++++
debian/patches/101_670638.diff | 141 ++++++++++++++++++
debian/patches/102_MdFlag.diff | 19 ++
debian/patches/103_nullptr.diff | 28 +++
debian/patches/series | 5
6 files changed, 271 insertions(+), 7 deletions(-)
New commits:
commit 4b8d8d295fd453ad57ef5d90d04f6fc9d2f272ce
Author: Julien Cristau <jcristau@debian.org>
Date: Tue Nov 27 19:57:50 2012 +0100
Upload to unstable
diff --git a/debian/changelog b/debian/changelog
index 267c950..16f730e 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,4 +1,4 @@
-xterm (278-3) UNRELEASED; urgency=low
+xterm (278-3) unstable; urgency=low
[ Timo Aaltonen ]
* control: Mark the package as Multi-Arch: foreign.
@@ -13,7 +13,7 @@ xterm (278-3) UNRELEASED; urgency=low
- add a null-pointer check in OkPasswd macro to fix a problem in resize
with Fedora 17 and a serial console (report/patch by Daniel Drake).
- -- Timo Aaltonen <tjaalton@ubuntu.com> Fri, 28 Sep 2012 13:11:17 +0300
+ -- Julien Cristau <jcristau@debian.org> Tue, 27 Nov 2012 19:57:47 +0100
xterm (278-2) unstable; urgency=low
commit 120bdbd68c8447024b3ca2c1f14687c447914e82
Author: Julien Cristau <jcristau@debian.org>
Date: Tue Nov 27 19:57:28 2012 +0100
Apply a few patches recommended by upstream in #694375 (thanks!)
- amend patch from 278-2 to catch more cases
- amend fix for Debian #650291 in patch #277 changes to account for
different data returned by vnc4server (closes: #670638)
- correct macro definition used for testing modes used in ANSI/DEC
request-mode controls introduced in patch #262
- add a null-pointer check in OkPasswd macro to fix a problem in resize
with Fedora 17 and a serial console (report/patch by Daniel Drake).
diff --git a/debian/changelog b/debian/changelog
index 356698b..267c950 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,7 +1,18 @@
xterm (278-3) UNRELEASED; urgency=low
+ [ Timo Aaltonen ]
* control: Mark the package as Multi-Arch: foreign.
+ [ Julien Cristau ]
+ * Apply a few patches recommended by upstream in #694375 (thanks!)
+ - amend patch from 278-2 to catch more cases
+ - amend fix for Debian #650291 in patch #277 changes to account for
+ different data returned by vnc4server (closes: #670638)
+ - correct macro definition used for testing modes used in ANSI/DEC
+ request-mode controls introduced in patch #262
+ - add a null-pointer check in OkPasswd macro to fix a problem in resize
+ with Fedora 17 and a serial console (report/patch by Daniel Drake).
+
-- Timo Aaltonen <tjaalton@ubuntu.com> Fri, 28 Sep 2012 13:11:17 +0300
xterm (278-2) unstable; urgency=low
diff --git a/debian/patches/100_fix_crash_with_tektronix_mode.diff b/debian/patches/100_fix_crash_with_tektronix_mode.diff
index eade1a1..bb4ff2b 100644
--- a/debian/patches/100_fix_crash_with_tektronix_mode.diff
+++ b/debian/patches/100_fix_crash_with_tektronix_mode.diff
@@ -1,7 +1,48 @@
-Fix crash in Tektronix mode (#685458).
---- a/input.c
-+++ b/input.c
-@@ -832,7 +832,7 @@ Input(XtermWidget xw,
+# ftp://invisible-island.net/temp/xterm-278-p4.patch.gz
+# patch by Thomas E. Dickey <dickey@invisible-island.net>
+# created Tue Nov 27 10:17:35 UTC 2012
+# ------------------------------------------------------------------------------
+# charproc.c | 8 ++++----
+# input.c | 2 +-
+# misc.c | 4 ++--
+# 3 files changed, 7 insertions(+), 7 deletions(-)
+# ------------------------------------------------------------------------------
+Index: charproc.c
+--- xterm-278+/charproc.c 2012-01-19 00:22:08.000000000 +0000
++++ xterm-278-p4/charproc.c 2012-11-27 10:15:42.000000000 +0000
+@@ -3797,7 +3797,7 @@
+ XPoint spot;
+ XVaNestedList list;
+
+- if (input->xic
++ if (input && input->xic
+ && (ld = getLineData(screen, screen->cur_row)) != 0) {
+ spot.x = (short) LineCursorX(screen, ld, screen->cur_col);
+ spot.y = (short) (CursorY(screen, screen->cur_row) + xw->misc.xim_fs_ascent);
+@@ -6952,7 +6952,7 @@
+ {
+ TInput *input = lookupTInput(xw, (Widget) xw);
+
+- if (input->xim) {
++ if (input && input->xim) {
+ XCloseIM(input->xim);
+ input->xim = 0;
+ TRACE(("freed screen->xim\n"));
+@@ -7506,8 +7506,8 @@
+
+ TRACE(("xim_destroy_cb im=%lx, client=%p, call=%p\n",
+ (long) im, client_data, call_data));
+-
+- input->xic = NULL;
++ if (input)
++ input->xic = NULL;
+ XRegisterIMInstantiateCallback(XtDisplay(xw), NULL, NULL, NULL,
+ xim_instantiate_cb, NULL);
+ }
+Index: input.c
+--- xterm-278+/input.c 2012-01-07 02:01:05.000000000 +0000
++++ xterm-278-p4/input.c 2012-11-27 10:15:42.000000000 +0000
+@@ -832,7 +832,7 @@
{
#if OPT_I18N_SUPPORT && OPT_INPUT_METHOD
TInput *input = lookupTInput(xw, (Widget) xw);
@@ -10,3 +51,24 @@ Fix crash in Tektronix mode (#685458).
Status status_return;
#if OPT_WIDE_CHARS
if (screen->utf8_mode) {
+Index: misc.c
+--- xterm-278+/misc.c 2012-01-07 01:57:52.000000000 +0000
++++ xterm-278-p4/misc.c 2012-11-27 10:15:42.000000000 +0000
+@@ -180,7 +180,7 @@
+ {
+ #if OPT_I18N_SUPPORT && OPT_INPUT_METHOD
+ TInput *input = lookupTInput(xw, (Widget) xw);
+- if (input->xic)
++ if (input && input->xic)
+ XSetICFocus(input->xic);
+ #endif
+
+@@ -218,7 +218,7 @@
+ {
+ #if OPT_I18N_SUPPORT && OPT_INPUT_METHOD
+ TInput *input = lookupTInput(xw, (Widget) xw);
+- if (input->xic)
++ if (input && input->xic)
+ XUnsetICFocus(input->xic);
+ #endif
+
diff --git a/debian/patches/101_670638.diff b/debian/patches/101_670638.diff
new file mode 100644
index 0000000..c3e13bf
--- /dev/null
+++ b/debian/patches/101_670638.diff
@@ -0,0 +1,141 @@
+# ftp://invisible-island.net/temp/xterm-278-p3.patch.gz
+# patch by Thomas E. Dickey <dickey@invisible-island.net>
+# created Tue Nov 27 10:17:15 UTC 2012
+# ------------------------------------------------------------------------------
+# misc.c | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++++++---------
+# 1 file changed, 78 insertions(+), 12 deletions(-)
+# ------------------------------------------------------------------------------
+Index: misc.c
+--- xterm-278+/misc.c 2012-01-07 01:57:52.000000000 +0000
++++ xterm-278-p3/misc.c 2012-11-27 10:10:36.000000000 +0000
+@@ -2176,16 +2176,79 @@
+ #define ULONG_MAX (unsigned long)(~(0L))
+ #endif
+
+-static unsigned short
+-searchColortable(XColor * colortable, unsigned length, unsigned color)
++#define CheckColor(result, value) \
++ result = 0; \
++ if (value.red) \
++ result |= 1; \
++ if (value.green) \
++ result |= 2; \
++ if (value.blue) \
++ result |= 4
++
++#define SelectColor(state, value, result) \
++ switch (state) { \
++ default: \
++ case 1: \
++ result = value.red; \
++ break; \
++ case 2: \
++ result = value.green; \
++ break; \
++ case 4: \
++ result = value.blue; \
++ break; \
++ }
++
++/*
++ * Check if the color map consists of values in exactly one of the red, green
++ * or blue columns. If it is not, we do not know how to use it for the exact
++ * match.
++ */
++static int
++simpleColors(XColor * colortable, unsigned length)
++{
++ unsigned n;
++ int state = -1;
++ int check;
++
++ for (n = 0; n < length; ++n) {
++ if (state == -1) {
++ CheckColor(state, colortable[n]);
++ if (state == 0)
++ state = -1;
++ }
++ if (state > 0) {
++ CheckColor(check, colortable[n]);
++ if (check > 0 && check != state) {
++ state = 0;
++ break;
++ }
++ }
++ }
++ switch (state) {
++ case 1:
++ case 2:
++ case 4:
++ break;
++ default:
++ state = 0;
++ break;
++ }
++ return state;
++}
++
++static unsigned
++searchColors(XColor * colortable, unsigned length, unsigned color, int state)
+ {
+ unsigned result = 0;
+ unsigned n;
+ unsigned long best = ULONG_MAX;
+ unsigned long diff;
++ unsigned value;
+
+ for (n = 0; n < length; ++n) {
+- diff = (color - colortable[n].blue);
++ SelectColor(state, colortable[n], value);
++ diff = (color - value);
+ diff *= diff;
+ if (diff < best) {
+ #if 0
+@@ -2200,7 +2263,8 @@
+ best = diff;
+ }
+ }
+- return colortable[result].blue;
++ SelectColor(state, colortable[result], value);
++ return value;
+ }
+
+ /*
+@@ -2243,20 +2307,19 @@
+ if (result) {
+ unsigned cmap_type;
+ unsigned cmap_size;
++ int state;
+
+ getColormapInfo(screen->display, &cmap_type, &cmap_size);
+
+ if ((cmap_type & 1) == 0) {
+ XColor temp = *def;
+
+- if (loadColorTable(xw, cmap_size)) {
+- /*
+- * Note: the query will return only a value in the ".blue"
+- * member, leaving ".red" and ".green" as zeros.
+- */
+- temp.red = searchColortable(screen->cmap_data, cmap_size, save.red);
+- temp.green = searchColortable(screen->cmap_data, cmap_size, save.green);
+- temp.blue = searchColortable(screen->cmap_data, cmap_size, save.blue);
++ if (loadColorTable(xw, cmap_size)
++ && (state = simpleColors(screen->cmap_data, cmap_size)) > 0) {
++#define SearchColors(which) temp.which = (unsigned short) searchColors(screen->cmap_data, cmap_size, save.which, state)
++ SearchColors(red);
++ SearchColors(green);
++ SearchColors(blue);
+ if (XAllocColor(screen->display, cmap, &temp) != 0) {
+ #if OPT_TRACE
+ if (temp.red != save.red
+@@ -2265,6 +2328,9 @@
+ TRACE(("...improved %x/%x/%x ->%x/%x/%x\n",
+ save.red, save.green, save.blue,
+ temp.red, temp.green, temp.blue));
++ } else {
++ TRACE(("...no improvement for %x/%x/%x\n",
++ save.red, save.green, save.blue));
+ }
+ #endif
+ *def = temp;
diff --git a/debian/patches/102_MdFlag.diff b/debian/patches/102_MdFlag.diff
new file mode 100644
index 0000000..83549fc
--- /dev/null
+++ b/debian/patches/102_MdFlag.diff
@@ -0,0 +1,19 @@
+# ftp://invisible-island.net/temp/xterm-278-p2.patch.gz
+# patch by Thomas E. Dickey <dickey@invisible-island.net>
+# created Tue Nov 27 10:17:13 UTC 2012
+# ------------------------------------------------------------------------------
+# misc.c | 2 +-
+# 1 file changed, 1 insertion(+), 1 deletion(-)
+# ------------------------------------------------------------------------------
+Index: misc.c
+--- xterm-278+/misc.c 2012-01-07 01:57:52.000000000 +0000
++++ xterm-278-p2/misc.c 2012-11-27 10:00:55.000000000 +0000
+@@ -3770,7 +3770,7 @@
+ };
+
+ #define MdBool(bool) ((bool) ? mdMaybeSet : mdMaybeReset)
+-#define MdFlag(mode,flag) MdBool(xw->keyboard.flags & MODE_KAM)
++#define MdFlag(mode,flag) MdBool((mode) & (flag))
+
+ /*
+ * Reply is the same format as the query, with pair of mode/value:
diff --git a/debian/patches/103_nullptr.diff b/debian/patches/103_nullptr.diff
new file mode 100644
index 0000000..0db23e2
--- /dev/null
+++ b/debian/patches/103_nullptr.diff
@@ -0,0 +1,28 @@
+# ftp://invisible-island.net/temp/xterm-278-p1.patch.gz
+# patch by Thomas E. Dickey <dickey@invisible-island.net>
+# created Tue Nov 27 10:17:11 UTC 2012
+# ------------------------------------------------------------------------------
+# xstrings.c | 4 ++--
+# 1 file changed, 2 insertions(+), 2 deletions(-)
+# ------------------------------------------------------------------------------
+Index: xstrings.c
+--- xterm-278+/xstrings.c 2011-09-11 20:20:12.000000000 +0000
++++ xterm-278-p1/xstrings.c 2012-11-27 10:01:42.000000000 +0000
+@@ -214,7 +214,7 @@
+ struct passwd *ptr = getpwnam(name);
+ Boolean code;
+
+- if (OkPasswd(ptr)) {
++ if (ptr != 0 && OkPasswd(ptr)) {
+ code = True;
+ alloc_pw(result, ptr);
+ } else {
+@@ -234,7 +234,7 @@
+ struct passwd *ptr = getpwuid((uid_t) uid);
+ Boolean code;
+
+- if (OkPasswd(ptr)) {
++ if (ptr != 0 && OkPasswd(ptr)) {
+ code = True;
+ alloc_pw(result, ptr);
+ } else {
diff --git a/debian/patches/series b/debian/patches/series
index 98395e1..8c1dc36 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1,4 +1,7 @@
+100_fix_crash_with_tektronix_mode.diff
+101_670638.diff
+102_MdFlag.diff
+103_nullptr.diff
900_debian_xterm.diff
902_windowops.diff
904_fontops.diff
-100_fix_crash_with_tektronix_mode.diff
Reply to: