[packages/slang] - rel 2; ncurses 6.1 32-bit terminfo database support from slang snapshot
arekm
arekm at pld-linux.org
Tue Jan 30 10:32:47 CET 2018
commit be88f3cdf941e46e3426865fdcddef98584c719d
Author: Arkadiusz Miśkiewicz <arekm at maven.pl>
Date: Tue Jan 30 10:32:39 2018 +0100
- rel 2; ncurses 6.1 32-bit terminfo database support from slang snapshot
slang-32bit-terminfo.patch | 199 +++++++++++++++++++++++++++++++++++++++++++++
slang.spec | 4 +-
2 files changed, 202 insertions(+), 1 deletion(-)
---
diff --git a/slang.spec b/slang.spec
index 74cf302..62256c5 100644
--- a/slang.spec
+++ b/slang.spec
@@ -15,7 +15,7 @@ Summary(tr.UTF-8): C benzeri dil için ortak kitaplık
Summary(uk.UTF-8): Бібліотека спільного користування C-подібної мови розширення S-Lang
Name: slang
Version: 2.3.1a
-Release: 1
+Release: 2
Epoch: 1
License: GPL v2+
Group: Libraries
@@ -24,6 +24,7 @@ Source0: http://www.jedsoft.org/releases/slang/%{name}-%{version}.tar.bz2
Patch0: %{name}-nodevel.patch
Patch1: %{name}-remove_unused_terminfo_paths.patch
Patch2: slang-2.2.4-perms.patch
+Patch3: slang-32bit-terminfo.patch
URL: http://www.jedsoft.org/slang/
%{?with_png:BuildRequires: libpng-devel}
%{?with_onig:BuildRequires: oniguruma-devel}
@@ -249,6 +250,7 @@ Moduł PCRE dla Slanga.
%patch0 -p1
%patch1 -p1
%patch2 -p1
+%patch3 -p1
%build
%configure \
diff --git a/slang-32bit-terminfo.patch b/slang-32bit-terminfo.patch
new file mode 100644
index 0000000..e1c47ec
--- /dev/null
+++ b/slang-32bit-terminfo.patch
@@ -0,0 +1,199 @@
+commit 6dd5ade9a97b52ace4ac033779a6d3c1c51db4d1
+Author: John E. Davis <jed at jedsoft.org>
+Date: Tue Jan 30 04:04:17 2018 -0500
+
+ pre2.3.2-19: Added support for the new ncurses 32-bit terminfo database entries.
+
+diff --git a/src/sltermin.c b/src/sltermin.c
+index 34bc73c..99fc8f9 100644
+--- a/src/sltermin.c
++++ b/src/sltermin.c
+@@ -33,6 +33,11 @@ USA.
+ * term(4) man page on an SGI.
+ */
+
++/* The ncurses terminfo binary files come in two flavors: A legacy
++ * format that uses 16 bit integers in the number-section, and a new
++ * 32 bit format (nurses 6, from 2018).
++ */
++
+ /* Short integers are stored in two 8-bit bytes. The first byte contains
+ * the least significant 8 bits of the value, and the second byte contains
+ * the most significant 8 bits. (Thus, the value represented is
+@@ -43,7 +48,7 @@ USA.
+ * source and also is to be considered missing.
+ */
+
+-static int make_integer (unsigned char *buf)
++static int make_integer16 (unsigned char *buf)
+ {
+ register int lo, hi;
+ lo = (int) *buf++; hi = (int) *buf;
+@@ -55,6 +60,20 @@ static int make_integer (unsigned char *buf)
+ return lo + 256 * hi;
+ }
+
++static int make_integer32 (unsigned char *buf)
++{
++ unsigned int u;
++ int i;
++
++ u = (unsigned int)buf[0];
++ u |= ((unsigned int)buf[1])<<8;
++ u |= ((unsigned int)buf[2])<<16;
++ u |= ((unsigned int)buf[3])<<24;
++
++ i = (int)u;
++ return i;
++}
++
+ /*
+ * The compiled file is created from the source file descriptions of the
+ * terminals (see the -I option of infocmp) by using the terminfo compiler,
+@@ -64,14 +83,15 @@ static int make_integer (unsigned char *buf)
+ *
+ * The header section begins the file. This section contains six short
+ * integers in the format described below. These integers are (1) the magic
+- * number (octal 0432); (2) the size, in bytes, of the names section; (3)
+- * the number of bytes in the boolean section; (4) the number of short
+- * integers in the numbers section; (5) the number of offsets (short
++ * number (legacy:0432, 01036:32 but); (2) the size, in bytes, of the names section; (3)
++ * the number of bytes in the boolean section; (4) the number of integers
++ * in the numbers section; (5) the number of offsets (short
+ * integers) in the strings section; (6) the size, in bytes, of the string
+ * table.
+ */
+
+-#define MAGIC 0432
++#define MAGIC_LEGACY 0432
++#define MAGIC_32BIT 01036
+
+ /* In this structure, all char * fields are malloced EXCEPT if the
+ * structure is SLTERMCAP. In that case, only terminal_names is malloced
+@@ -91,6 +111,8 @@ struct _pSLterminfo_Type
+
+ unsigned int num_numbers;
+ unsigned char *numbers;
++ unsigned int sizeof_number;
++ int (*make_integer)(unsigned char *);
+
+ unsigned int num_string_offsets;
+ unsigned char *string_offsets;
+@@ -109,6 +131,7 @@ static FILE *open_terminfo (char *file, SLterminfo_Type *h)
+ {
+ FILE *fp;
+ unsigned char buf[12];
++ int magic;
+
+ /* Alan Cox reported a security problem here if the application using the
+ * library is setuid. So, I need to make sure open the file as a normal
+@@ -122,19 +145,34 @@ static FILE *open_terminfo (char *file, SLterminfo_Type *h)
+ fp = fopen (file, "rb");
+ if (fp == NULL) return NULL;
+
+- if ((12 == fread ((char *) buf, 1, 12, fp) && (MAGIC == make_integer (buf))))
++ if (12 != fread ((char *)buf, 1, 12, fp))
++ {
++ (void) fclose(fp);
++ return NULL;
++ }
++ magic = make_integer16(buf);
++ if (magic == MAGIC_LEGACY)
++ {
++ h->make_integer = make_integer16;
++ h->sizeof_number = 2;
++ }
++ else if (magic == MAGIC_32BIT)
+ {
+- h->name_section_size = make_integer (buf + 2);
+- h->boolean_section_size = make_integer (buf + 4);
+- h->num_numbers = make_integer (buf + 6);
+- h->num_string_offsets = make_integer (buf + 8);
+- h->string_table_size = make_integer (buf + 10);
++ h->make_integer = make_integer32;
++ h->sizeof_number = 4;
+ }
+ else
+ {
+- fclose (fp);
+- fp = NULL;
++ (void) fclose (fp);
++ return NULL;
+ }
++
++ h->name_section_size = make_integer16 (buf + 2);
++ h->boolean_section_size = make_integer16 (buf + 4);
++ h->num_numbers = make_integer16 (buf + 6);
++ h->num_string_offsets = make_integer16 (buf + 8);
++ h->string_table_size = make_integer16 (buf + 10);
++
+ return fp;
+ }
+
+@@ -187,13 +225,14 @@ static unsigned char *read_boolean_flags (FILE *fp, SLterminfo_Type *t)
+
+ /*
+ * The numbers section is similar to the boolean flags section. Each
+- * capability takes up two bytes, and is stored as a short integer. If the
+- * value represented is -1 or -2, the capability is taken to be missing.
++ * capability takes up 2(4) bytes for the legacy(32 bit) format and
++ * is stored as a integer. If the value represented is -1 or -2, the
++ * capability is taken to be missing.
+ */
+
+ static unsigned char *read_numbers (FILE *fp, SLterminfo_Type *t)
+ {
+- return t->numbers = read_terminfo_section (fp, 2 * t->num_numbers);
++ return t->numbers = read_terminfo_section (fp, t->sizeof_number * t->num_numbers);
+ }
+
+ /* The strings section is also similar. Each capability is stored as a
+@@ -402,7 +441,7 @@ char *_pSLtt_tigetstr (SLterminfo_Type *t, SLCONST char *cap)
+
+ offset = compute_cap_offset (cap, t, Tgetstr_Map, t->num_string_offsets);
+ if (offset < 0) return NULL;
+- offset = make_integer (t->string_offsets + 2 * offset);
++ offset = make_integer16 (t->string_offsets + 2 * offset);
+ if (offset < 0) return NULL;
+ return t->string_table + offset;
+ }
+@@ -418,7 +457,8 @@ int _pSLtt_tigetnum (SLterminfo_Type *t, SLCONST char *cap)
+
+ offset = compute_cap_offset (cap, t, Tgetnum_Map, t->num_numbers);
+ if (offset < 0) return -1;
+- return make_integer (t->numbers + 2 * offset);
++
++ return (*t->make_integer)(t->numbers + t->sizeof_number * offset);
+ }
+
+ int _pSLtt_tigetflag (SLterminfo_Type *t, SLCONST char *cap)
+diff --git a/src/untic.c b/src/untic.c
+index bd15478..2fa966a 100644
+--- a/src/untic.c
++++ b/src/untic.c
+@@ -36,7 +36,7 @@ int main (int argc, char **argv)
+ puts (t->terminal_names);
+ while (*map->name != 0)
+ {
+- str = (unsigned char *) SLtt_tigetstr (map->name, (char **) &t);
++ str = (unsigned char *) SLtt_tigetstr ((SLFUTURE_CONST char *)map->name, (char **) &t);
+ if (str == NULL)
+ {
+ map++;
+@@ -76,7 +76,7 @@ int main (int argc, char **argv)
+ while (*map->name != 0)
+ {
+ int val;
+- if ((val = SLtt_tigetnum (map->name, (char **) &t)) >= 0)
++ if ((val = SLtt_tigetnum ((SLFUTURE_CONST char *)map->name, (char **) &t)) >= 0)
+ {
+ fprintf (stdout, "\t%s#%d\t\t%s\n",
+ map->name, val,
+@@ -85,6 +85,7 @@ int main (int argc, char **argv)
+ map++;
+ }
+
++ _pSLtt_tifreeent (t);
+ return 0;
+ }
+
================================================================
---- gitweb:
http://git.pld-linux.org/gitweb.cgi/packages/slang.git/commitdiff/be88f3cdf941e46e3426865fdcddef98584c719d
More information about the pld-cvs-commit
mailing list