--- aclocal.m4 | 40 ++++++++-------- configure | 42 +++++++++------- include/curses.h.in | 3 + include/termcap.h.in | 2 include/tic.h | 4 - man/man_db.renames | 2 man/ncurses.3x | 4 + misc/gen-pkgconfig.in | 8 +++ misc/terminfo.src | 107 ++++++++++++++++++++++++++++++++++++------- ncurses/Makefile.in | 2 ncurses/curses.priv.h | 2 ncurses/run_cmd.sh | 11 ++++ ncurses/tinfo/MKfallback.sh | 10 +++- ncurses/tinfo/access.c | 28 +++++++++++ ncurses/tinfo/lib_setup.c | 3 + ncurses/tinfo/read_entry.c | 2 ncurses/tinfo/read_termcap.c | 21 +++++--- progs/Makefile.in | 4 - test/test.priv.h | 4 - test/tracemunch | 2 20 files changed, 232 insertions(+), 69 deletions(-) --- aclocal.m4 +++ aclocal.m4 2021-03-22 08:38:25.448950138 +0000 @@ -639,7 +639,7 @@ AC_CHECK_SIZEOF(bool,,[ AC_CACHE_CHECK(for type of bool, cf_cv_type_of_bool,[ rm -f cf_test.out AC_TRY_RUN([ -#include +//#include // conflict with exit declaration #include #if defined(__cplusplus) @@ -5614,12 +5614,15 @@ cat >>$cf_edit_man <>$cf_edit_man <>$cf_edit_man <>$cf_edit_man <>$cf_edit_man <\$TMP + < "\$i" | sed -f $srcdir/edit_man.sed >\$TMP CF_EOF fi @@ -5669,7 +5672,7 @@ cat >>$cf_edit_man <>$cf_edit_man <>$cf_edit_man <>$cf_edit_man <>$cf_edit_man <>$cf_edit_man <>$cf_edit_man <\$TMP CF_EOF if test -n "$cf_compress" ; then @@ -5744,9 +5747,9 @@ cat >>$cf_edit_man <>$cf_edit_man <&6 if test "x$with_pcre2" != xno ; then cf_with_pcre2_ok=no - for cf_with_pcre2 in libpcre2 libpcre2-posix libpcre + for cf_with_pcre2 in libpcre2 libpcre2-8 libpcre2-posix libpcre do if test "$PKG_CONFIG" != none && "$PKG_CONFIG" --exists "$cf_with_pcre2"; then @@ -14472,12 +14472,15 @@ cat >>$cf_edit_man <>$cf_edit_man <>$cf_edit_man <>$cf_edit_man <>$cf_edit_man <\$TMP + < "\$i" | sed -f $srcdir/edit_man.sed >\$TMP CF_EOF fi @@ -14527,7 +14530,7 @@ cat >>$cf_edit_man <>$cf_edit_man <>$cf_edit_man <>$cf_edit_man <>$cf_edit_man <>$cf_edit_man <>$cf_edit_man <\$TMP CF_EOF if test -n "$cf_compress" ; then @@ -14602,9 +14605,9 @@ cat >>$cf_edit_man <>$cf_edit_man < +#include + /* * We need FILE, etc. Include this before checking any feature symbols. */ --- include/termcap.h.in +++ include/termcap.h.in 2021-03-22 08:38:25.448950138 +0000 @@ -47,6 +47,8 @@ extern "C" { #endif /* __cplusplus */ +#include +#include #include #undef NCURSES_OSPEED --- include/tic.h +++ include/tic.h 2021-03-22 08:38:25.448950138 +0000 @@ -237,12 +237,12 @@ struct user_table_entry */ /* out-of-band values for representing absent capabilities */ -#define ABSENT_BOOLEAN ((signed char)-1) /* 255 */ +#define ABSENT_BOOLEAN (-1) /* 255 */ #define ABSENT_NUMERIC (-1) #define ABSENT_STRING (char *)0 /* out-of-band values for representing cancels */ -#define CANCELLED_BOOLEAN ((signed char)-2) /* 254 */ +#define CANCELLED_BOOLEAN (-2) /* 254 */ #define CANCELLED_NUMERIC (-2) #define CANCELLED_STRING (char *)(-1) --- man/man_db.renames +++ man/man_db.renames 2021-03-22 08:38:25.452950063 +0000 @@ -164,6 +164,7 @@ term.7 term.7 term_variables.3x terminfo_variables.3ncurses terminfo.5 terminfo.5 terminfo.\\\*n terminfo.5 +curs_terminfo.\\\*n terminfo.5 tic.1m tic.1 toe.1m toe.1 tput.1 tput.1 @@ -172,6 +173,7 @@ user_caps.5 user_caps.5 wresize.3x wresize.3ncurses # # Other: +tack.1 tack.1 tack.1m tack.1 # getty.1 getty.8 --- man/ncurses.3x +++ man/ncurses.3x 2021-03-22 08:38:25.452950063 +0000 @@ -139,6 +139,10 @@ after the shell environment variable \fB [See \fBterminfo\fR(\*n) for further details.] .SS Datatypes .PP +Beware: the terminal your program is running may or may not have +the features you expect. Ncurses makes no attempt to check available +features in advance. This is upon the programmer. +.PP The \fBncurses\fR library permits manipulation of data structures, called \fIwindows\fR, which can be thought of as two-dimensional arrays of characters representing all or part of a CRT screen. --- misc/gen-pkgconfig.in +++ misc/gen-pkgconfig.in 2021-03-22 08:38:25.452950063 +0000 @@ -92,6 +92,9 @@ do -specs*) # ignore linker specs-files which were used to build library continue ;; + -Wl,--hash-size=*) # ignore hash as gold linker can not do + continue + ;; -Wl,-z,*) # ignore flags used to manipulate shared image continue ;; @@ -183,6 +186,7 @@ do LIBS="-l$name" desc="ncurses @NCURSES_MAJOR@.@NCURSES_MINOR@" + deps= reqs= if [ $name = $MAIN_LIBRARY ]; then @@ -193,9 +197,11 @@ do desc="$desc terminal interface library" elif expr $name : ".*${CXX_NAME}.*" >/dev/null ; then reqs="$PANEL_LIBRARY${suffix}, $MENU_LIBRARY${suffix}, $FORM_LIBRARY${suffix}, $MAIN_LIBRARY${suffix}" + deps="-l$PANEL_LIBRARY -l$MENU_LIBRARY -l$FORM_LIBRARY -l$MAIN_LIBRARY" desc="$desc add-on library" else reqs="$MAIN_LIBRARY${suffix}" + deps="-l$MAIN_LIBRARY" desc="$desc add-on library" fi @@ -205,6 +211,8 @@ do [ $NEED_TINFO != yes ] ; then [ -n "$reqs" ] && reqs="$reqs, " reqs="${reqs}${SUB_LIBRARY}${suffix}" + [ -n "$deps" ] && deps="$deps " + deps="${deps}-l${SUB_LIBRARY}" fi if [ $name = $MAIN_LIBRARY ] --- misc/terminfo.src +++ misc/terminfo.src 2021-03-22 08:38:25.452950063 +0000 @@ -305,7 +305,9 @@ dumb|80-column dumb tty, am, cols#80, bel=^G, cr=\r, cud1=\n, ind=\n, -unknown|unknown terminal type, +unknown|switch|patch|unknown terminal type, + gn, use=dumb, +net|network|arpanet|dialup|unknown network terminal type, gn, use=dumb, lpr|printer|line printer, OTbs, hc, os, @@ -1013,9 +1015,15 @@ linux-c|linux console 1.3.6+ for older n # The 2.2.x kernels add a private mode that sets the cursor type; use that to # get a block cursor for cvvis. # reported by Frank Heckenbach . +# +# Do not use a block cursor, +# This because many programs do have a workaround for the long time +# missed cvvis entry. A `\E[?1c' in civis will cause a visible but +# zero high cusor ... re-add it for kernels 2.6.11+ +# linux2.2|linux 2.2.x console, civis=\E[?25l\E[?1c, cnorm=\E[?25h\E[?0c, - cvvis=\E[?25h\E[?8c, use=linux-c-nc, + cvvis=\E[?25h\E[?0c, use=linux-c-nc, # Linux 2.6.x has a fix for SI/SO to work with UTF-8 encoding added here: # http://lkml.iu.edu/hypermail/linux/kernel/0602.2/0738.html @@ -1048,6 +1056,7 @@ linux2.6|linux 2.6.x console, acsc=++\,\,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxy yzz{{||}}~~, enacs=\E)0, rmacs=^O, + cvvis=\E[?25h\E[?8c, sgr=\E[0;10%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p5 %t;2%;%?%p6%t;1%;m%?%p9%t\016%e\017%;, sgr0=\E[m\017, smacs=^N, use=linux2.2, @@ -5347,8 +5356,26 @@ xterm-noapp|xterm with cursor keys in no xterm-24|vs100|xterms|xterm terminal emulator (X Window System), lines#24, use=xterm-old, +# For SuSE Linux: Werner Fink +# Note that the modern xterm does not use escape sequences +# for the numbers on the numpad keys in case of switched +# into application mode and with numlock enabled. +# To test this, use `tput smkx' and `Ctrl-V + key stroke' +xterm-suse|xterm terminal emulator (X.Org X11R7.7 Window System with SuSE LINUX), + kbs=\177, kdch1=\E[3~, + kDIV=\EOo, kMUL=\EOj, kMIN=\EOm, kPLS=\EOk, + kfnd=\E[1~, kslt=\E[4~, + use=xterm-new, + # This is xterm for ncurses. xterm|xterm terminal emulator (X Window System), + use=xterm-suse, + +# xterm-debian is identical to xterm-new with the addition of a small +# VT220-ism regarding the backspace and delete keys; this is mandated by +# the keyboard configuration section of the Debian Policy Manual. +xterm-debian|Debian xterm (backspace and delete changed), + kbs=\177, kdch1=\E[3~, use=xterm-new, # This entry assumes that xterm's handling of VT100 SI/SO is disabled by @@ -5693,7 +5720,7 @@ xterms-sun|small (80x24) xterm with sunF #### GNOME (VTE) # this describes the alpha-version of Gnome terminal shipped with Redhat 6.0 -gnome-rh62|Gnome terminal, +gnome-rh62|Gnome terminal on Red Hat, bce, kdch1=^?, kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, use=xterm-color, @@ -5965,10 +5992,14 @@ mgt|Multi GNOME Terminal, #### KDE # This is kvt 0-18.7, shipped with Redhat 6.0 (though whether it supports bce # or not is debatable). -kvt|KDE terminal, +kvt-rh|KDE terminal, bce, km@, kdch1=^?, kend=\E[F, khome=\E[H, use=xterm-color, +# This is kvt for SuSE because we do not support BrokenByDesign[tm]. +kvt|KDE terminal, + kdch1=\E[3~, use=kvt-rh, + # Konsole 1.0.1 (2001/11/25) # (formerly known as kvt) # @@ -6220,7 +6251,7 @@ mlterm3|multi lingual terminal emulator, mlterm2|multi lingual terminal emulator, am, eslok, km, mc5i, mir, msgr, npc, xenl, XT, colors#8, cols#80, it#8, lines#24, pairs#64, - acsc=00``aaffgghhjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, + acsc=++\,\,--..00II``aaffgghhjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, bel=^G, bold=\E[1m, cbt=\E[Z, clear=\E[H\E[2J, cr=\r, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=\n, cuf=\E[%p1%dC, cuf1=\E[C, @@ -6297,7 +6328,7 @@ rxvt-basic|rxvt terminal base (X Window enacs=\E(B\E)0, flash=\E[?5h$<100/>\E[?5l, home=\E[H, ht=^I, hts=\EH, ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L, ind=\n, is1=\E[?47l\E=\E[?1l, - is2=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;3;4;6l\E[4l, kbs=^H, + is2=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;3;4;6l\E[4l, kbs=^?, kcbt=\E[Z, kmous=\E[M, rc=\E8, rev=\E[7m, ri=\EM, rmacs=^O, rmcup=\E[2J\E[?47l\E8, rmir=\E[4l, rmkx=\E>, rmso=\E[27m, rmul=\E[24m, @@ -6392,8 +6423,8 @@ rxvt-basic|rxvt terminal base (X Window # Removed kDN6, etc (control+shift) since rxvt does not implement this -TD rxvt+pcfkeys|fragment for PC-style fkeys, kDC=\E[3$, kEND=\E[8$, kHOM=\E[7$, kIC=\E[2$, kLFT=\E[d, - kNXT=\E[6$, kPRV=\E[5$, kRIT=\E[c, kcub1=\E[D, kcud1=\E[B, - kcuf1=\E[C, kcuu1=\E[A, kel=\E[8\^, kend=\E[8~, kf1=\E[11~, + kNXT=\E[6$, kPRV=\E[5$, kRIT=\E[c, kcub1=\EOD, kcud1=\EOB, + kcuf1=\EOC, kcuu1=\EOA, kel=\E[8\^, kend=\E[8~, kf1=\E[11~, 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[12~, kf20=\E[34~, @@ -6483,6 +6514,38 @@ rxvt-cygwin-native|rxvt terminal emulato \302x\263y\363z\362{\343|\330~\376, use=rxvt-cygwin, +# From: Thomas Dickey 04 Oct 1997 +# Updated: Özgür Kesim 02 Nov 1997 +# Updated: Marc Lehmann , 17 Feb 2005 +# Updated: Marc Lehmann , 04 Nov 2008: change init/reset sequences +# +rxvt-unicode|rxvt-unicode terminal (X Window System), + bw, ccc, hs, mc5i, npc, btns#5, colors#88, lm#0, ncv#0, pairs#256, + acsc=+C\,D-A.B0E``aaffgghFiGjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, + dsl=\E]2;\007, ech=\E[%p1%dX, enacs=, flash=\E[?5h$<20/>\E[?5l, + fsl=^G, indn=\E[%p1%dS, + initc=\E]4;%p1%d;rgb\:%p2%{65535}%*%{1000}%/%4.4X/%p3%{65535}%*%{1000}%/%4.4X/%p4%{65535}%*%{1000}%/%4.4X\E\\, + is1=\E[!p, + is2=\E[r\E[m\E[2J\E[?7;25h\E[?1;3;4;5;6;9;66;1000;1001;1049l\E[4l, + kIC=\E2$, mc0=\E[i, mc4=\E[4i, mc5=\E[5i, op=\E[39;49m, + rin=\E[%p1%dT, ritm=\E[23m, rmacs=\E(B, rmam=\E[?7l, + rmcup=\E[r\E[?1049l, rmkx=\E[?1l\E>, rs1=\Ec, + rs2=\E[r\E[m\E[?7;25h\E[?1;3;4;5;6;9;66;1000;1001;1049l\E[4l, + s2ds=\E*B, s3ds=\E+B, + setab=\E[48;5;%p1%dm, setaf=\E[38;5;%p1%dm, + setb=%?%p1%{7}%>%t\E[48;5;%p1%dm%e\E[4%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m%;, + setf=%?%p1%{7}%>%t\E[38;5;%p1%dm%e\E[3%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m%;, + sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p7%t;8%;m%?%p9%t\E(0%e\E(B%;, + sgr0=\E[m\E(B, sitm=\E[3m, smacs=\E(0, smam=\E[?7h, + smcup=\E[?1049h, smkx=\E[?1h\E=, + tsl=\E]2;, u6=\E[%i%d;%dR, u7=\E[6n, u8=\E[?1;2c, u9=\E[c, + use=rxvt-basic, + +rxvt-unicode-256color|rxvt-unicode terminal with 256 colors (X Window System), + colors#256, + pairs#32767, + use=rxvt-unicode, + # This variant is supposed to work with rxvt 2.7.7 when compiled with # NO_BRIGHTCOLOR defined. rxvt needs more work... rxvt-16color|rxvt with 16 colors like aixterm, @@ -6547,7 +6610,7 @@ Eterm|Eterm-color|Eterm with xterm-style home=\E[H, hpa=\E[%i%p1%dG, ht=^I, hts=\EH, ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L, ind=\n, is1=\E[?47l\E>\E[?1l, is2=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;3;4;6l\E[4l, kNXT@, - kPRV@, ka1=\E[7~, ka3=\E[5~, kb2=\EOu, kbeg=\EOu, kbs=^H, + kPRV@, ka1=\E[7~, ka3=\E[5~, kb2=\EOu, kbeg=\EOu, kbs=^?, kc1=\E[8~, kc3=\E[6~, kent=\EOM, khlp=\E[28~, kmous=\E[M, mc4=\E[4i, mc5=\E[5i, rc=\E8, rev=\E[7m, ri=\EM, rmacs=^O, rmam=\E[?7l, rmcup=\E[2J\E[?47l\E8, rmir=\E[4l, rmkx=, @@ -7535,7 +7598,7 @@ pty|4bsd pseudo teletype, # https://github.com/emacs-mirror/emacs/blob/master/lisp/term.el # # The codes supported by the term.el terminal emulation in GNU Emacs 19.30 -eterm|gnu emacs term.el terminal emulation, +eterm-19|gnu emacs term.el terminal emulation, am, mir, xenl, cols#80, lines#24, bel=^G, bold=\E[1m, clear=\E[H\E[J, cr=\r, @@ -7548,6 +7611,13 @@ eterm|gnu emacs term.el terminal emulati rmcup=\E[2J\E[?47l\E8, rmir=\E[4l, rmso=\E[m, rmul=\E[m, sgr0=\E[m, smcup=\E7\E[?47h, smir=\E[4h, smso=\E[7m, smul=\E[4m, +eterm|emacs|gnu emacs term.el terminal emulation, + colors#8, pairs#64, + invis=\E[8m, kcub1=\EOD, kcud1=\EOB, + kcuf1=\EOC, kcuu1=\EOA, kend=\E[4~, + khome=\E[1~, knp=\E[6~, kpp=\E[5~, + setab=\E[%p1%{40}%+%dm, setaf=\E[%p1%{30}%+%dm, + use=eterm-19, # The codes supported by the term.el terminal emulation in GNU Emacs 22.2 eterm-color|Emacs term.el terminal emulator term-protocol-version 0.96, @@ -7675,7 +7745,7 @@ screen|VT 100/ANSI X3.64 virtual termina dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, el1=\E[1K, enacs=\E(B\E)0, flash=\Eg, home=\E[H, hpa=\E[%i%p1%dG, ht=^I, hts=\EH, ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L, - ind=\n, indn=\E[%p1%dS, is2=\E)0, kbs=^H, kcbt=\E[Z, + ind=\n, indn=\E[%p1%dS, is2=\E)0, kbs=^?, kcbt=\E[Z, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kf1=\EOP, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf2=\EOQ, kf3=\EOR, kf4=\EOS, kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, @@ -7795,6 +7865,13 @@ screen.xterm-xfree86|screen.xterm-new|sc use=xterm+x11mouse, use=xterm-new, #:screen.xterm|screen for modern xterm, #: use=screen.xterm-new, +screen.xterm|screen customized for modern xterm, + bce@, bw, + invis@, kIC@, kNXT@, kPRV@, meml@, memu@, rep@, + sgr=%?%p9%t\E(0%e\E(B%;\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%| + %t;7%;%?%p4%t;5%;%?%p5%t;2%;m, + E3@, use=screen+italics, use=screen+fkeys, + use=xterm+x11mouse, use=xterm-suse, # xterm-r6 does not really support khome/kend unless it is propped up by # the translations resource. screen.xterm-r6|screen customized for X11R6 xterm, @@ -7882,7 +7959,7 @@ screen2|old VT 100/ANSI X3.64 virtual te 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, ht=^I, hts=\EH, ich=\E[%p1%d@, ich1=, il=\E[%p1%dL, - il1=\E[L, ind=\n, kbs=^H, kcub1=\ED, kcud1=\EB, kcuf1=\EC, + il1=\E[L, ind=\n, kbs=^?, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, kf0=\E~, kf1=\ES, kf2=\ET, kf3=\EU, kf4=\EV, kf5=\EW, kf6=\EP, kf7=\EQ, kf8=\ER, kf9=\E0I, khome=\EH, nel=\r\n, rc=\E8, ri=\EM, rmir=\E[4l, rmso=\E[23m, @@ -9780,7 +9857,7 @@ hp700-wy|HP700/41 emulating wyse30, ri=\Ej, rmir=\Er, rmso=\EG0$<10/>, rmul=\EG0$<10/>, sgr0=\EG0$<10/>, smir=\Eq, smso=\EG4$<10/>, smul=\EG8$<10/>, tbc=\E0, vpa=\E[%p1%{32}%+%c, -hp70092|hp70092a|hp70092A|HP 700/92, +hp70092|hp70092a|hp70092A|70092|HP 700/92, am, da, db, xhp, cols#80, lh#2, lines#24, lm#0, lw#8, nlab#8, acsc=0cjgktlrmfn/q\,t5u6v8w7x., bel=^G, blink=\E&dA, @@ -17427,7 +17504,7 @@ ibm3101|i3101|IBM 3101-10, cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, ed=\EJ, el=\EI, home=\EH, hts=\E0, ind=\n, kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, nel=\r\n, tbc=\EH, -ibm3151|IBM 3151 display, +ibm3151|i3151|IBM 3151 display, is2=\E S, rmacs=\E>B, rmcup=\E>B, rs2=\E S, s0ds=\E>B, sgr=\E4%{64}%?%p1%t%{65}%|%;%?%p2%t%{66}%|%;%?%p3%t%{65}%|%; %?%p4%t%{68}%|%;%?%p5%t%{64}%|%;%?%p6%t%{72}%|%;%?%p7%t @@ -17685,7 +17762,7 @@ lft|lft-pc850|LFT-PC850|IBM LFT PC850 De tbc=\E[3g, use=ecma+index, # "Megapel" refers to the display adapter, which was used with the IBM RT # aka IBM 6150. -ibm5081|hft|IBM Megapel Color display, +ibm5081|ibmmpel|hft|IBM Megapel Color display, acsc=jjkkllmmnnqqttuuvvwwxx, blink@, bold@, s0ds=\E(B, s1ds=\E(0, sgr0=\E[0m\E(B, use=ibm5154, ibm5081-c|ibmmpel-c|IBM 5081 1024x1024 256/4096 Megapel enhanced color display, --- ncurses/Makefile.in +++ ncurses/Makefile.in 2021-03-22 08:38:25.452950063 +0000 @@ -230,7 +230,7 @@ $(DESTDIR)$(libdir) : ../lib : ; mkdir $@ ./fallback.c : $(tinfo)/MKfallback.sh - $(SHELL) -e $(tinfo)/MKfallback.sh $(TERMINFO) $(TERMINFO_SRC) "$(TIC_PATH)" "$(INFOCMP_PATH)" $(FALLBACK_LIST) >$@ + $(SHELL) -e $(srcdir)/run_cmd.sh $(tinfo)/MKfallback.sh $(TERMINFO) $(TERMINFO_SRC) "$(TIC_PATH)" "$(INFOCMP_PATH)" $(FALLBACK_LIST) >$@ ./lib_gen.c : $(base)/MKlib_gen.sh ../include/curses.h $(SHELL) -e $(base)/MKlib_gen.sh "$(CPP) $(CPPFLAGS)" "$(AWK)" generated <../include/curses.h >$@ --- ncurses/curses.priv.h +++ ncurses/curses.priv.h 2021-03-22 08:38:25.456949988 +0000 @@ -2277,6 +2277,8 @@ extern NCURSES_EXPORT(char *) _nc_tracec extern NCURSES_EXPORT(char *) _nc_tracemouse (SCREEN *, MEVENT const *); extern NCURSES_EXPORT(char *) _nc_trace_mmask_t (SCREEN *, mmask_t); extern NCURSES_EXPORT(int) _nc_access (const char *, int); +extern NCURSES_EXPORT(void) _nc_fsid(void); +extern NCURSES_EXPORT(void) _nc_fseid(void); extern NCURSES_EXPORT(int) _nc_baudrate (int); extern NCURSES_EXPORT(int) _nc_freewin (WINDOW *); extern NCURSES_EXPORT(int) _nc_getenv_num (const char *); --- ncurses/run_cmd.sh +++ ncurses/run_cmd.sh 2021-03-22 08:38:25.456949988 +0000 @@ -0,0 +1,11 @@ +#!/bin/sh + +PATH=$PWD/../progs:$PATH +if test -n "$LD_LIBRARY_PATH"; then + LD_LIBRARY_PATH="$PWD/../lib:$LD_LIBRARY_PATH" +else + LD_LIBRARY_PATH="$PWD/../lib" +fi +export PATH LD_LIBRARY_PATH + +exec ${1+"$@"} --- ncurses/tinfo/MKfallback.sh +++ ncurses/tinfo/MKfallback.sh 2021-03-22 08:38:25.456949988 +0000 @@ -74,6 +74,12 @@ else tmp_info= fi +if test -n "$TERMINFO" -a -d "$TERMINFO" ; then + infocmp_args="-v1 -A $TERMINFO" +else + infocmp_args="-v1" +fi + cat </NCURSES_INT2/g' + "$infocmp_path" $infocmp_args -E "$x" | sed -e 's/\/NCURSES_INT2/g' done cat < +#endif + #include #include @@ -111,6 +115,30 @@ _nc_basename(char *path) return path + _nc_pathlast(path); } +NCURSES_EXPORT(void) +_nc_fsid() +{ +#ifdef linux + int _old_errno = errno; + setfsuid(getuid()); + setfsgid(getgid()); + errno = _old_errno; +#endif + return; +} + +NCURSES_EXPORT(void) +_nc_fseid() +{ +#ifdef linux + int _old_errno = errno; + setfsuid(geteuid()); + setfsgid(getegid()); + errno = _old_errno; +#endif + return; +} + NCURSES_EXPORT(int) _nc_access(const char *path, int mode) { --- ncurses/tinfo/lib_setup.c +++ ncurses/tinfo/lib_setup.c 2021-03-22 08:38:25.456949988 +0000 @@ -613,6 +613,9 @@ _nc_locale_breaks_acs(TERMINAL *termp) } else if ((value = tigetnum("U8")) >= 0) { result = value; /* use extension feature */ } else if ((env = getenv("TERM")) != 0) { + char *yast = getenv("YAST_DOES_ACS"); + if (yast != 0) + return 0; /* YaST uses always correct font mappings */ if (strstr(env, "linux")) { result = 1; /* always broken */ } else if (strstr(env, "screen") != 0 --- ncurses/tinfo/read_entry.c +++ ncurses/tinfo/read_entry.c 2021-03-22 08:38:25.456949988 +0000 @@ -551,6 +551,7 @@ _nc_read_file_entry(const char *const fi FILE *fp = 0; int code; + _nc_fsid(); if (_nc_access(filename, R_OK) < 0 || (fp = fopen(filename, BIN_R)) == 0) { TR(TRACE_DATABASE, ("cannot open terminfo %s (errno=%d)", filename, errno)); @@ -571,6 +572,7 @@ _nc_read_file_entry(const char *const fi } fclose(fp); } + _nc_fseid(); return (code); } --- ncurses/tinfo/read_termcap.c +++ ncurses/tinfo/read_termcap.c 2021-03-22 08:38:25.456949988 +0000 @@ -323,14 +323,18 @@ _nc_getent( */ if (fd >= 0) { (void) lseek(fd, (off_t) 0, SEEK_SET); - } else if ((_nc_access(db_array[current], R_OK) < 0) - || (fd = open(db_array[current], O_RDONLY, 0)) < 0) { - /* No error on unfound file. */ - if (errno == ENOENT) - continue; - free(record); - return (TC_SYS_ERR); } else { + _nc_fsid(); + if ((_nc_access(db_array[current], R_OK) < 0) || + (fd = open(db_array[current], O_RDONLY, 0)) < 0) { + _nc_fseid(); + /* No error on unfound file. */ + if (errno == ENOENT) + continue; + free(record); + return (TC_SYS_ERR); + } + _nc_fseid(); myfd = TRUE; } lineno = 0; @@ -1123,8 +1127,10 @@ _nc_read_termcap_entry(const char *const for (i = 0; i < filecount; i++) { TR(TRACE_DATABASE, ("Looking for %s in %s", tn, termpaths[i])); + _nc_fsid(); if (_nc_access(termpaths[i], R_OK) == 0 && (fp = fopen(termpaths[i], "r")) != (FILE *) 0) { + _nc_fseid(); _nc_set_source(termpaths[i]); /* @@ -1136,6 +1142,7 @@ _nc_read_termcap_entry(const char *const (void) fclose(fp); } + _nc_fseid(); } } if (copied != 0) --- progs/Makefile.in +++ progs/Makefile.in 2021-03-22 08:38:25.456949988 +0000 @@ -101,7 +101,7 @@ CFLAGS_LIBTOOL = $(CCFLAGS) CFLAGS_NORMAL = $(CCFLAGS) -DNCURSES_STATIC CFLAGS_DEBUG = $(CCFLAGS) -DNCURSES_STATIC @CC_G_OPT@ -DTRACE CFLAGS_PROFILE = $(CCFLAGS) -DNCURSES_STATIC -pg -CFLAGS_SHARED = $(CCFLAGS) @CC_SHARED_OPTS@ +CFLAGS_SHARED = $(CCFLAGS) -fPIE CFLAGS_DEFAULT = $(CFLAGS_@DFT_UPR_MODEL@) @@ -118,7 +118,7 @@ LDFLAGS_LIBTOOL = $(LDFLAGS) $(CFLAGS_LI LDFLAGS_NORMAL = $(LDFLAGS) $(CFLAGS_NORMAL) LDFLAGS_DEBUG = $(LDFLAGS) $(CFLAGS_DEBUG) LDFLAGS_PROFILE = $(LDFLAGS) $(CFLAGS_PROFILE) -LDFLAGS_SHARED = $(LDFLAGS) $(CFLAGS_SHARED) @LD_SHARED_OPTS@ +LDFLAGS_SHARED = $(LDFLAGS) $(CFLAGS_SHARED) -pie LDFLAGS_DEFAULT = $(LDFLAGS_@DFT_UPR_MODEL@) --- test/test.priv.h +++ test/test.priv.h 2021-03-22 08:38:25.456949988 +0000 @@ -1037,12 +1037,12 @@ extern char *_nc_strstr(const char *, co #endif /* out-of-band values for representing absent capabilities */ -#define ABSENT_BOOLEAN ((signed char)-1) /* 255 */ +#define ABSENT_BOOLEAN (char)-1) /* 255 */ #define ABSENT_NUMERIC (-1) #define ABSENT_STRING (char *)0 /* out-of-band values for representing cancels */ -#define CANCELLED_BOOLEAN ((signed char)-2) /* 254 */ +#define CANCELLED_BOOLEAN (-2) /* 254 */ #define CANCELLED_NUMERIC (-2) #define CANCELLED_STRING (char *)(-1) --- test/tracemunch +++ test/tracemunch 2021-03-22 09:05:17.914573340 +0000 @@ -1,4 +1,4 @@ -#!/usr/bin/env perl +#!/usr/bin/perl # $Id: tracemunch,v 1.40 2021/02/13 19:29:12 tom Exp $ ############################################################################## # Copyright 2018-2020,2021 Thomas E. Dickey #