[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: cvs commit to boot-floppies by pb



In message <[🔎] 20011203003115.GA23897@nubol.oskuro.net>, Jordi Mallach writes:
>I'm building some catalan-enabled floppies, with no LANG_CHOOSER.
>It looks like dbootstrap isn't started under the right locale, as it
>shows 8bit characters like "?" in some places, and in others, it cuts
>the line:

Okay, I think I see the cause of the problem.  I'm not sure if it's worth
fixing or not, though.

The utf-8 enabled newt is using mbrtowc() as part of its text processing (look in textbox.c::doReflow).  For this function to work it needs to know what character
set is in use -- in absence of information to the contrary it will assume the 
"C" locale which is restricted to 7-bit ASCII.  So, when it comes across a 
top-bit set character it spits the dummy and returns EILSEQ, which newt
dutifully translates into a '?' symbol.

To fix it "properly", we would need to ship an appropriate locale file and
probably a gconv module.  I don't think it especially matters which one, any
8-bit locale will do.  And dbootstrap would need to make sure that an
appropriate locale is set, probably by hardwiring a call to setlocale() with
the right name.  This isn't a big intellectual problem, but the locale files
can be quite big and we might not want to start putting them on all the root
disks.

An alternative would be to hack newt so that it detected for itself whether
a multibyte locale (ie UTF-8) was in use, and just avoided calls to 
mbrtowc() if not.  Again, this would be relatively easy, but it's a bit of
a mess and turning around a new package might take a while.

Finally, we could just make sure that the versions of newt and slang that end
up on single-locale boot floppies are the non-UTF8 ones.  This seems like the
most attractive proposition right now and I'm pretty sure it will make the
problem go away.

p.



Reply to: