From 401ded86bf2acf3b7015d0eea5d0c9da9144fc06 Mon Sep 17 00:00:00 2001 From: Marcus Comstedt <marcus@mc.pp.se> Date: Thu, 18 Mar 1999 00:26:03 +0100 Subject: [PATCH] Ack! Rev: lib/modules/Stdio.pmod/Terminfo.pmod:1.3 --- lib/modules/Stdio.pmod/Terminfo.pmod | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/lib/modules/Stdio.pmod/Terminfo.pmod b/lib/modules/Stdio.pmod/Terminfo.pmod index ee47f6ebb2..18f792d893 100644 --- a/lib/modules/Stdio.pmod/Terminfo.pmod +++ b/lib/modules/Stdio.pmod/Terminfo.pmod @@ -1,4 +1,4 @@ -// $Id: Terminfo.pmod,v 1.2 1999/03/17 23:17:42 marcus Exp $ +// $Id: Terminfo.pmod,v 1.3 1999/03/17 23:26:03 marcus Exp $ #if constant(thread_create) @@ -324,7 +324,7 @@ class Terminfo { return Array.map(s/2, reverse)*""; } - static private int load_cap(object f) + static private int load_cap(object f, int|void bug_compat) { int magic, sname, nbool, nnum, nstr, sstr; @@ -334,7 +334,10 @@ class Terminfo { return 0; aliases = (f->read(sname)-"\0")/"|"; { - array(int) bools = values(f->read(nbool/*+(nbool&1)*/)/*[..nbool-1]*/); + int blen = nbool; + if((nbool&1) && !bug_compat) + blen++; + array(int) bools = values(f->read(blen)[..nbool-1]); if (sizeof(bools)>sizeof(boolnames)) bools = bools[..sizeof(boolnames)-1]; map = mkmapping(boolnames[..sizeof(bools)-1], bools); @@ -352,6 +355,11 @@ class Terminfo { { string stroffs = swab(f->read(nstr*2)); string strbuf = f->read(sstr); + if(strlen(strbuf)==sstr-1 && !bug_compat && (nbool&1)) { + // Ugh. Someone didn't pad their bool array properly (one suspects). + f->seek(0); + return load_cap(f, 1); + } if(strlen(strbuf)!=sstr) return 0; array(string) strarr = Array.map(array_sscanf(stroffs, "%2c"*nstr), -- GitLab