Can we get rid of GetLocaleInfoEx() yet?

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: pgsql-hackers(at)lists(dot)postgresql(dot)org
Subject: Can we get rid of GetLocaleInfoEx() yet?
Date: 2020-03-29 01:29:31
Message-ID: 24905.1585445371@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Commit 0fb54de9a ("Support building with Visual Studio 2015")
introduced a hack in chklocale.c's win32_langinfo() to make
it use GetLocaleInfoEx() in place of _create_locale().

There's a problem with this, which is that if I'm reading the
docs correctly, GetLocaleInfoEx() accepts a smaller set of
possible locale strings (only "locale names") than do either
_create_locale() or setlocale(). The _create_locale() docs say

The locale argument can take a locale name, a language string, a
language string and country/region code, a code page, or a language
string, country/region code, and code page.

and they imply (but don't quite manage to say in so many words)
that these are the same strings accepted by setlocale().

The reason this is a problem is that when given a locale string,
in either initdb or CREATE DATABASE, we first validate it by
seeing if setlocale() likes it. We produce a reasonable error
message if not. Otherwise we then go on to try to identify the
implied encoding via chklocale.c. But if GetLocaleInfoEx()
fails, we fall back to trying to parse out the codepage for
ourselves, which can lead to a silly/unhelpful error message,
as recently complained of at [1].

The reason for the hack, per the comments, is that VS2015
omits a codepage field from the result of _create_locale();
and some optimism is expressed therein that Microsoft might
undo that oversight in future. Has this been fixed in more
recent VS versions? If not, can we find another, more robust
way to do it?

regards, tom lane

[1] https://www.postgresql.org/message-id/flat/F4D04849032C4464B8FF17CB0F896F9E%40dell2

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Peter Geoghegan 2020-03-29 01:39:32 Re: Improving connection scalability: GetSnapshotData()
Previous Message Thomas Munro 2020-03-29 01:15:09 Re: Improving connection scalability: GetSnapshotData()