Compare commits
10 Commits
c2798983f0
...
fba97069bc
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fba97069bc | ||
|
|
132d1ee1e9 | ||
|
|
e7704ab0ab | ||
|
|
f663aef052 | ||
|
|
d3ae0cd47a | ||
|
|
b7ce624eb7 | ||
|
|
b2b7d17803 | ||
|
|
9274f2cc0b | ||
|
|
71a1c24da1 | ||
|
|
754aec757d |
24
16colors.txt
24
16colors.txt
@ -1,24 +0,0 @@
|
||||
[0;037;040mANSI-Colors v1.0
|
||||
[0;037;040m(c)1994 by: Pablo Ariel Kohan
|
||||
[0;037;040m |3 9 3 9 3 9 3 9 3 9 3 9 3 9 3 9|
|
||||
[0;037;040m |0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7|
|
||||
[0;037;040m---+-------------------------------+---
|
||||
[0;037;040m040|[0;030;040mX [0;090;040mX [0;031;040mX [0;091;040mX [0;032;040mX [0;092;040mX [0;033;040mX [0;093;040mX [0;034;040mX [0;094;040mX [0;035;040mX [0;095;040mX [0;036;040mX [0;096;040mX [0;037;040mX [0;097;040mX[0;037;040m|040
|
||||
[0;037;040m100|[0;030;100mX [0;090;100mX [0;031;100mX [0;091;100mX [0;032;100mX [0;092;100mX [0;033;100mX [0;093;100mX [0;034;100mX [0;094;100mX [0;035;100mX [0;095;100mX [0;036;100mX [0;096;100mX [0;037;100mX [0;097;100mX[0;037;040m|100
|
||||
[0;037;040m041|[0;030;041mX [0;090;041mX [0;031;041mX [0;091;041mX [0;032;041mX [0;092;041mX [0;033;041mX [0;093;041mX [0;034;041mX [0;094;041mX [0;035;041mX [0;095;041mX [0;036;041mX [0;096;041mX [0;037;041mX [0;097;041mX[0;037;040m|041
|
||||
[0;037;040m101|[0;030;101mX [0;090;101mX [0;031;101mX [0;091;101mX [0;032;101mX [0;092;101mX [0;033;101mX [0;093;101mX [0;034;101mX [0;094;101mX [0;035;101mX [0;095;101mX [0;036;101mX [0;096;101mX [0;037;101mX [0;097;101mX[0;037;040m|101
|
||||
[0;037;040m042|[0;030;042mX [0;090;042mX [0;031;042mX [0;091;042mX [0;032;042mX [0;092;042mX [0;033;042mX [0;093;042mX [0;034;042mX [0;094;042mX [0;035;042mX [0;095;042mX [0;036;042mX [0;096;042mX [0;037;042mX [0;097;042mX[0;037;040m|042
|
||||
[0;037;040m102|[0;030;102mX [0;090;102mX [0;031;102mX [0;091;102mX [0;032;102mX [0;092;102mX [0;033;102mX [0;093;102mX [0;034;102mX [0;094;102mX [0;035;102mX [0;095;102mX [0;036;102mX [0;096;102mX [0;037;102mX [0;097;102mX[0;037;040m|102
|
||||
[0;037;040m043|[0;030;043mX [0;090;043mX [0;031;043mX [0;091;043mX [0;032;043mX [0;092;043mX [0;033;043mX [0;093;043mX [0;034;043mX [0;094;043mX [0;035;043mX [0;095;043mX [0;036;043mX [0;096;043mX [0;037;043mX [0;097;043mX[0;037;040m|043
|
||||
[0;037;040m103|[0;030;103mX [0;090;103mX [0;031;103mX [0;091;103mX [0;032;103mX [0;092;103mX [0;033;103mX [0;093;103mX [0;034;103mX [0;094;103mX [0;035;103mX [0;095;103mX [0;036;103mX [0;096;103mX [0;037;103mX [0;097;103mX[0;037;040m|103
|
||||
[0;037;040m044|[0;030;044mX [0;090;044mX [0;031;044mX [0;091;044mX [0;032;044mX [0;092;044mX [0;033;044mX [0;093;044mX [0;034;044mX [0;094;044mX [0;035;044mX [0;095;044mX [0;036;044mX [0;096;044mX [0;037;044mX [0;097;044mX[0;037;040m|044
|
||||
[0;037;040m104|[0;030;104mX [0;090;104mX [0;031;104mX [0;091;104mX [0;032;104mX [0;092;104mX [0;033;104mX [0;093;104mX [0;034;104mX [0;094;104mX [0;035;104mX [0;095;104mX [0;036;104mX [0;096;104mX [0;037;104mX [0;097;104mX[0;037;040m|104
|
||||
[0;037;040m045|[0;030;045mX [0;090;045mX [0;031;045mX [0;091;045mX [0;032;045mX [0;092;045mX [0;033;045mX [0;093;045mX [0;034;045mX [0;094;045mX [0;035;045mX [0;095;045mX [0;036;045mX [0;096;045mX [0;037;045mX [0;097;045mX[0;037;040m|045
|
||||
[0;037;040m105|[0;030;105mX [0;090;105mX [0;031;105mX [0;091;105mX [0;032;105mX [0;092;105mX [0;033;105mX [0;093;105mX [0;034;105mX [0;094;105mX [0;035;105mX [0;095;105mX [0;036;105mX [0;096;105mX [0;037;105mX [0;097;105mX[0;037;040m|105
|
||||
[0;037;040m046|[0;030;046mX [0;090;046mX [0;031;046mX [0;091;046mX [0;032;046mX [0;092;046mX [0;033;046mX [0;093;046mX [0;034;046mX [0;094;046mX [0;035;046mX [0;095;046mX [0;036;046mX [0;096;046mX [0;037;046mX [0;097;046mX[0;037;040m|046
|
||||
[0;037;040m106|[0;030;106mX [0;090;106mX [0;031;106mX [0;091;106mX [0;032;106mX [0;092;106mX [0;033;106mX [0;093;106mX [0;034;106mX [0;094;106mX [0;035;106mX [0;095;106mX [0;036;106mX [0;096;106mX [0;037;106mX [0;097;106mX[0;037;040m|106
|
||||
[0;037;040m047|[0;030;047mX [0;090;047mX [0;031;047mX [0;091;047mX [0;032;047mX [0;092;047mX [0;033;047mX [0;093;047mX [0;034;047mX [0;094;047mX [0;035;047mX [0;095;047mX [0;036;047mX [0;096;047mX [0;037;047mX [0;097;047mX[0;037;040m|047
|
||||
[0;037;040m107|[0;030;107mX [0;090;107mX [0;031;107mX [0;091;107mX [0;032;107mX [0;092;107mX [0;033;107mX [0;093;107mX [0;034;107mX [0;094;107mX [0;035;107mX [0;095;107mX [0;036;107mX [0;096;107mX [0;037;107mX [0;097;107mX[0;037;040m|107
|
||||
[0;037;040m---+-------------------------------+---
|
||||
[0;037;040m |3 9 3 9 3 9 3 9 3 9 3 9 3 9 3 9|
|
||||
[0;037;040m |0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7|
|
||||
52
backport-CVE-2021-27135.patch
Normal file
52
backport-CVE-2021-27135.patch
Normal file
@ -0,0 +1,52 @@
|
||||
From 82ba55b8f994ab30ff561a347b82ea340ba7075c Mon Sep 17 00:00:00 2001
|
||||
From: "Thomas E. Dickey" <dickey@invisible-island.net>
|
||||
Date: Tue, 9 Feb 2021 23:04:41 +0000
|
||||
Subject: [PATCH] snapshot of project "xterm", label xterm-365d
|
||||
|
||||
--- a/button.c
|
||||
+++ b/button.c
|
||||
@@ -3669,6 +3669,7 @@
|
||||
{
|
||||
TScreen *screen = TScreenOf(xw);
|
||||
int i, j = 0;
|
||||
+ size_t have = 0;
|
||||
int eol;
|
||||
Char *line;
|
||||
Char *lp;
|
||||
@@ -3695,7 +3696,11 @@
|
||||
|
||||
/* UTF-8 may require more space */
|
||||
if_OPT_WIDE_CHARS(screen, {
|
||||
- j *= 4;
|
||||
+ if (j > 0) {
|
||||
+ if (screen->max_combining > 0)
|
||||
+ j += screen->max_combining;
|
||||
+ j *= 6;
|
||||
+ }
|
||||
});
|
||||
|
||||
/* now get some memory to save it in */
|
||||
@@ -3732,10 +3737,20 @@
|
||||
}
|
||||
*lp = '\0'; /* make sure we have end marked */
|
||||
|
||||
- TRACE(("Salted TEXT:%d:%s\n", (int) (lp - line),
|
||||
- visibleChars(line, (unsigned) (lp - line))));
|
||||
+ have = (size_t) (lp - line);
|
||||
+ /*
|
||||
+ * Scanning the buffer twice is unnecessary. Discard unwanted memory if
|
||||
+ * the estimate is too-far off.
|
||||
+ */
|
||||
+ if ((have * 2) < (size_t) j) {
|
||||
+ screen->selection_size = have + 1;
|
||||
+ line = realloc(line, screen->selection_size);
|
||||
+ }
|
||||
|
||||
- screen->selection_length = (unsigned long) (lp - line);
|
||||
+ TRACE(("Salted TEXT:%d:%s\n", (int) have,
|
||||
+ visibleChars(line, (unsigned) have)));
|
||||
+
|
||||
+ screen->selection_length = (unsigned long) have;
|
||||
}
|
||||
|
||||
#if OPT_PASTE64
|
||||
317
backport-CVE-2022-24130.patch
Normal file
317
backport-CVE-2022-24130.patch
Normal file
@ -0,0 +1,317 @@
|
||||
From dc3ed827ae4c948ddb024fec329d223b7390d829 Mon Sep 17 00:00:00 2001
|
||||
From: rpm-build <rpm-build>
|
||||
Date: Wed, 23 Feb 2022 11:30:50 +0800
|
||||
Subject: [PATCH] backport-CVE-2022-14130
|
||||
|
||||
---
|
||||
MANIFEST | 2 +-
|
||||
graphics_sixel.c | 24 +++++++++++----
|
||||
package/debian/copyright | 2 +-
|
||||
ptyx.h | 4 +--
|
||||
terminfo | 63 ++++++++++++++++++++++++++--------------
|
||||
xterm.appdata.xml | 2 +-
|
||||
xterm.log.html | 4 +--
|
||||
7 files changed, 67 insertions(+), 34 deletions(-)
|
||||
|
||||
diff --git a/MANIFEST b/MANIFEST
|
||||
index 3c91d9d..1b9bd60 100644
|
||||
--- a/MANIFEST
|
||||
+++ b/MANIFEST
|
||||
@@ -1,4 +1,4 @@
|
||||
-MANIFEST for xterm-334, version xterm-334
|
||||
+MANIFEST for xterm-334, version xterm-370
|
||||
--------------------------------------------------------------------------------
|
||||
MANIFEST this file
|
||||
256colres.h resource-definitions for 256-color mode
|
||||
diff --git a/graphics_sixel.c b/graphics_sixel.c
|
||||
index d066911..158e451 100644
|
||||
--- a/graphics_sixel.c
|
||||
+++ b/graphics_sixel.c
|
||||
@@ -1,7 +1,8 @@
|
||||
-/* $XTermId: graphics_sixel.c,v 1.18 2016/06/05 20:04:01 tom Exp $ */
|
||||
+/* $XTermId: graphics_sixel.c,v 1.30 2022/01/30 19:25:32 tom Exp $ */
|
||||
|
||||
/*
|
||||
- * Copyright 2014,2016 by Ross Combs
|
||||
+* Copyright 2014-2021,2022 by Ross Combs
|
||||
+ * Copyright 2014-2021,2022 by Thomas E. Dickey
|
||||
*
|
||||
* All Rights Reserved
|
||||
*
|
||||
@@ -141,7 +142,7 @@ init_sixel_background(Graphic *graphic, SixelContext const *context)
|
||||
graphic->color_registers_used[context->background] = 1;
|
||||
}
|
||||
|
||||
-static void
|
||||
+static Boolean
|
||||
set_sixel(Graphic *graphic, SixelContext const *context, int sixel)
|
||||
{
|
||||
const int mh = graphic->max_height;
|
||||
@@ -175,8 +176,10 @@ set_sixel(Graphic *graphic, SixelContext const *context, int sixel)
|
||||
}
|
||||
} else {
|
||||
TRACE(("sixel pixel %d out of bounds\n", pix));
|
||||
+ return False;
|
||||
}
|
||||
}
|
||||
+ return True;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -451,7 +454,12 @@ parse_sixel(XtermWidget xw, ANSI *params, char const *string)
|
||||
init_sixel_background(graphic, &context);
|
||||
graphic->valid = 1;
|
||||
}
|
||||
- set_sixel(graphic, &context, sixel);
|
||||
+ if (sixel) {
|
||||
+ if (!set_sixel(graphic, &context, sixel)) {
|
||||
+ context.col = 0;
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
context.col++;
|
||||
} else if (ch == '$') { /* DECGCR */
|
||||
/* ignore DECCRNLM in sixel mode */
|
||||
@@ -529,8 +537,12 @@ parse_sixel(XtermWidget xw, ANSI *params, char const *string)
|
||||
graphic->valid = 1;
|
||||
}
|
||||
for (i = 0; i < Pcount; i++) {
|
||||
- set_sixel(graphic, &context, sixel);
|
||||
- context.col++;
|
||||
+ if (set_sixel(graphic, &context, sixel)) {
|
||||
+ context.col++;
|
||||
+ } else {
|
||||
+ context.col = 0;
|
||||
+ break;
|
||||
+ }
|
||||
}
|
||||
} else if (ch == '#') { /* DECGCI */
|
||||
ANSI color_params;
|
||||
diff --git a/package/debian/copyright b/package/debian/copyright
|
||||
index ddf3bff..9c0d62b 100644
|
||||
--- a/package/debian/copyright
|
||||
+++ b/package/debian/copyright
|
||||
@@ -35,7 +35,7 @@ authorization.
|
||||
Files: * */*
|
||||
License: MIT-X11
|
||||
|
||||
-Copyright 1996-2017,2018 by Thomas E. Dickey
|
||||
+Copyright 1996-2021,2022 by Thomas E. Dickey
|
||||
|
||||
(date ranges vary, depending on when the respective files were first changed
|
||||
significantly, and run through the most recent change date).
|
||||
diff --git a/ptyx.h b/ptyx.h
|
||||
index 9f7f74c..8ccc95c 100644
|
||||
--- a/ptyx.h
|
||||
+++ b/ptyx.h
|
||||
@@ -1,7 +1,7 @@
|
||||
-/* $XTermId: ptyx.h,v 1.905 2018/08/10 18:40:07 tom Exp $ */
|
||||
+/* $XTermId: ptyx.h,v 1.1047 2022/01/30 19:29:37 tom Exp $ */
|
||||
|
||||
/*
|
||||
- * Copyright 1999-2017,2018 by Thomas E. Dickey
|
||||
+* Copyright 1999-2021,2022 by Thomas E. Dickey
|
||||
*
|
||||
* All Rights Reserved
|
||||
*
|
||||
diff --git a/terminfo b/terminfo
|
||||
index ee558e4..cf8985e 100644
|
||||
--- a/terminfo
|
||||
+++ b/terminfo
|
||||
@@ -1,10 +1,10 @@
|
||||
-# $XTermId: terminfo,v 1.177 2017/12/25 21:08:55 tom Exp $
|
||||
+# $XTermId: terminfo,v 1.202 2022/01/30 19:29:59 tom Exp $
|
||||
#
|
||||
# Updates/notes/new entries (e.g., xterm-8bit, xterm-16color, xterm-256color)
|
||||
# - Thomas E. Dickey
|
||||
#
|
||||
#------------------------------------------------------------------------------
|
||||
-# Copyright 1996-2016,2017 by Thomas E. Dickey
|
||||
+# Copyright 1996-2021,2022 by Thomas E. Dickey
|
||||
#
|
||||
# All Rights Reserved
|
||||
#
|
||||
@@ -1038,7 +1038,8 @@ xterm-basic|modern xterm terminal emulator - common,
|
||||
%t;4
|
||||
%;
|
||||
%?
|
||||
- %p1%p3%|
|
||||
+ %p1
|
||||
+ %p3%|
|
||||
%t;7
|
||||
%;
|
||||
%?
|
||||
@@ -1354,7 +1355,8 @@ xterm-bold|xterm with bold instead of underline (X Window System),
|
||||
%t;1
|
||||
%;
|
||||
%?
|
||||
- %p1%p3%|
|
||||
+ %p1
|
||||
+ %p3%|
|
||||
%t;7
|
||||
%;
|
||||
m,
|
||||
@@ -1631,7 +1633,8 @@ xterm-16color|xterm with 16 colors,
|
||||
setab=\E[
|
||||
%?
|
||||
%p1%{8}%<
|
||||
- %t%p1%{40}%+
|
||||
+ %t
|
||||
+ %p1%{40}%+
|
||||
%e
|
||||
%p1%{92}%+
|
||||
%;
|
||||
@@ -1639,13 +1642,15 @@ xterm-16color|xterm with 16 colors,
|
||||
setaf=\E[
|
||||
%?
|
||||
%p1%{8}%<
|
||||
- %t%p1%{30}%+
|
||||
+ %t
|
||||
+ %p1%{30}%+
|
||||
%e
|
||||
%p1%{82}%+
|
||||
%;
|
||||
%dm,
|
||||
setb=
|
||||
- %p1%{8}%/%{6}%*%{4}%+\E[%d%p1%{8}%m%Pa
|
||||
+ %p1%{8}%/%{6}%*%{4}%+\E[%d
|
||||
+ %p1%{8}%m%Pa
|
||||
%?%ga%{1}%=
|
||||
%t4
|
||||
%e%ga%{3}%=
|
||||
@@ -1658,7 +1663,8 @@ xterm-16color|xterm with 16 colors,
|
||||
%;
|
||||
m,
|
||||
setf=
|
||||
- %p1%{8}%/%{6}%*%{3}%+\E[%d%p1%{8}%m%Pa
|
||||
+ %p1%{8}%/%{6}%*%{3}%+\E[%d
|
||||
+ %p1%{8}%m%Pa
|
||||
%?%ga%{1}%=
|
||||
%t4
|
||||
%e%ga%{3}%=
|
||||
@@ -1690,16 +1696,21 @@ xterm+256color|xterm 256-color feature,
|
||||
colors#0x100,
|
||||
pairs#0x10000,
|
||||
initc=\E]4;
|
||||
- %p1%d;rgb\:%p2%{255}%*%{1000}%/%2.2X/%p3%{255}%*%{1000}%/%2.2X/%p4%{255}%*%{1000}%/%2.2X\E\\,
|
||||
+ %p1%d;rgb:
|
||||
+ %p2%{255}%*%{1000}%/%2.2X/
|
||||
+ %p3%{255}%*%{1000}%/%2.2X/
|
||||
+ %p4%{255}%*%{1000}%/%2.2X\E\\,
|
||||
oc=\E]104\007,
|
||||
rs1=\Ec\E]104\007,
|
||||
setab=\E[
|
||||
%?
|
||||
%p1%{8}%<
|
||||
- %t4%p1%d
|
||||
+ %t4
|
||||
+ %p1%d
|
||||
%e
|
||||
%p1%{16}%<
|
||||
- %t10%p1%{8}%-%d
|
||||
+ %t10
|
||||
+ %p1%{8}%-%d
|
||||
%e48;5;
|
||||
%p1%d
|
||||
%;
|
||||
@@ -1707,10 +1718,12 @@ xterm+256color|xterm 256-color feature,
|
||||
setaf=\E[
|
||||
%?
|
||||
%p1%{8}%<
|
||||
- %t3%p1%d
|
||||
+ %t3
|
||||
+ %p1%d
|
||||
%e
|
||||
%p1%{16}%<
|
||||
- %t9%p1%{8}%-%d
|
||||
+ %t9
|
||||
+ %p1%{8}%-%d
|
||||
%e38;5;
|
||||
%p1%d
|
||||
%;
|
||||
@@ -1746,17 +1759,23 @@ xterm+direct|xterm with direct-color indexing,
|
||||
setab=\E[
|
||||
%?
|
||||
%p1%{8}%<
|
||||
- %t4%p1%d
|
||||
- %e48\:2\:\:
|
||||
- %p1%{65536}%/%d\:%p1%{256}%/%{255}%&%d\:%p1%{255}%&%d
|
||||
+ %t4
|
||||
+ %p1%d
|
||||
+ %e48:2::
|
||||
+ %p1%{65536}%/%d:
|
||||
+ %p1%{256}%/%{255}%&%d:
|
||||
+ %p1%{255}%&%d
|
||||
%;
|
||||
m,
|
||||
setaf=\E[
|
||||
%?
|
||||
%p1%{8}%<
|
||||
- %t3%p1%d
|
||||
- %e38\:2\:\:
|
||||
- %p1%{65536}%/%d\:%p1%{256}%/%{255}%&%d\:%p1%{255}%&%d
|
||||
+ %t3
|
||||
+ %p1%d
|
||||
+ %e38:2::
|
||||
+ %p1%{65536}%/%d:
|
||||
+ %p1%{256}%/%{255}%&%d:
|
||||
+ %p1%{255}%&%d
|
||||
%;
|
||||
m,
|
||||
setb@,
|
||||
@@ -1938,7 +1957,8 @@ xterm-8bit|xterm terminal emulator with 8-bit controls (X Window System),
|
||||
%t;4
|
||||
%;
|
||||
%?
|
||||
- %p1%p3%|
|
||||
+ %p1
|
||||
+ %p3%|
|
||||
%t;7
|
||||
%;
|
||||
%?
|
||||
@@ -2166,7 +2186,8 @@ xterm-xf86-v44|xterm terminal emulator (XFree86 4.4 Window System),
|
||||
%t;4
|
||||
%;
|
||||
%?
|
||||
- %p1%p3%|
|
||||
+ %p1
|
||||
+ %p3%|
|
||||
%t;7
|
||||
%;
|
||||
%?
|
||||
diff --git a/xterm.appdata.xml b/xterm.appdata.xml
|
||||
index ebe4976..ef8ef4d 100644
|
||||
--- a/xterm.appdata.xml
|
||||
+++ b/xterm.appdata.xml
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
-<!-- Copyright 2014,2016 Thomas Dickey <dickey@invisible-island.net> -->
|
||||
+<!-- Copyright 2014-2021,2022 Thomas Dickey <dickey@invisible-island.net> -->
|
||||
<component type="desktop">
|
||||
<id>xterm.desktop</id>
|
||||
<metadata_license>CC-BY-3.0</metadata_license>
|
||||
diff --git a/xterm.log.html b/xterm.log.html
|
||||
index a912a6d..bda08d3 100644
|
||||
--- a/xterm.log.html
|
||||
+++ b/xterm.log.html
|
||||
@@ -30,7 +30,7 @@
|
||||
* sale, use or other dealings in this Software without prior written *
|
||||
* authorization. *
|
||||
*****************************************************************************
|
||||
- $XTermId: xterm.log.html,v 1.1892 2018/08/13 00:45:25 tom Exp $
|
||||
+$XTermId: xterm.log.html,v 1.2384 2022/01/30 19:30:18 tom Exp $
|
||||
-->
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
|
||||
|
||||
@@ -53,7 +53,7 @@
|
||||
<body>
|
||||
<hr>
|
||||
|
||||
- <p>Copyright © 1997-2017,2018 by <a href=
|
||||
+ <p>Copyright © 1997-2021,2022 by <a href=
|
||||
"mailto:dickey@invisible-island.net">Thomas E. Dickey</a></p>
|
||||
<hr>
|
||||
|
||||
--
|
||||
2.27.0
|
||||
|
||||
741
backport-CVE-2022-45063.patch
Normal file
741
backport-CVE-2022-45063.patch
Normal file
@ -0,0 +1,741 @@
|
||||
From 787636674918873a091e7a4ef5977263ba982322 Mon Sep 17 00:00:00 2001
|
||||
From: "Thomas E. Dickey" <dickey@invisible-island.net>
|
||||
Date: Sun, 23 Oct 2022 22:59:52 +0000
|
||||
Subject: [PATCH] snapshot of project "xterm", label xterm-374c
|
||||
|
||||
---
|
||||
button.c | 10 +-
|
||||
charproc.c | 9 +-
|
||||
doublechr.c | 4 +-
|
||||
fontutils.c | 259 ++++++++++++++++++++++++++++------------------------
|
||||
fontutils.h | 4 +-
|
||||
misc.c | 7 +-
|
||||
screen.c | 1 +
|
||||
xterm.h | 2 +-
|
||||
8 files changed, 151 insertions(+), 145 deletions(-)
|
||||
|
||||
diff --git a/button.c b/button.c
|
||||
index 43ad8bb..42b80e7 100644
|
||||
--- a/button.c
|
||||
+++ b/button.c
|
||||
@@ -1567,11 +1567,8 @@ static void
|
||||
UnmapSelections(XtermWidget xw)
|
||||
{
|
||||
TScreen *screen = TScreenOf(xw);
|
||||
- Cardinal n;
|
||||
|
||||
if (screen->mappedSelect) {
|
||||
- for (n = 0; screen->mappedSelect[n] != 0; ++n)
|
||||
- free((void *) screen->mappedSelect[n]);
|
||||
free(screen->mappedSelect);
|
||||
screen->mappedSelect = 0;
|
||||
}
|
||||
@@ -1610,14 +1607,11 @@ MapSelections(XtermWidget xw, String *params, Cardinal num_params)
|
||||
if ((result = TypeMallocN(String, num_params + 1)) != 0) {
|
||||
result[num_params] = 0;
|
||||
for (j = 0; j < num_params; ++j) {
|
||||
- result[j] = x_strdup((isSELECT(params[j])
|
||||
+ result[j] = (String)(isSELECT(params[j])
|
||||
? mapTo
|
||||
- : params[j]));
|
||||
+ : params[j]);
|
||||
if (result[j] == 0) {
|
||||
UnmapSelections(xw);
|
||||
- while (j != 0) {
|
||||
- free((void *) result[--j]);
|
||||
- }
|
||||
free(result);
|
||||
result = 0;
|
||||
break;
|
||||
diff --git a/charproc.c b/charproc.c
|
||||
index 5d52802..68fdac4 100644
|
||||
--- a/charproc.c
|
||||
+++ b/charproc.c
|
||||
@@ -11944,7 +11944,6 @@ DoSetSelectedFont(Widget w,
|
||||
Bell(xw, XkbBI_MinorError, 0);
|
||||
} else {
|
||||
Boolean failed = False;
|
||||
- int oldFont = TScreenOf(xw)->menu_font_number;
|
||||
char *save = TScreenOf(xw)->SelectFontName();
|
||||
char *val;
|
||||
char *test = 0;
|
||||
@@ -11989,10 +11988,6 @@ DoSetSelectedFont(Widget w,
|
||||
failed = True;
|
||||
}
|
||||
if (failed) {
|
||||
- (void) xtermLoadFont(term,
|
||||
- xtermFontName(TScreenOf(xw)->MenuFontName(oldFont)),
|
||||
- True,
|
||||
- oldFont);
|
||||
Bell(xw, XkbBI_MinorError, 0);
|
||||
}
|
||||
free(used);
|
||||
@@ -12001,7 +11996,7 @@ DoSetSelectedFont(Widget w,
|
||||
}
|
||||
}
|
||||
|
||||
-void
|
||||
+Bool
|
||||
FindFontSelection(XtermWidget xw, const char *atom_name, Bool justprobe)
|
||||
{
|
||||
TScreen *screen = TScreenOf(xw);
|
||||
@@ -12041,7 +12036,7 @@ FindFontSelection(XtermWidget xw, const char *atom_name, Bool justprobe)
|
||||
DoSetSelectedFont, NULL,
|
||||
XtLastTimestampProcessed(XtDisplay(xw)));
|
||||
}
|
||||
- return;
|
||||
+ return (screen->SelectFontName() != NULL) ? True : False;
|
||||
}
|
||||
|
||||
Bool
|
||||
diff --git a/doublechr.c b/doublechr.c
|
||||
index c95a676..99710e4 100644
|
||||
--- a/doublechr.c
|
||||
+++ b/doublechr.c
|
||||
@@ -297,7 +297,7 @@ xterm_DoubleGC(XtermWidget xw,
|
||||
temp.flags = (attr_flags & BOLD);
|
||||
temp.warn = fwResource;
|
||||
|
||||
- if (!xtermOpenFont(xw, name, &temp, False)) {
|
||||
+ if (!xtermOpenFont(xw, name, &temp, NULL, False)) {
|
||||
/* Retry with * in resolutions */
|
||||
char *nname = xtermSpecialFont(xw,
|
||||
attr_flags,
|
||||
@@ -306,7 +306,7 @@ xterm_DoubleGC(XtermWidget xw,
|
||||
|
||||
if (nname != 0) {
|
||||
found = (Boolean) xtermOpenFont(xw, nname, &temp,
|
||||
- False);
|
||||
+ NULL, False);
|
||||
free(nname);
|
||||
}
|
||||
} else {
|
||||
diff --git a/fontutils.c b/fontutils.c
|
||||
index c526a99..8a6c0a2 100644
|
||||
--- a/fontutils.c
|
||||
+++ b/fontutils.c
|
||||
@@ -92,9 +92,9 @@
|
||||
}
|
||||
|
||||
#define FREE_FNAME(field) \
|
||||
- if (fonts == 0 || myfonts.field != fonts->field) { \
|
||||
- FREE_STRING(myfonts.field); \
|
||||
- myfonts.field = 0; \
|
||||
+ if (fonts == 0 || new_fnames.field != fonts->field) { \
|
||||
+ FREE_STRING(new_fnames.field); \
|
||||
+ new_fnames.field = 0; \
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -486,7 +486,7 @@ open_italic_font(XtermWidget xw, int n, FontNameProperties *fp, XTermFonts * dat
|
||||
if ((name = italic_font_name(fp, slant[pass])) != 0) {
|
||||
TRACE(("open_italic_font %s %s\n",
|
||||
whichFontEnum((VTFontEnum) n), name));
|
||||
- if (xtermOpenFont(xw, name, data, False)) {
|
||||
+ if (xtermOpenFont(xw, name, data, NULL, False)) {
|
||||
result = (data->fs != 0);
|
||||
#if OPT_REPORT_FONTS
|
||||
if (resource.reportFonts) {
|
||||
@@ -909,19 +909,24 @@ cannotFont(XtermWidget xw, const char *who, const char *what, const char *where)
|
||||
}
|
||||
|
||||
/*
|
||||
- * Open the given font and verify that it is non-empty. Return a null on
|
||||
+ * Open the given font and verify that it is non-empty. Return false on
|
||||
* failure.
|
||||
*/
|
||||
Bool
|
||||
xtermOpenFont(XtermWidget xw,
|
||||
const char *name,
|
||||
XTermFonts * result,
|
||||
+ XTermFonts * current,
|
||||
Bool force)
|
||||
{
|
||||
Bool code = False;
|
||||
TScreen *screen = TScreenOf(xw);
|
||||
|
||||
if (!IsEmpty(name)) {
|
||||
+ Bool existing = (current != NULL
|
||||
+ && current->fs != NULL
|
||||
+ && current->fn != NULL);
|
||||
+
|
||||
if ((result->fs = XLoadQueryFont(screen->display, name)) != 0) {
|
||||
code = True;
|
||||
if (EmptyFont(result->fs)) {
|
||||
@@ -940,9 +945,13 @@ xtermOpenFont(XtermWidget xw,
|
||||
} else {
|
||||
TRACE(("xtermOpenFont: cannot load font '%s'\n", name));
|
||||
}
|
||||
- if (force) {
|
||||
+ if (existing) {
|
||||
+ TRACE(("...continue using font '%s'\n", current->fn));
|
||||
+ result->fn = x_strdup(current->fn);
|
||||
+ result->fs = current->fs;
|
||||
+ } else if (force) {
|
||||
NoFontWarning(result);
|
||||
- code = xtermOpenFont(xw, DEFFONT, result, True);
|
||||
+ code = xtermOpenFont(xw, DEFFONT, result, NULL, True);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1199,6 +1208,7 @@ static Bool
|
||||
loadNormFP(XtermWidget xw,
|
||||
char **nameOutP,
|
||||
XTermFonts * infoOut,
|
||||
+ XTermFonts * current,
|
||||
int fontnum)
|
||||
{
|
||||
Bool status = True;
|
||||
@@ -1208,7 +1218,7 @@ loadNormFP(XtermWidget xw,
|
||||
if (!xtermOpenFont(xw,
|
||||
*nameOutP,
|
||||
infoOut,
|
||||
- (fontnum == fontMenu_default))) {
|
||||
+ current, (fontnum == fontMenu_default))) {
|
||||
/*
|
||||
* If we are opening the default font, and it happens to be missing,
|
||||
* force that to the compiled-in default font, e.g., "fixed". If we
|
||||
@@ -1243,10 +1253,10 @@ loadBoldFP(XtermWidget xw,
|
||||
if (fp != 0) {
|
||||
NoFontWarning(infoOut);
|
||||
*nameOutP = bold_font_name(fp, fp->average_width);
|
||||
- if (!xtermOpenFont(xw, *nameOutP, infoOut, False)) {
|
||||
+ if (!xtermOpenFont(xw, *nameOutP, infoOut, NULL, False)) {
|
||||
free(*nameOutP);
|
||||
*nameOutP = bold_font_name(fp, -1);
|
||||
- xtermOpenFont(xw, *nameOutP, infoOut, False);
|
||||
+ xtermOpenFont(xw, *nameOutP, infoOut, NULL, False);
|
||||
}
|
||||
TRACE(("...derived bold '%s'\n", NonNull(*nameOutP)));
|
||||
}
|
||||
@@ -1264,7 +1274,7 @@ loadBoldFP(XtermWidget xw,
|
||||
TRACE(("...did not get a matching bold font\n"));
|
||||
}
|
||||
free(normal);
|
||||
- } else if (!xtermOpenFont(xw, *nameOutP, infoOut, False)) {
|
||||
+ } else if (!xtermOpenFont(xw, *nameOutP, infoOut, NULL, False)) {
|
||||
xtermCopyFontInfo(infoOut, infoRef);
|
||||
TRACE(("...cannot load bold font '%s'\n", NonNull(*nameOutP)));
|
||||
} else {
|
||||
@@ -1320,7 +1330,7 @@ loadWideFP(XtermWidget xw,
|
||||
}
|
||||
|
||||
if (check_fontname(*nameOutP)) {
|
||||
- if (!xtermOpenFont(xw, *nameOutP, infoOut, False)) {
|
||||
+ if (!xtermOpenFont(xw, *nameOutP, infoOut, NULL, False)) {
|
||||
xtermCopyFontInfo(infoOut, infoRef);
|
||||
}
|
||||
} else {
|
||||
@@ -1357,7 +1367,7 @@ loadWBoldFP(XtermWidget xw,
|
||||
|
||||
if (check_fontname(*nameOutP)) {
|
||||
|
||||
- if (xtermOpenFont(xw, *nameOutP, infoOut, False)
|
||||
+ if (xtermOpenFont(xw, *nameOutP, infoOut, NULL, False)
|
||||
&& derived
|
||||
&& !compatibleWideCounts(wideInfoRef->fs, infoOut->fs)) {
|
||||
xtermCloseFont2(xw, infoOut - fWBold, fWBold);
|
||||
@@ -1410,6 +1420,10 @@ loadWBoldFP(XtermWidget xw,
|
||||
}
|
||||
#endif
|
||||
|
||||
+/*
|
||||
+ * Load a given bitmap font, along with the bold/wide variants.
|
||||
+ * Returns nonzero on success.
|
||||
+ */
|
||||
int
|
||||
xtermLoadFont(XtermWidget xw,
|
||||
const VTFontNames * fonts,
|
||||
@@ -1419,33 +1433,37 @@ xtermLoadFont(XtermWidget xw,
|
||||
TScreen *screen = TScreenOf(xw);
|
||||
VTwin *win = WhichVWin(screen);
|
||||
|
||||
- VTFontNames myfonts;
|
||||
- XTermFonts fnts[fMAX];
|
||||
+ VTFontNames new_fnames;
|
||||
+ XTermFonts new_fonts[fMAX];
|
||||
+ XTermFonts old_fonts[fMAX];
|
||||
char *tmpname = NULL;
|
||||
Boolean proportional = False;
|
||||
+ Boolean recovered;
|
||||
+ int code = 0;
|
||||
|
||||
- memset(&myfonts, 0, sizeof(myfonts));
|
||||
- memset(fnts, 0, sizeof(fnts));
|
||||
+ memset(&new_fnames, 0, sizeof(new_fnames));
|
||||
+ memset(new_fonts, 0, sizeof(new_fonts));
|
||||
+ memcpy(&old_fonts, screen->fnts, sizeof(old_fonts));
|
||||
|
||||
if (fonts != 0)
|
||||
- myfonts = *fonts;
|
||||
- if (!check_fontname(myfonts.f_n))
|
||||
- return 0;
|
||||
+ new_fnames = *fonts;
|
||||
+ if (!check_fontname(new_fnames.f_n))
|
||||
+ return code;
|
||||
|
||||
if (fontnum == fontMenu_fontescape
|
||||
- && myfonts.f_n != screen->MenuFontName(fontnum)) {
|
||||
- if ((tmpname = x_strdup(myfonts.f_n)) == 0)
|
||||
- return 0;
|
||||
+ && new_fnames.f_n != screen->MenuFontName(fontnum)) {
|
||||
+ if ((tmpname = x_strdup(new_fnames.f_n)) == 0)
|
||||
+ return code;
|
||||
}
|
||||
|
||||
- TRACE(("Begin Cgs - xtermLoadFont(%s)\n", myfonts.f_n));
|
||||
+ TRACE(("Begin Cgs - xtermLoadFont(%s)\n", new_fnames.f_n));
|
||||
releaseWindowGCs(xw, win);
|
||||
|
||||
#define DbgResource(name, field, index) \
|
||||
TRACE(("xtermLoadFont #%d "name" %s%s\n", \
|
||||
fontnum, \
|
||||
- (fnts[index].warn == fwResource) ? "*" : " ", \
|
||||
- NonNull(myfonts.field)))
|
||||
+ (new_fonts[index].warn == fwResource) ? "*" : " ", \
|
||||
+ NonNull(new_fnames.field)))
|
||||
DbgResource("normal", f_n, fNorm);
|
||||
DbgResource("bold ", f_b, fBold);
|
||||
#if OPT_WIDE_CHARS
|
||||
@@ -1454,16 +1472,17 @@ xtermLoadFont(XtermWidget xw,
|
||||
#endif
|
||||
|
||||
if (!loadNormFP(xw,
|
||||
- &myfonts.f_n,
|
||||
- &fnts[fNorm],
|
||||
+ &new_fnames.f_n,
|
||||
+ &new_fonts[fNorm],
|
||||
+ &old_fonts[fNorm],
|
||||
fontnum))
|
||||
goto bad;
|
||||
|
||||
if (!loadBoldFP(xw,
|
||||
- &myfonts.f_b,
|
||||
- &fnts[fBold],
|
||||
- myfonts.f_n,
|
||||
- &fnts[fNorm],
|
||||
+ &new_fnames.f_b,
|
||||
+ &new_fonts[fBold],
|
||||
+ new_fnames.f_n,
|
||||
+ &new_fonts[fNorm],
|
||||
fontnum))
|
||||
goto bad;
|
||||
|
||||
@@ -1475,20 +1494,20 @@ xtermLoadFont(XtermWidget xw,
|
||||
if_OPT_WIDE_CHARS(screen, {
|
||||
|
||||
if (!loadWideFP(xw,
|
||||
- &myfonts.f_w,
|
||||
- &fnts[fWide],
|
||||
- myfonts.f_n,
|
||||
- &fnts[fNorm],
|
||||
+ &new_fnames.f_w,
|
||||
+ &new_fonts[fWide],
|
||||
+ new_fnames.f_n,
|
||||
+ &new_fonts[fNorm],
|
||||
fontnum))
|
||||
goto bad;
|
||||
|
||||
if (!loadWBoldFP(xw,
|
||||
- &myfonts.f_wb,
|
||||
- &fnts[fWBold],
|
||||
- myfonts.f_w,
|
||||
- &fnts[fWide],
|
||||
- myfonts.f_b,
|
||||
- &fnts[fBold],
|
||||
+ &new_fnames.f_wb,
|
||||
+ &new_fonts[fWBold],
|
||||
+ new_fnames.f_w,
|
||||
+ &new_fonts[fWide],
|
||||
+ new_fnames.f_b,
|
||||
+ &new_fonts[fBold],
|
||||
fontnum))
|
||||
goto bad;
|
||||
|
||||
@@ -1498,28 +1517,28 @@ xtermLoadFont(XtermWidget xw,
|
||||
* Normal/bold fonts should be the same width. Also, the min/max
|
||||
* values should be the same.
|
||||
*/
|
||||
- if (!is_fixed_font(fnts[fNorm].fs)
|
||||
- || !is_fixed_font(fnts[fBold].fs)
|
||||
- || fnts[fNorm].fs->max_bounds.width != fnts[fBold].fs->max_bounds.width) {
|
||||
+ if (!is_fixed_font(new_fonts[fNorm].fs)
|
||||
+ || !is_fixed_font(new_fonts[fBold].fs)
|
||||
+ || new_fonts[fNorm].fs->max_bounds.width != new_fonts[fBold].fs->max_bounds.width) {
|
||||
TRACE(("Proportional font! normal %d/%d, bold %d/%d\n",
|
||||
- fnts[fNorm].fs->min_bounds.width,
|
||||
- fnts[fNorm].fs->max_bounds.width,
|
||||
- fnts[fBold].fs->min_bounds.width,
|
||||
- fnts[fBold].fs->max_bounds.width));
|
||||
+ new_fonts[fNorm].fs->min_bounds.width,
|
||||
+ new_fonts[fNorm].fs->max_bounds.width,
|
||||
+ new_fonts[fBold].fs->min_bounds.width,
|
||||
+ new_fonts[fBold].fs->max_bounds.width));
|
||||
proportional = True;
|
||||
}
|
||||
|
||||
if_OPT_WIDE_CHARS(screen, {
|
||||
- if (fnts[fWide].fs != 0
|
||||
- && fnts[fWBold].fs != 0
|
||||
- && (!is_fixed_font(fnts[fWide].fs)
|
||||
- || !is_fixed_font(fnts[fWBold].fs)
|
||||
- || fnts[fWide].fs->max_bounds.width != fnts[fWBold].fs->max_bounds.width)) {
|
||||
+ if (new_fonts[fWide].fs != 0
|
||||
+ && new_fonts[fWBold].fs != 0
|
||||
+ && (!is_fixed_font(new_fonts[fWide].fs)
|
||||
+ || !is_fixed_font(new_fonts[fWBold].fs)
|
||||
+ || new_fonts[fWide].fs->max_bounds.width != new_fonts[fWBold].fs->max_bounds.width)) {
|
||||
TRACE(("Proportional font! wide %d/%d, wide bold %d/%d\n",
|
||||
- fnts[fWide].fs->min_bounds.width,
|
||||
- fnts[fWide].fs->max_bounds.width,
|
||||
- fnts[fWBold].fs->min_bounds.width,
|
||||
- fnts[fWBold].fs->max_bounds.width));
|
||||
+ new_fonts[fWide].fs->min_bounds.width,
|
||||
+ new_fonts[fWide].fs->max_bounds.width,
|
||||
+ new_fonts[fWBold].fs->min_bounds.width,
|
||||
+ new_fonts[fWBold].fs->max_bounds.width));
|
||||
proportional = True;
|
||||
}
|
||||
});
|
||||
@@ -1538,13 +1557,13 @@ xtermLoadFont(XtermWidget xw,
|
||||
screen->ifnts_ok = False;
|
||||
#endif
|
||||
|
||||
- xtermCopyFontInfo(GetNormalFont(screen, fNorm), &fnts[fNorm]);
|
||||
- xtermCopyFontInfo(GetNormalFont(screen, fBold), &fnts[fBold]);
|
||||
+ xtermCopyFontInfo(GetNormalFont(screen, fNorm), &new_fonts[fNorm]);
|
||||
+ xtermCopyFontInfo(GetNormalFont(screen, fBold), &new_fonts[fBold]);
|
||||
#if OPT_WIDE_CHARS
|
||||
- xtermCopyFontInfo(GetNormalFont(screen, fWide), &fnts[fWide]);
|
||||
- if (fnts[fWBold].fs == NULL)
|
||||
- xtermCopyFontInfo(GetNormalFont(screen, fWide), &fnts[fWide]);
|
||||
- xtermCopyFontInfo(GetNormalFont(screen, fWBold), &fnts[fWBold]);
|
||||
+ xtermCopyFontInfo(GetNormalFont(screen, fWide), &new_fonts[fWide]);
|
||||
+ if (new_fonts[fWBold].fs == NULL)
|
||||
+ xtermCopyFontInfo(GetNormalFont(screen, fWide), &new_fonts[fWide]);
|
||||
+ xtermCopyFontInfo(GetNormalFont(screen, fWBold), &new_fonts[fWBold]);
|
||||
#endif
|
||||
|
||||
xtermUpdateFontGCs(xw, False);
|
||||
@@ -1575,7 +1594,7 @@ xtermLoadFont(XtermWidget xw,
|
||||
unsigned ch;
|
||||
|
||||
#if OPT_TRACE
|
||||
-#define TRACE_MISS(index) show_font_misses(#index, &fnts[index])
|
||||
+#define TRACE_MISS(index) show_font_misses(#index, &new_fonts[index])
|
||||
TRACE_MISS(fNorm);
|
||||
TRACE_MISS(fBold);
|
||||
#if OPT_WIDE_CHARS
|
||||
@@ -1592,8 +1611,8 @@ xtermLoadFont(XtermWidget xw,
|
||||
if ((n != UCS_REPL)
|
||||
&& (n != ch)
|
||||
&& (screen->fnt_boxes & 2)) {
|
||||
- if (xtermMissingChar(n, &fnts[fNorm]) ||
|
||||
- xtermMissingChar(n, &fnts[fBold])) {
|
||||
+ if (xtermMissingChar(n, &new_fonts[fNorm]) ||
|
||||
+ xtermMissingChar(n, &new_fonts[fBold])) {
|
||||
UIntClr(screen->fnt_boxes, 2);
|
||||
TRACE(("missing graphics character #%d, U+%04X\n",
|
||||
ch, n));
|
||||
@@ -1605,12 +1624,12 @@ xtermLoadFont(XtermWidget xw,
|
||||
#endif
|
||||
|
||||
for (ch = 1; ch < 32; ch++) {
|
||||
- if (xtermMissingChar(ch, &fnts[fNorm])) {
|
||||
+ if (xtermMissingChar(ch, &new_fonts[fNorm])) {
|
||||
TRACE(("missing normal char #%d\n", ch));
|
||||
UIntClr(screen->fnt_boxes, 1);
|
||||
break;
|
||||
}
|
||||
- if (xtermMissingChar(ch, &fnts[fBold])) {
|
||||
+ if (xtermMissingChar(ch, &new_fonts[fBold])) {
|
||||
TRACE(("missing bold char #%d\n", ch));
|
||||
UIntClr(screen->fnt_boxes, 1);
|
||||
break;
|
||||
@@ -1627,8 +1646,8 @@ xtermLoadFont(XtermWidget xw,
|
||||
screen->enbolden = screen->bold_mode;
|
||||
} else {
|
||||
screen->enbolden = screen->bold_mode
|
||||
- && ((fnts[fNorm].fs == fnts[fBold].fs)
|
||||
- || same_font_name(myfonts.f_n, myfonts.f_b));
|
||||
+ && ((new_fonts[fNorm].fs == new_fonts[fBold].fs)
|
||||
+ || same_font_name(new_fnames.f_n, new_fnames.f_b));
|
||||
}
|
||||
TRACE(("Will %suse 1-pixel offset/overstrike to simulate bold\n",
|
||||
screen->enbolden ? "" : "not "));
|
||||
@@ -1644,7 +1663,7 @@ xtermLoadFont(XtermWidget xw,
|
||||
update_font_escape();
|
||||
}
|
||||
#if OPT_SHIFT_FONTS
|
||||
- screen->menu_font_sizes[fontnum] = FontSize(fnts[fNorm].fs);
|
||||
+ screen->menu_font_sizes[fontnum] = FontSize(new_fonts[fNorm].fs);
|
||||
#endif
|
||||
}
|
||||
set_cursor_gcs(xw);
|
||||
@@ -1659,20 +1678,21 @@ xtermLoadFont(XtermWidget xw,
|
||||
FREE_FNAME(f_w);
|
||||
FREE_FNAME(f_wb);
|
||||
#endif
|
||||
- if (fnts[fNorm].fn == fnts[fBold].fn) {
|
||||
- free(fnts[fNorm].fn);
|
||||
+ if (new_fonts[fNorm].fn == new_fonts[fBold].fn) {
|
||||
+ free(new_fonts[fNorm].fn);
|
||||
} else {
|
||||
- free(fnts[fNorm].fn);
|
||||
- free(fnts[fBold].fn);
|
||||
+ free(new_fonts[fNorm].fn);
|
||||
+ free(new_fonts[fBold].fn);
|
||||
}
|
||||
#if OPT_WIDE_CHARS
|
||||
- free(fnts[fWide].fn);
|
||||
- free(fnts[fWBold].fn);
|
||||
+ free(new_fonts[fWide].fn);
|
||||
+ free(new_fonts[fWBold].fn);
|
||||
#endif
|
||||
xtermSetWinSize(xw);
|
||||
return 1;
|
||||
|
||||
bad:
|
||||
+ recovered = False;
|
||||
if (tmpname)
|
||||
free(tmpname);
|
||||
|
||||
@@ -1683,15 +1703,15 @@ xtermLoadFont(XtermWidget xw,
|
||||
SetItemSensitivity(fontMenuEntries[fontnum].widget, True);
|
||||
#endif
|
||||
Bell(xw, XkbBI_MinorError, 0);
|
||||
- myfonts.f_n = screen->MenuFontName(old_fontnum);
|
||||
- return xtermLoadFont(xw, &myfonts, doresize, old_fontnum);
|
||||
- } else if (x_strcasecmp(myfonts.f_n, DEFFONT)) {
|
||||
- int code;
|
||||
-
|
||||
- myfonts.f_n = x_strdup(DEFFONT);
|
||||
- TRACE(("...recovering for TrueType fonts\n"));
|
||||
- code = xtermLoadFont(xw, &myfonts, doresize, fontnum);
|
||||
- if (code) {
|
||||
+ new_fnames.f_n = screen->MenuFontName(old_fontnum);
|
||||
+ if (xtermLoadFont(xw, &new_fnames, doresize, old_fontnum))
|
||||
+ recovered = True;
|
||||
+ } else if (x_strcasecmp(new_fnames.f_n, DEFFONT)
|
||||
+ && x_strcasecmp(new_fnames.f_n, old_fonts[fNorm].fn)) {
|
||||
+ new_fnames.f_n = x_strdup(old_fonts[fNorm].fn);
|
||||
+ TRACE(("...recovering from failed font-load\n"));
|
||||
+ if (xtermLoadFont(xw, &new_fnames, doresize, fontnum)) {
|
||||
+ recovered = True;
|
||||
if (fontnum != fontMenu_fontsel) {
|
||||
SetItemSensitivity(fontMenuEntries[fontnum].widget,
|
||||
UsingRenderFont(xw));
|
||||
@@ -1700,15 +1720,15 @@ xtermLoadFont(XtermWidget xw,
|
||||
FontHeight(screen),
|
||||
FontWidth(screen)));
|
||||
}
|
||||
- return code;
|
||||
}
|
||||
#endif
|
||||
-
|
||||
- releaseWindowGCs(xw, win);
|
||||
-
|
||||
- xtermCloseFonts(xw, fnts);
|
||||
- TRACE(("Fail Cgs - xtermLoadFont\n"));
|
||||
- return 0;
|
||||
+ if (!recovered) {
|
||||
+ releaseWindowGCs(xw, win);
|
||||
+ xtermCloseFonts(xw, new_fonts);
|
||||
+ TRACE(("Fail Cgs - xtermLoadFont\n"));
|
||||
+ code = 0;
|
||||
+ }
|
||||
+ return code;
|
||||
}
|
||||
|
||||
#if OPT_WIDE_ATTRS
|
||||
@@ -1756,7 +1776,7 @@ xtermLoadItalics(XtermWidget xw)
|
||||
} else {
|
||||
xtermOpenFont(xw,
|
||||
getNormalFont(screen, n)->fn,
|
||||
- data, False);
|
||||
+ data, NULL, False);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3752,7 +3772,7 @@ lookupOneFontSize(XtermWidget xw, int fontnum)
|
||||
|
||||
memset(&fnt, 0, sizeof(fnt));
|
||||
screen->menu_font_sizes[fontnum] = -1;
|
||||
- if (xtermOpenFont(xw, screen->MenuFontName(fontnum), &fnt, True)) {
|
||||
+ if (xtermOpenFont(xw, screen->MenuFontName(fontnum), &fnt, NULL, True)) {
|
||||
if (fontnum <= fontMenu_lastBuiltin
|
||||
|| strcmp(fnt.fn, DEFFONT)) {
|
||||
screen->menu_font_sizes[fontnum] = FontSize(fnt.fs);
|
||||
@@ -4157,13 +4177,14 @@ HandleSetFont(Widget w GCC_UNUSED,
|
||||
}
|
||||
}
|
||||
|
||||
-void
|
||||
+Bool
|
||||
SetVTFont(XtermWidget xw,
|
||||
int which,
|
||||
Bool doresize,
|
||||
const VTFontNames * fonts)
|
||||
{
|
||||
TScreen *screen = TScreenOf(xw);
|
||||
+ Bool result = False;
|
||||
|
||||
TRACE(("SetVTFont(which=%d, f_n=%s, f_b=%s)\n", which,
|
||||
(fonts && fonts->f_n) ? fonts->f_n : "<null>",
|
||||
@@ -4172,34 +4193,31 @@ SetVTFont(XtermWidget xw,
|
||||
if (IsIcon(screen)) {
|
||||
Bell(xw, XkbBI_MinorError, 0);
|
||||
} else if (which >= 0 && which < NMENUFONTS) {
|
||||
- VTFontNames myfonts;
|
||||
+ VTFontNames new_fnames;
|
||||
|
||||
- memset(&myfonts, 0, sizeof(myfonts));
|
||||
+ memset(&new_fnames, 0, sizeof(new_fnames));
|
||||
if (fonts != 0)
|
||||
- myfonts = *fonts;
|
||||
+ new_fnames = *fonts;
|
||||
|
||||
if (which == fontMenu_fontsel) { /* go get the selection */
|
||||
- FindFontSelection(xw, myfonts.f_n, False);
|
||||
+ result = FindFontSelection(xw, new_fnames.f_n, False);
|
||||
} else {
|
||||
- int oldFont = screen->menu_font_number;
|
||||
-
|
||||
#define USE_CACHED(field, name) \
|
||||
- if (myfonts.field == 0) { \
|
||||
- myfonts.field = x_strdup(screen->menu_font_names[which][name]); \
|
||||
- TRACE(("set myfonts." #field " from menu_font_names[%d][" #name "] %s\n", \
|
||||
- which, NonNull(myfonts.field))); \
|
||||
+ if (new_fnames.field == NULL) { \
|
||||
+ new_fnames.field = x_strdup(screen->menu_font_names[which][name]); \
|
||||
+ TRACE(("set new_fnames." #field " from menu_font_names[%d][" #name "] %s\n", \
|
||||
+ which, NonNull(new_fnames.field))); \
|
||||
} else { \
|
||||
- TRACE(("set myfonts." #field " reused\n")); \
|
||||
+ TRACE(("set new_fnames." #field " reused\n")); \
|
||||
}
|
||||
#define SAVE_FNAME(field, name) \
|
||||
- if (myfonts.field != 0) { \
|
||||
- if (screen->menu_font_names[which][name] == 0 \
|
||||
- || strcmp(screen->menu_font_names[which][name], myfonts.field)) { \
|
||||
- TRACE(("updating menu_font_names[%d][" #name "] to %s\n", \
|
||||
- which, myfonts.field)); \
|
||||
- FREE_STRING(screen->menu_font_names[which][name]); \
|
||||
- screen->menu_font_names[which][name] = x_strdup(myfonts.field); \
|
||||
- } \
|
||||
+ if (new_fnames.field != NULL \
|
||||
+ && (screen->menu_font_names[which][name] == NULL \
|
||||
+ || strcmp(screen->menu_font_names[which][name], new_fnames.field))) { \
|
||||
+ TRACE(("updating menu_font_names[%d][" #name "] to \"%s\"\n", \
|
||||
+ which, new_fnames.field)); \
|
||||
+ FREE_STRING(screen->menu_font_names[which][name]); \
|
||||
+ screen->menu_font_names[which][name] = x_strdup(new_fnames.field); \
|
||||
}
|
||||
|
||||
USE_CACHED(f_n, fNorm);
|
||||
@@ -4209,7 +4227,7 @@ SetVTFont(XtermWidget xw,
|
||||
USE_CACHED(f_wb, fWBold);
|
||||
#endif
|
||||
if (xtermLoadFont(xw,
|
||||
- &myfonts,
|
||||
+ &new_fnames,
|
||||
doresize, which)) {
|
||||
/*
|
||||
* If successful, save the data so that a subsequent query via
|
||||
@@ -4221,10 +4239,8 @@ SetVTFont(XtermWidget xw,
|
||||
SAVE_FNAME(f_w, fWide);
|
||||
SAVE_FNAME(f_wb, fWBold);
|
||||
#endif
|
||||
+ result = True;
|
||||
} else {
|
||||
- (void) xtermLoadFont(xw,
|
||||
- xtermFontName(screen->MenuFontName(oldFont)),
|
||||
- doresize, oldFont);
|
||||
Bell(xw, XkbBI_MinorError, 0);
|
||||
}
|
||||
FREE_FNAME(f_n);
|
||||
@@ -4237,7 +4253,8 @@ SetVTFont(XtermWidget xw,
|
||||
} else {
|
||||
Bell(xw, XkbBI_MinorError, 0);
|
||||
}
|
||||
- return;
|
||||
+ TRACE(("...SetVTFont: %d\n", result));
|
||||
+ return result;
|
||||
}
|
||||
|
||||
#if OPT_RENDERFONT
|
||||
diff --git a/fontutils.h b/fontutils.h
|
||||
index 09cf564..66c40e6 100644
|
||||
--- a/fontutils.h
|
||||
+++ b/fontutils.h
|
||||
@@ -37,7 +37,7 @@
|
||||
/* *INDENT-OFF* */
|
||||
|
||||
extern Bool xtermLoadDefaultFonts (XtermWidget /* xw */);
|
||||
-extern Bool xtermOpenFont (XtermWidget /* xw */, const char */* name */, XTermFonts * /* result */, Bool /* force */);
|
||||
+extern Bool xtermOpenFont (XtermWidget /* xw */, const char */* name */, XTermFonts * /* result */, XTermFonts * /* current */, Bool /* force */);
|
||||
extern XTermFonts * getDoubleFont (TScreen * /* screen */, int /* which */);
|
||||
extern XTermFonts * getItalicFont (TScreen * /* screen */, int /* which */);
|
||||
extern XTermFonts * getNormalFont (TScreen * /* screen */, int /* which */);
|
||||
@@ -50,7 +50,7 @@ extern int lookupRelativeFontSize (XtermWidget /* xw */, int /* old */, int /* r
|
||||
extern int xtermGetFont (const char * /* param */);
|
||||
extern int xtermLoadFont (XtermWidget /* xw */, const VTFontNames */* fonts */, Bool /* doresize */, int /* fontnum */);
|
||||
extern void HandleSetFont PROTO_XT_ACTIONS_ARGS;
|
||||
-extern void SetVTFont (XtermWidget /* xw */, int /* i */, Bool /* doresize */, const VTFontNames */* fonts */);
|
||||
+extern Bool SetVTFont (XtermWidget /* xw */, int /* i */, Bool /* doresize */, const VTFontNames */* fonts */);
|
||||
extern void allocFontList (XtermWidget /* xw */, const char * /* name */, XtermFontNames * /* target */, VTFontEnum /* which */, const char * /* source */, Bool /* ttf */);
|
||||
extern void copyFontList (char *** /* targetp */, char ** /* source */);
|
||||
extern void initFontLists (XtermWidget /* xw */);
|
||||
diff --git a/misc.c b/misc.c
|
||||
index 7cd8f6a..7a714b5 100644
|
||||
--- a/misc.c
|
||||
+++ b/misc.c
|
||||
@@ -3670,9 +3670,9 @@ ChangeFontRequest(XtermWidget xw, String buf)
|
||||
{
|
||||
memset(&fonts, 0, sizeof(fonts));
|
||||
fonts.f_n = name;
|
||||
- SetVTFont(xw, num, True, &fonts);
|
||||
- if (num == screen->menu_font_number &&
|
||||
- num != fontMenu_fontescape) {
|
||||
+ if (SetVTFont(xw, num, True, &fonts)
|
||||
+ && num == screen->menu_font_number
|
||||
+ && num != fontMenu_fontescape) {
|
||||
screen->EscapeFontName() = x_strdup(name);
|
||||
}
|
||||
}
|
||||
@@ -5921,7 +5921,6 @@ xtermSetenv(const char *var, const char *value)
|
||||
|
||||
found = envindex;
|
||||
environ[found + 1] = NULL;
|
||||
- environ = environ;
|
||||
}
|
||||
|
||||
environ[found] = TextAlloc(1 + len + strlen(value));
|
||||
diff --git a/screen.c b/screen.c
|
||||
index cdb26ab..13003bd 100644
|
||||
--- a/screen.c
|
||||
+++ b/screen.c
|
||||
@@ -1449,6 +1449,7 @@ ScrnRefresh(XtermWidget xw,
|
||||
nrows, ncols,
|
||||
force ? " force" : ""));
|
||||
|
||||
+ (void) recurse;
|
||||
++recurse;
|
||||
|
||||
if (screen->cursorp.col >= leftcol
|
||||
diff --git a/xterm.h b/xterm.h
|
||||
index 072aa3a..3b851c8 100644
|
||||
--- a/xterm.h
|
||||
+++ b/xterm.h
|
||||
@@ -906,7 +906,7 @@ extern void noleaks_cachedCgs (XtermWidget /* xw */);
|
||||
extern Bool CheckBufPtrs (TScreen * /* screen */);
|
||||
extern Bool set_cursor_gcs (XtermWidget /* xw */);
|
||||
extern int VTInit (XtermWidget /* xw */);
|
||||
-extern void FindFontSelection (XtermWidget /* xw */, const char * /* atom_name */, Bool /* justprobe */);
|
||||
+extern Bool FindFontSelection (XtermWidget /* xw */, const char * /* atom_name */, Bool /* justprobe */);
|
||||
extern void HideCursor (void);
|
||||
extern void RestartBlinking(TScreen * /* screen */);
|
||||
extern void ShowCursor (void);
|
||||
--
|
||||
2.33.0
|
||||
|
||||
@ -1,15 +0,0 @@
|
||||
diff -up xterm-333/XTerm.ad.defaults xterm-333/XTerm.ad
|
||||
--- xterm-333/XTerm.ad.defaults 2016-12-22 03:07:39.000000000 +0100
|
||||
+++ xterm-333/XTerm.ad 2018-05-30 15:44:53.325426803 +0200
|
||||
@@ -259,3 +259,11 @@
|
||||
!*allowTcapOps: false
|
||||
!*allowTitleOps: false
|
||||
!*allowWindowOps: false
|
||||
+
|
||||
+! Red Hat Defaults:
|
||||
+*allowFontOps: false
|
||||
+*allowTcapOps: false
|
||||
+*VT100*eightBitInput: false
|
||||
+*VT100*scrollBar: true
|
||||
+*VT100*utf8Title: true
|
||||
+*termName: xterm-256color
|
||||
@ -1,18 +0,0 @@
|
||||
diff -up xterm-323/xterm.desktop.desk xterm-323/xterm.desktop
|
||||
--- xterm-323/xterm.desktop.desk 2016-03-08 14:32:15.633422051 +0100
|
||||
+++ xterm-323/xterm.desktop 2016-03-08 14:33:31.231604288 +0100
|
||||
@@ -32,12 +32,12 @@
|
||||
# -----------------------------------------------------------------------------
|
||||
[Desktop Entry]
|
||||
Name=XTerm
|
||||
-#GenericName=Terminal
|
||||
+GenericName=Terminal
|
||||
Comment=standard terminal emulator for the X window system
|
||||
Exec=xterm
|
||||
Terminal=false
|
||||
Type=Application
|
||||
Encoding=UTF-8
|
||||
-Icon=xterm-color_48x48
|
||||
+Icon=xterm-color
|
||||
Categories=System;TerminalEmulator;
|
||||
Keywords=shell;prompt;command;commandline;cmd;
|
||||
@ -1,51 +0,0 @@
|
||||
diff -up xterm-328/minstall.in.man-paths xterm-328/minstall.in
|
||||
--- xterm-328/minstall.in.man-paths 2016-10-25 00:29:20.000000000 +0200
|
||||
+++ xterm-328/minstall.in 2017-06-01 16:36:26.544065282 +0200
|
||||
@@ -138,6 +138,11 @@ USE_chr1=`echo "$USE_name" | sed -e 's/^
|
||||
USE_Name=${USE_chr0}${USE_chr1}
|
||||
USE_NAME=`echo "$USE_name" | tr '[a-z]' '[A-Z]'`
|
||||
|
||||
+fontpath=/usr/share/X11/fonts
|
||||
+xorgcfgdir=/etc/X11
|
||||
+xorgcfgfil=xorg.conf
|
||||
+X_MANSECT=7
|
||||
+
|
||||
sed -e 's%__vendorversion__%"X Window System"%' \
|
||||
-e 's%__app_version__%Patch\ \#'$PATCH_NUM% \
|
||||
-e 's%__app_date__%'$PATCH_YMD% \
|
||||
@@ -163,6 +168,9 @@ sed -e 's%__vendorversion__%"X Window Sy
|
||||
-e s%fIwtmp'\\%fI'$WTMP_NAME'\\%g' \
|
||||
-e s%/etc/wtmp%$WTMP_PATH%g \
|
||||
-e 's%/\\(\*\*%/*%g' \
|
||||
+ -e s%__fontpath__%$fontpath%g \
|
||||
+ -e s%__xorgcfgdir__%$xorgcfgdir%g \
|
||||
+ -e s%__xorgcfgfil__%$xorgcfgfil%g \
|
||||
$OLD_FILE >$NEW_FILE
|
||||
# diff -u $OLD_FILE $NEW_FILE
|
||||
|
||||
diff -up xterm-328/xterm.man.man-paths xterm-328/xterm.man
|
||||
--- xterm-328/xterm.man.man-paths 2017-05-31 00:57:12.000000000 +0200
|
||||
+++ xterm-328/xterm.man 2017-06-01 16:33:16.493512367 +0200
|
||||
@@ -2328,19 +2328,18 @@ Since X11R6, bitmap fonts have been scal
|
||||
The font server claims to provide the bold font that \fI\*n\fP requests,
|
||||
but the result is not always readable.
|
||||
XFree86 introduced a feature which can be used to suppress the scaling.
|
||||
-In the X server's configuration file (e.g., \*(``/etc/X11/XFree86\*(''
|
||||
-or \*(``/etc/X11/xorg.conf\*(''), you
|
||||
+In the X server's configuration file (e.g., \*(``__xorgcfgdir__/__xorgcfgfil__\*(''), you
|
||||
can add \*(``:unscaled\*('' to the end of the directory specification for the
|
||||
\*(``misc\*('' fonts,
|
||||
which comprise the fixed-pitch fonts that are used by \fI\*n\fP.
|
||||
For example
|
||||
.NS
|
||||
-FontPath "/usr/lib/X11/fonts/misc/"
|
||||
+FontPath "__fontpath__/misc/"
|
||||
.NE
|
||||
.IP
|
||||
would become
|
||||
.NS
|
||||
-FontPath "/usr/lib/X11/fonts/misc/:unscaled"
|
||||
+FontPath "__fontpath__/misc/:unscaled"
|
||||
.NE
|
||||
.IP
|
||||
Depending on your configuration, the font server may have its own configuration
|
||||
44
xterm.spec
44
xterm.spec
@ -1,21 +1,21 @@
|
||||
Name: xterm
|
||||
Version: 334
|
||||
Release: 2
|
||||
Release: 7
|
||||
Summary: It is a terminal emulator for the X Window System
|
||||
License: MIT
|
||||
URL: https://invisible-island.net/xterm
|
||||
Source0: ftp://ftp.invisible-island.net/xterm/xterm-334.tgz
|
||||
Source1: ftp://ftp.invisible-island.net/xterm/16colors.txt
|
||||
Patch0: xterm-defaults.patch
|
||||
Patch1: xterm-desktop.patch
|
||||
Patch2: xterm-man-paths.patch
|
||||
URL: http://invisible-island.net/xterm
|
||||
Source0: http://invisible-island.net/xterm/xterm-334.tgz
|
||||
|
||||
Patch6000: backport-CVE-2021-27135.patch
|
||||
Patch6001: backport-CVE-2022-24130.patch
|
||||
Patch6002: backport-CVE-2022-45063.patch
|
||||
|
||||
BuildRequires: gcc git pkgconfig ncurses-devel libutempter-devel
|
||||
BuildRequires: libXft-devel libXaw-devel libXext-devel desktop-file-utils
|
||||
BuildRequires: libxkbfile-devel xorg-x11-apps
|
||||
|
||||
provides: xterm-resize = 334-2
|
||||
Obsoletes: xterm-resize < 334-2
|
||||
provides: xterm-resize = %{version}-%{release}
|
||||
Obsoletes: xterm-resize < %{version}-%{release}
|
||||
|
||||
%bcond_with trace
|
||||
|
||||
@ -35,8 +35,6 @@ The xterm-help package contains doc files for xterm.
|
||||
iconv -f iso8859-1 -t utf-8 < THANKS > TEMP
|
||||
touch -r THANKS TEMP; mv TEMP THANKS
|
||||
|
||||
echo %{_datadir}/X11/app-defaults
|
||||
|
||||
%build
|
||||
%configure --enable-meta-sends-esc --disable-backarrow-key --enable-256-color \
|
||||
--enable-exec-xterm --enable-luit --enable-warnings --enable-wide-chars \
|
||||
@ -49,13 +47,12 @@ echo %{_datadir}/X11/app-defaults
|
||||
%install
|
||||
%make_install
|
||||
|
||||
cp -fp %{SOURCE1} 16colors.txt
|
||||
desktop-file-install --dir=%{buildroot}/%{_datadir}/applications xterm.desktop
|
||||
mkdir -p %{buildroot}/%{_datadir}/appdata
|
||||
install -m 644 -p xterm.appdata.xml %{buildroot}/%{_datadir}/appdata
|
||||
|
||||
%files
|
||||
%doc 16colors.txt THANKS
|
||||
%doc THANKS
|
||||
%{_bindir}/*xterm
|
||||
%{_datadir}/X11/app-defaults/*
|
||||
%{_datadir}/appdata/xterm.appdata.xml
|
||||
@ -69,5 +66,26 @@ install -m 644 -p xterm.appdata.xml %{buildroot}/%{_datadir}/appdata
|
||||
%{_mandir}/man1/*
|
||||
|
||||
%changelog
|
||||
* Fri Sep 27 2024 lingsheng <lingsheng1@h-partners.com> - 334-7
|
||||
- fix CVE-2022-45063
|
||||
|
||||
* Wed Feb 23 2022 xingxing <xingxing9@h-partners.com> - 334-6
|
||||
- fix CVE-2022-24130
|
||||
|
||||
* Wed Mar 03 2021 jinzhimin <jinzhimin2@huawei.com> - 334-5
|
||||
- fix CVE-2021-27135
|
||||
|
||||
* Thu Jan 3 2020 openEuler Buildteam <buildteam@openeuler.org> - 334-4
|
||||
- Type:bugfix
|
||||
- ID:NA
|
||||
- SUG:NA
|
||||
- DESC:optimization the spec
|
||||
|
||||
* Mon Sep 30 2019 luhuaxin <luhuaxin@huawei.com> - 334-3
|
||||
- Type: enhancement
|
||||
- ID: NA
|
||||
- SUG: NA
|
||||
- DESC: package rebuild
|
||||
|
||||
* Wed Aug 28 2019 luhuaxin <luhuaxin@huawei.com> - 334-2
|
||||
- Package init
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user