From: Pedro Alves <palves@redhat.com>
To: Yao Qi <yao@codesourcery.com>
Cc: Tom Tromey <tromey@redhat.com>,
Joel Brobecker <brobecker@adacore.com>,
gdb-patches@sourceware.org
Subject: Re: [ping] [PATCH] Different outputs affected by locale
Date: Mon, 09 Jun 2014 10:11:00 -0000 [thread overview]
Message-ID: <53958862.5020106@redhat.com> (raw)
In-Reply-To: <539571C6.40605@codesourcery.com>
On 06/09/2014 09:35 AM, Yao Qi wrote:
> LC_CTYPE isn't set on the Windows machine I am using. set LC_CTYPE=C,
> but the output is unchanged.
>
> I dive into locale stuff, and find something more, in
> main.c:captured_main, gdb does
>
> #if defined (HAVE_SETLOCALE)
> setlocale (LC_CTYPE, "");
> #endif
>
> the man page of setlocale says
>
> If locale is "", each part of the locale that should be modified is set
> according to the environment variables.
>
> That is why we can pass env var to change gdb's locale.
>
> However, looks setlocale on Windows behaves differently when locale is
> "". The msdn about setlocale
> <http://msdn.microsoft.com/en-us/library/x99tb11d.aspx> says "If locale
> points to an empty string, the locale is the implementation-defined
> native environment.", but it doesn't say much on the
> "implementation-defined native environment". The following example
> in the same page gives me some hints,
>
> setlocale( LC_ALL, "" );
> Sets the locale to the default, which is the user-default ANSI code page
> obtained from the operating system.
>
> As far as I can see, windows doesn't consider any env var with
> setlocale(FOO, "").
Correct.
> If I am correct, we can't set gdb's locale by means
> of setting env var,
Not true. It just means that GDB should be doing more
on native Windows, instead of assuming setlocale on Windows
behaves like the POSIX counterpart. See e.g.,
src/intl/localename.c (gettext):
...
/* Let the user override the system settings through environment
variables, as on POSIX systems. */
retval = getenv ("LC_ALL");
if (retval != NULL && retval[0] != '\0')
return retval;
retval = getenv (categoryname);
if (retval != NULL && retval[0] != '\0')
return retval;
retval = getenv ("LANG");
if (retval != NULL && retval[0] != '\0')
return retval;
/* Use native Win32 API locale ID. */
lcid = GetThreadLocale ();
...
etc.
But that code has evolved upstream, and we have the solution
already in gnulib. See:
http://lists.gnu.org/archive/html/bug-gnulib/2011-02/msg00154.html
Newer versions of intl/gettext override setlocale like that too:
http://git.savannah.gnu.org/cgit/gettext.git/tree/gettext-runtime/intl/setlocale.c
> instead, we have to match all the possibilities in
> the testcase. WDYT?
I think the test caught a real GDB bug on Windows, and we
should fix GDB to make it look at the environment variables,
as is expected of GNU programs. And that the best way
to handle this is to import the gnulib setlocale module.
--
Pedro Alves
next prev parent reply other threads:[~2014-06-09 10:11 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-05-27 12:13 Yao Qi
2014-06-04 5:32 ` [ping] " Yao Qi
2014-06-04 12:47 ` Joel Brobecker
2014-06-04 13:21 ` Yao Qi
2014-06-04 13:52 ` Joel Brobecker
2014-06-04 20:15 ` Tom Tromey
2014-06-04 20:23 ` Pedro Alves
2014-06-05 3:31 ` Yao Qi
2014-06-05 8:58 ` Pedro Alves
2014-06-05 9:58 ` Yao Qi
2014-06-05 10:12 ` Pedro Alves
2014-06-05 15:04 ` Eli Zaretskii
2014-06-09 8:37 ` Yao Qi
2014-06-09 10:11 ` Pedro Alves [this message]
2014-06-11 2:22 ` Yao Qi
2014-06-11 16:23 ` Eli Zaretskii
2014-06-12 0:48 ` Yao Qi
2014-06-12 2:47 ` Eli Zaretskii
2014-06-12 7:04 ` Yao Qi
2014-06-12 17:03 ` Eli Zaretskii
2014-06-17 1:03 ` Yao Qi
2014-06-12 11:36 ` Pedro Alves
2014-06-12 14:39 ` Yao Qi
2014-06-12 17:07 ` Eli Zaretskii
2014-06-12 17:23 ` Pedro Alves
2014-06-12 17:48 ` Eli Zaretskii
2014-06-17 3:46 ` Yao Qi
2014-06-17 10:03 ` Pedro Alves
2014-06-17 11:39 ` Yao Qi
2014-06-12 17:09 ` Eli Zaretskii
2014-06-12 17:27 ` Pedro Alves
2014-06-12 17:50 ` Eli Zaretskii
2014-06-12 18:06 ` Pedro Alves
2014-06-12 18:35 ` Eli Zaretskii
2014-06-16 13:58 ` Pedro Alves
2014-06-16 15:40 ` Eli Zaretskii
2014-06-16 16:23 ` Pedro Alves
2014-06-05 10:27 ` Pedro Alves
2014-06-05 14:47 ` Eli Zaretskii
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=53958862.5020106@redhat.com \
--to=palves@redhat.com \
--cc=brobecker@adacore.com \
--cc=gdb-patches@sourceware.org \
--cc=tromey@redhat.com \
--cc=yao@codesourcery.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox