info-mtools
[Top][All Lists]
Advanced

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

Re: [Info-mtools] mtools does not work in Turkish locale


From: Pali Rohár
Subject: Re: [Info-mtools] mtools does not work in Turkish locale
Date: Thu, 22 Oct 2020 19:01:48 +0200
User-agent: NeoMutt/20180716

Hello!

On Thursday 22 October 2020 16:55:04 Chris Lamb wrote:
>   $ LC_CTYPE=tr_TR.UTF-8 mtools
>   Syntax error at line 5 for drive A: column 9 in file /etc/mtools.conf: 
> unrecognized keyword
> 
>   $ echo $?
>   1
> 
...
> As I describe in my followup to that bug, I can confirm that this is
> indeed locale issue, as commenting out the setlocale(3) call at the
> top of the "main" entry point fixes this issue.
> 
> The following "patch" against mtools.c also ""works"" for me:
> 
>   +#ifdef HAVE_SETLOCALE
>   +       char *old_locale = setlocale(LC_ALL, NULL);
>   +       setlocale(LC_ALL, "C");
>   +       read_config();
>   +       setlocale(LC_ALL, old_locale);
>   +#else
>           read_config();
>   +#endif
> 
> 
> .. but this is obviously not right, as it would mean that genuine
> syntax errors printed in read_config() would not be translated into,
> well, Turkish. Can't seem to get a "C" locale version of toupper(3) to
> work right this second, and am assuming you folks will have a cleaner
> solution anyway, hence forwarding this to you.

IIRC toupper() for lowercase i with dot in Turkish locale returns
uppercase I with dot. In English or C locale it is uppercase I without
dot.

I guess that for case-insensitive parsing of config options (which are
written in English) should be used toupper() variant in C locale.

There is a standard POSIX function toupper_l() which takes as a second
argument locale. So I think that for reading config file it should be
used function toupper_l() with C locale instead of locale-dependent
toupper() function.

-- 
Pali Rohár
pali.rohar@gmail.com



reply via email to

[Prev in Thread] Current Thread [Next in Thread]