Re: popen and pclose redefinitions causing many warning in Windows build

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: popen and pclose redefinitions causing many warning in Windows build
Дата
Msg-id 16856.1399562342@sss.pgh.pa.us
обсуждение исходный текст
Ответ на Re: popen and pclose redefinitions causing many warning in Windows build  (Heikki Linnakangas <hlinnakangas@vmware.com>)
Ответы Re: popen and pclose redefinitions causing many warning in Windows build  (Andrew Dunstan <andrew@dunslane.net>)
Список pgsql-hackers
Heikki Linnakangas <hlinnakangas@vmware.com> writes:
> On 05/08/2014 08:01 AM, Michael Paquier wrote:
>> Since commit a692ee5, code compilation on windows is full of warnings
>> caused by the re-definitions of popen and pclose:

> Hmm. Does the MinGW version of popen() and system() do the quoting for 
> you? If we just #ifdef the defines, then we will not use the wrappers on 
> MinGW, which would be wrong if the quoting is needed there. If it's not 
> needed, then we shouldn't be compiling the wrapper functions in the 
> first place.

Another problem, if we do need the wrappers on mingw, is that the
"#undef" commands in system.c will presumably result in the wrong
things happening in the wrapper functions, since the platform needs
us to use their macros there.

The simplest workaround I can think of is to change the stanza in
port.h to be like
      #ifndef DONT_DEFINE_SYSTEM_POPEN      #undef system      #define system(a) pgwin32_system(a)      #undef popen
 #define popen(a,b) pgwin32_popen(a,b)      #undef pclose      #define pclose(a) _pclose(a)      #endif
 

and then have system.c do #define DONT_DEFINE_SYSTEM_POPEN before
including postgres.h.  This is pretty grotty, but on the other hand
it'd remove the need for the #undef's in system.c.
        regards, tom lane



В списке pgsql-hackers по дате отправления:

Предыдущее
От: Robert Haas
Дата:
Сообщение: PQputCopyEnd doesn't adhere to its API contract
Следующее
От: Tom Lane
Дата:
Сообщение: Re: Compilation errors with mingw build caused by undefined optreset