On Sat, Nov 26, 2005 at 04:08:47PM +0100, Marc Espie wrote:

> Looks like the  charset.alias file from libiconv needs to be completed
> with info about what to do with 646...
> 
> netbsd does not have the issue because it does not use gnu libiconv...
> 
> Just adding a line like:
> 
> 646   ISO-8859-1
> 
> to /usr/local/lib/charset.alias should fix things (even though it's
> slightly incorrect)

changing charset.aliases is not really a complete fix.

for example, iconv(1) does not work if you use "646" as an encoding.

code that is busted because it is using nl_langinfo(CODESET)
to get the charset can be fixed by using locale_charset() from
libiconv (or libcharset but it seems nothing uses libcharset)
instead.

locale_charset() takes the output of nl_langinfo(CODESET) and does
the canonicalization (the lookup in charset.aliases).

-- 
<[EMAIL PROTECTED]>

as an example:

#include <stdlib.h>
#include <stdio.h>
#include <nl_types.h>
#include <langinfo.h>
#ifdef USE_LIBICONV
#include <localcharset.h>
#endif

int
main(int argc, char *argv[])
{
const char *codeset;
const char *codeset_iconv;

        codeset = NULL;
        codeset_iconv = NULL;

        codeset = nl_langinfo(CODESET);

#ifdef USE_LIBICONV
        codeset_iconv = locale_charset();
#endif

        if (codeset == NULL)
                codeset = "";

        if (codeset_iconv == NULL)
                codeset_iconv = "";

        printf("codeset = %s\n", codeset);
        printf("codeset_iconv = %s\n", codeset_iconv);

        exit(0);
}

Reply via email to