svn commit: r515952 - in head/sysutils/screen: . files
Cy Schubert
cy at FreeBSD.org
Tue Oct 29 04:23:47 UTC 2019
Author: cy
Date: Tue Oct 29 04:23:45 2019
New Revision: 515952
URL: https://svnweb.freebsd.org/changeset/ports/515952
Log:
Resolve upstream bug #55482: TERMCAP can break on systems that don't
support terminfo
Obtained from: https://savannah.gnu.org/bugs/?55482
Added:
head/sysutils/screen/files/patch-extern.h (contents, props changed)
head/sysutils/screen/files/patch-fileio.c (contents, props changed)
head/sysutils/screen/files/patch-term.c (contents, props changed)
Modified:
head/sysutils/screen/Makefile (contents, props changed)
head/sysutils/screen/files/patch-os.h (contents, props changed)
head/sysutils/screen/files/patch-termcap.c (contents, props changed)
Modified: head/sysutils/screen/Makefile
==============================================================================
--- head/sysutils/screen/Makefile Tue Oct 29 03:42:56 2019 (r515951)
+++ head/sysutils/screen/Makefile Tue Oct 29 04:23:45 2019 (r515952)
@@ -3,7 +3,7 @@
PORTNAME= screen
PORTVERSION= 4.7.0
-PORTREVISION= 2
+PORTREVISION= 3
CATEGORIES= sysutils
MASTER_SITES= GNU \
ftp://ftp.gnu.org/gnu/screen/ \
Added: head/sysutils/screen/files/patch-extern.h
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/sysutils/screen/files/patch-extern.h Tue Oct 29 04:23:45 2019 (r515952)
@@ -0,0 +1,10 @@
+--- extern.h.orig 2019-10-01 15:08:00.000000000 -0700
++++ extern.h 2019-10-28 19:37:41.584313000 -0700
+@@ -235,6 +235,7 @@
+ /* termcap.c */
+ extern int InitTermcap __P((int, int));
+ extern char *MakeTermcap __P((int));
++extern void DumpTermcap __P((int, FILE *));
+ extern char *gettermcapstring __P((char *));
+ #ifdef MAPKEYS
+ extern int remap __P((int, int));
Added: head/sysutils/screen/files/patch-fileio.c
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/sysutils/screen/files/patch-fileio.c Tue Oct 29 04:23:45 2019 (r515952)
@@ -0,0 +1,14 @@
+--- fileio.c.orig 2019-10-01 15:08:00.000000000 -0700
++++ fileio.c 2019-10-28 19:37:41.585000000 -0700
+@@ -480,10 +480,7 @@
+ break;
+
+ case DUMP_TERMCAP:
+- if ((p = index(MakeTermcap(fore->w_aflag), '=')) != NULL) {
+- fputs(++p, f);
+- putc('\n', f);
+- }
++ DumpTermcap(fore->w_aflag, f);
+ break;
+
+ #ifdef COPY_PASTE
Modified: head/sysutils/screen/files/patch-os.h
==============================================================================
--- head/sysutils/screen/files/patch-os.h Tue Oct 29 03:42:56 2019 (r515951)
+++ head/sysutils/screen/files/patch-os.h Tue Oct 29 04:23:45 2019 (r515952)
@@ -1,5 +1,5 @@
--- os.h.orig 2019-10-01 15:08:00.000000000 -0700
-+++ os.h 2019-10-08 04:49:54.436485000 -0700
++++ os.h 2019-10-28 19:37:41.585526000 -0700
@@ -250,9 +250,11 @@
#endif
@@ -14,6 +14,15 @@
# define utmp utmpx
# define getutent getutxent
# define getutid getutxid
+@@ -507,7 +509,7 @@
+ */
+
+ #ifndef TERMCAP_BUFSIZE
+-# define TERMCAP_BUFSIZE 2048
++# define TERMCAP_BUFSIZE 1023
+ #endif
+
+ #ifndef MAXPATHLEN
@@ -524,6 +526,6 @@
/* Changing those you won't be able to attach to your old sessions
* when changing those values in official tree don't forget to bump
Added: head/sysutils/screen/files/patch-term.c
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/sysutils/screen/files/patch-term.c Tue Oct 29 04:23:45 2019 (r515952)
@@ -0,0 +1,10 @@
+--- term.c.orig 2019-10-01 15:08:00.000000000 -0700
++++ term.c 2019-10-28 19:37:41.585983000 -0700
+@@ -197,6 +197,7 @@
+ { "F1", T_STR }, KMAPDEF("\033[23~")
+ { "F2", T_STR }, KMAPDEF("\033[24~")
+ /* extra keys for vt220 (David.Leonard at it.uq.edu.au) */
++/* define T_FEXTRA */
+ { "F3", T_STR },
+ { "F4", T_STR },
+ { "F5", T_STR },
Modified: head/sysutils/screen/files/patch-termcap.c
==============================================================================
--- head/sysutils/screen/files/patch-termcap.c Tue Oct 29 03:42:56 2019 (r515951)
+++ head/sysutils/screen/files/patch-termcap.c Tue Oct 29 04:23:45 2019 (r515952)
@@ -1,6 +1,22 @@
---- termcap.c.orig 2019-10-01 22:08:00 UTC
-+++ termcap.c
-@@ -227,7 +227,7 @@ int he;
+--- termcap.c.orig 2019-10-01 15:08:00.000000000 -0700
++++ termcap.c 2019-10-28 19:37:41.586957000 -0700
+@@ -75,11 +75,10 @@
+
+ char *extra_incap, *extra_outcap;
+
+-static const char TermcapConst[] = "\\\n\
+-\t:DO=\\E[%dB:LE=\\E[%dD:RI=\\E[%dC:UP=\\E[%dA:bs:bt=\\E[Z:\\\n\
+-\t:cd=\\E[J:ce=\\E[K:cl=\\E[H\\E[J:cm=\\E[%i%d;%dH:ct=\\E[3g:\\\n\
+-\t:do=^J:nd=\\E[C:pt:rc=\\E8:rs=\\Ec:sc=\\E7:st=\\EH:up=\\EM:\\\n\
+-\t:le=^H:bl=^G:cr=^M:it#8:ho=\\E[H:nw=\\EE:ta=^I:is=\\E)0:";
++static const char TermcapConst[] = "DO=\\E[%dB:LE=\\E[%dD:RI=\\E[%dC:\
++UP=\\E[%dA:bs:bt=\\E[Z:cd=\\E[J:ce=\\E[K:cl=\\E[H\\E[J:cm=\\E[%i%d;%dH:\
++ct=\\E[3g:do=^J:nd=\\E[C:pt:rc=\\E8:rs=\\Ec:sc=\\E7:st=\\EH:up=\\EM:\
++le=^H:bl=^G:cr=^M:it#8:ho=\\E[H:nw=\\EE:ta=^I:is=\\E)0:";
+
+ char *
+ gettermcapstring(s)
+@@ -227,7 +226,7 @@
(D_CKM && (InStr(D_CKM, "\033[M") || InStr(D_CKM, "\033[<"))))
{
D_CXT = 1;
@@ -9,7 +25,7 @@
}
/* "be" seems to be standard for xterms... */
if (D_CXT)
-@@ -362,11 +362,7 @@ int he;
+@@ -362,11 +361,7 @@
if (D_CG0)
{
if (D_CS0 == 0)
@@ -22,3 +38,77 @@
if (D_CE0 == 0)
D_CE0 = "\033(B";
D_AC = 0;
+@@ -827,21 +822,13 @@
+ char *s;
+ {
+ register int n;
+-
+- if (tcLineLen + (n = strlen(s)) > 55 && Termcaplen < TERMCAP_BUFSIZE - 4 - 1)
+- {
+- strcpy(Termcap + Termcaplen, "\\\n\t:");
+- Termcaplen += 4;
+- tcLineLen = 0;
+- }
++ n=strlen(s);
+ if (Termcaplen + n < TERMCAP_BUFSIZE - 1)
+ {
+ strcpy(Termcap + Termcaplen, s);
+ Termcaplen += n;
+ tcLineLen += n;
+ }
+- else
+- Panic(0, "TERMCAP overflow - sorry.");
+ }
+
+ /*
+@@ -1077,6 +1064,12 @@
+ {
+ if (i >= T_KEYPAD) /* don't put keypad codes in TERMCAP */
+ continue; /* - makes it too big */
++#if (TERMCAP_BUF < 1024)
++ if (i >= T_FEXTRA && i < T_BACKTAB) /* also skip extra vt220 keys */
++ continue;
++ if (i > T_BACKTAB && i < T_NAVIGATE) /* more vt220 keys */
++ continue;
++#endif
+ if (i >= T_CURSOR && i < T_OCAPS)
+ {
+ act = &umtab[i - (T_CURSOR - T_OCAPS + T_CAPS)];
+@@ -1129,6 +1122,37 @@
+ }
+ debug("MakeTermcap: end\n");
+ return Termcap;
++}
++
++#define TERMCAP_MAX_WIDTH 63
++void
++DumpTermcap(aflag, f)
++int aflag;
++FILE *f;
++{
++ register const char *p, *pe;
++ int n, col=0;
++
++ if ((p = index(MakeTermcap(aflag), '=')) == NULL)
++ return;
++ p++;
++ debug1("DumpTermcap: '%s'\n", p);
++ /* write termcap entry with wrapping */
++ while((pe = index(p, ':')))
++ {
++ n = pe - p + 1;
++ if((col > 8) && ((col + n) > TERMCAP_MAX_WIDTH))
++ {
++ fwrite("\\\n\t:", 1, 4, f);
++ col = 8;
++ }
++ fwrite(p, 1, n, f);
++ col += n;
++ p = ++pe;
++ }
++ if(*p)
++ fwrite(p, 1, strlen(p), f);
++ fputc('\n', f);
+ }
+
+ static void
More information about the svn-ports-all
mailing list