On Wed, Jul 25, 2018 at 06:49:02AM -0400, Thomas Dickey wrote: > On Tue, Jul 24, 2018 at 09:12:07AM -0400, James McCoy wrote: > > Ironically, the change in format was prompted by comments that upstream > > saw in unibilium's source code. > > That couldn't possibly be true, since I began the work for the formatting > change (specifically the part which we're discussing) in Februrary > 2017, in a branch, publishing the first changes early in March: > > http://lists.gnu.org/archive/html/bug-ncurses/2017-03/msg00006.html > > The first comments about unibilium relative to this work > were a few months later, on the ncurses mailing list: > > http://lists.gnu.org/archive/html/bug-ncurses/2017-08/msg00031.html > > You may be referring to this: > > http://lists.gnu.org/archive/html/bug-ncurses/2018-04/msg00002.html > > which is a refinement: unibilium ignored the value, and ncurses wasn't > making effective use of it.
I'm referring to this change: $ git diff upstream/6.1+20180210 upstream/6.1+20180630 -- doc/html/man/term.5.html @@ -175,69 +175,72 @@ (3) count of extended string capabilities - (4) size of the extended string table in bytes. + (4) count of the items in extended string table - (5) last offset of the extended string table in bytes. + (5) size of the extended string table in bytes - Using the counts and sizes, ncurses allocates arrays and reads data for + The count- and size-values for the extended string table include the + extended capability <EM>names</EM> as well as extended capability <EM>values</EM>. + + Using the counts and sizes, <STRONG>ncurses</STRONG> allocates arrays and reads data for the extended capabilities in the same order as the header information. Header 4 used to report how many offsets followed the extended bool and num capabilities, which unibilium used to perform a consistency check: https://github.com/mauke/unibilium/blob/e3b16d6219ca1cb92d98b1d9cc416b49a3ac468e/unibilium.c#L337-L342 extalllen = 0; extalllen += extboollen; extalllen += extnumlen; extalllen += extstrslen; DEL_FAIL_IF(extofflen != extalllen + extstrslen, EINVAL, t); Now header 4 is reporting how many elements are in the string table. Since the number of valid extended string capabilities (those with a name and value) may be less than the number of extended string capabilities reported by header 3, this self-check no longer works. This is pretty clear in the diff of the screen entry before and after the format change: $ diff -u <(xxd -g 1 6.1+20180210-4/lib/terminfo/s/screen) <(xxd -g 1 6.1+20180714-1/lib/terminfo/s/screen) --- /proc/self/fd/16 2018-07-25 07:49:24.471395993 -0400 +++ /proc/self/fd/20 2018-07-25 07:49:24.471395993 -0400 @@ -93,12 +93,12 @@ 000005c0: 00 1b 5b 32 34 7e 00 1b 5b 31 4b 00 1b 5b 33 39 ..[24~..[1K..[39 000005d0: 3b 34 39 6d 00 1b 5b 4d 00 1b 5b 33 25 70 31 25 ;49m..[M..[3%p1% 000005e0: 64 6d 00 1b 5b 34 25 70 31 25 64 6d 00 00 03 00 dm..[4%p1%dm.... -000005f0: 01 00 0b 00 1a 00 43 00 01 01 00 00 01 00 00 00 ......C......... +000005f0: 01 00 0c 00 12 00 46 00 01 01 00 00 01 00 00 00 ......F......... 00000600: ff ff 04 00 ff ff ff ff ff ff ff ff ff ff ff ff ................ -00000610: ff ff ff ff 00 00 03 00 06 00 09 00 0c 00 0f 00 ................ -00000620: 12 00 15 00 18 00 1e 00 24 00 28 00 2c 00 30 00 ........$.(.,.0. -00000630: 34 00 1b 28 42 00 1b 28 25 70 31 25 63 00 41 58 4..(B..(%p1%c.AX -00000640: 00 47 30 00 58 54 00 55 38 00 45 30 00 45 33 00 .G0.XT.U8.E0.E3. -00000650: 53 30 00 58 4d 00 6b 45 4e 44 35 00 6b 48 4f 4d S0.XM.kEND5.kHOM -00000660: 35 00 6b 61 32 00 6b 62 31 00 6b 62 33 00 6b 63 5.ka2.kb1.kb3.kc -00000670: 32 00 78 6d 00 2.xm. +00000610: ff ff ff ff ff ff 00 00 03 00 06 00 09 00 0c 00 ................ +00000620: 0f 00 12 00 15 00 18 00 1b 00 21 00 27 00 2b 00 ..........!.'.+. +00000630: 2f 00 33 00 37 00 1b 28 42 00 1b 28 25 70 31 25 /.3.7..(B..(%p1% +00000640: 63 00 41 58 00 47 30 00 58 54 00 55 38 00 45 30 c.AX.G0.XT.U8.E0 +00000650: 00 45 33 00 53 30 00 54 53 00 58 4d 00 6b 45 4e .E3.S0.TS.XM.kEN +00000660: 44 35 00 6b 48 4f 4d 35 00 6b 61 32 00 6b 62 31 D5.kHOM5.ka2.kb1 +00000670: 00 6b 62 33 00 6b 63 32 00 78 6d 00 .kb3.kc2.xm. Unibilium would have to parse the string offsets first to know which are valid and then perform a similar consistency check. Cheers, -- James GPG Key: 4096R/91BF BF4D 6956 BD5D F7B7 2D23 DFE6 91AE 331B A3DB