Re: VS 2015 support in src/tools/msvc

From: Petr Jelinek <petr(at)2ndquadrant(dot)com>
To: Noah Misch <noah(at)leadboat(dot)com>, Michael Paquier <michael(dot)paquier(at)gmail(dot)com>
Cc: Andrew Dunstan <andrew(at)dunslane(dot)net>, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, Magnus Hagander <magnus(at)hagander(dot)net>, PostgreSQL mailing lists <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: VS 2015 support in src/tools/msvc
Date: 2016-03-09 14:10:33
Message-ID: 56E02ED9.1010308@2ndquadrant.com
Views: Raw Message | Whole Thread | Download mbox
Thread:
Lists: pgsql-hackers

On 09/03/16 05:31, Noah Misch wrote:
> On Tue, Mar 08, 2016 at 10:32:28PM +0900, Michael Paquier wrote:
>> Subject: [PATCH 3/4] Fix use of locales for VS 2015
>>
>> lc_codepage is a flag missing from locale.h, causing this code path
>> introduced in VS 2012 to fail. Perhaps there is a reason for this field
>> to have been clobbered, but let's fall back to the pre-VS-2012 code
>> parsing directly LC_TYPE to get the codepage wanted.
>> ---
>> src/port/chklocale.c | 11 ++++++++++-
>> 1 file changed, 10 insertions(+), 1 deletion(-)
>>
>> diff --git a/src/port/chklocale.c b/src/port/chklocale.c
>> index a551fdc..a7d88fb 100644
>> --- a/src/port/chklocale.c
>> +++ b/src/port/chklocale.c
>> @@ -203,7 +203,16 @@ win32_langinfo(const char *ctype)
>> {
>> char *r = NULL;
>>
>> -#if (_MSC_VER >= 1700)
>> + /*
>> + * lc_codepage is correctly declared in Visual Studio 2012 and 2013.
>> + * However in VS 2015 this flag is missing from locale.h, visibly this
>> + * is an error of refactoring from Microsoft that is at the origin of
>> + * this missing field, causing a compilation failure in this code path.
>> + * Hence, it is more reliable to fall back to other code path grabbing
>
> No, the other path can't handle a "locale name" like "initdb --locale=th-TH".
> That makes the other code path inadequate for VS2012 and later. See the
> IsoLocaleName() header comment.
>

Agreed, that's what I was saying as well.

Something like attached is simplest way this would work correctly (note
that I didn't really test it and it's missing comments). Note that we
are falling back to the old parsing in case the GetLocaleInfoEx didn't
work, that's important because GetLocaleInfoEx does not support the
<Language>_<Country>.<CodePage> format but supports all the rest of
them. The problem with this is the binaries would need to be compiled
with target of vista/windows server 2008+. That would be of course only
the case with builds made with VS2015, so I am not sure if we care all
that much (especially given the fact that older windows are not
supported by MS anyway).

I don't currently know of any way of doing this in VS2015 that would
work with older versions of windows with the exception of having our own
definition of the locale_t struct so that the VS2013 code would still
work...

--
Petr Jelinek http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training & Services

Attachment Content-Type Size
chklocale.diff text/x-patch 1.0 KB

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Robert Haas 2016-03-09 14:19:20 Re: Declarative partitioning
Previous Message Masahiko Sawada 2016-03-09 14:09:46 Re: Freeze avoidance of very large table.