Subject: Re: isprint() and isblank()
To: Noriyuki Soda <soda@sra.co.jp>
From: None <itojun@iijlab.net>
List: tech-userlevel
Date: 01/21/2001 15:50:46
>> - we now ship with correct locale table, and lib/libc/locale/runeglue.c
>> converts it into _ctype_. now _ctype_ can have correct locale bit
>> declarations and isprint() can behave strange.
>I think we didn't ship _ctype_[] table with ((_ctype_+1)['\t'] & _B) != 0
>in any release version. Is this right?
>If so, because we don't have to keep bug-compatibility with -current, ...
it seems that there are people using locale declaration file
(/usr/share/locale/*/LC_CTYPE) compiled by chrtbl(8).
there's no guarantee about the above statement.
however, if ((_ctype_+1)['\t'] & _B) != 0, isprint will get broken
(about isprint('\t')) so a locale table with
((_ctype_+1)['\t'] & _B) != 0 could be considered as bogus.
>> 1c. don't change ctype.h declarations.
>> when we load locale declaration file, we make some trick about _B.
>> PROS: smallest amont of changes.
>> CONS: new binaries will have incorrect isprint() and isblank(),
>> forever.
>How about a variant of this?
i've workarounded the problem it by keeing _ctype_ as is, and tweaking
lib/libc/locale/rune{,glue}.c. does it look okay? i changed nothing
in ctype.h nor lib/libc/gen/isctype.c.
i really would like to see newer binaries use
__CurrentRuneLocale.__runetype[] instead of _ctype_. i'm not very
happy about letting future programs to look at _ctype_.
(then, again i'm stuck with problem with dlopen and locale code...)
itojun