On Sat, Feb 21, 2015 at 1:00 PM, Robert Haas <robertmhaas@gmail.com> wrote:
> On Sat, Feb 21, 2015 at 12:20 PM, Robert Haas <robertmhaas@gmail.com> wrote:
>> On Thu, Feb 12, 2015 at 9:59 PM, Michael Paquier
>> <michael.paquier@gmail.com> wrote:
>>> I looked at your patch and tested it with msvc and it looks good to me.
>>
>> Committed with cosmetic adjustments. Hopefully one of you fine
>> gentlemen will jump in to help if this turns out to break, because I
>> don't do Windows.
>
> currawong doesn't like this:
>
> "c:\prog\bf\root\HEAD\pgsql.build\pgsql.sln" (default target) (1) ->
> (postgres target) ->
> .\src\port\gettimeofday.c(53): error C2440: 'initializing' : cannot
> convert from 'void (__cdecl *)(LPFILETIME)' to 'PgGetSystemTimeFn'
>
>
> "c:\prog\bf\root\HEAD\pgsql.build\pgsql.sln" (default target) (1) ->
> (misc\libpgport target) ->
> .\src\port\gettimeofday.c(53): error C2440: 'initializing' : cannot
> convert from 'void (__cdecl *)(LPFILETIME)' to 'PgGetSystemTimeFn'
>
> 0 Warning(s)
> 2 Error(s)
I assume that the problem here must be whatever secret sauce WINAPI
pours on the declaration. PgSystemTimeFn is declared like this:
typedef VOID (WINAPI *PgGetSystemTimeFn)(LPFILETIME);
...and the function we're trying to assign to a variable of that type
is declared like this:
static void init_gettimeofday(LPFILETIME lpSystemTimeAsFileTime);
Either "void" does not mean the same thing as "VOID", which would be
exceedingly evil, or the WINAPI in there matters, which is still evil,
but somewhat more understandable.
--
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company