Skip to content
Snippets Groups Projects
Commit 401ded86 authored by Marcus Comstedt's avatar Marcus Comstedt
Browse files

Ack!

Rev: lib/modules/Stdio.pmod/Terminfo.pmod:1.3
parent dff4e455
No related branches found
No related tags found
No related merge requests found
// $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) #if constant(thread_create)
...@@ -324,7 +324,7 @@ class Terminfo { ...@@ -324,7 +324,7 @@ class Terminfo {
return Array.map(s/2, reverse)*""; 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; int magic, sname, nbool, nnum, nstr, sstr;
...@@ -334,7 +334,10 @@ class Terminfo { ...@@ -334,7 +334,10 @@ class Terminfo {
return 0; return 0;
aliases = (f->read(sname)-"\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)) if (sizeof(bools)>sizeof(boolnames))
bools = bools[..sizeof(boolnames)-1]; bools = bools[..sizeof(boolnames)-1];
map = mkmapping(boolnames[..sizeof(bools)-1], bools); map = mkmapping(boolnames[..sizeof(bools)-1], bools);
...@@ -352,6 +355,11 @@ class Terminfo { ...@@ -352,6 +355,11 @@ class Terminfo {
{ {
string stroffs = swab(f->read(nstr*2)); string stroffs = swab(f->read(nstr*2));
string strbuf = f->read(sstr); 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) if(strlen(strbuf)!=sstr)
return 0; return 0;
array(string) strarr = Array.map(array_sscanf(stroffs, "%2c"*nstr), array(string) strarr = Array.map(array_sscanf(stroffs, "%2c"*nstr),
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment