Critical typedef redefinitions

php.internals

David Strauss

21 years ago
Hi! There is a small problem in cgi_main.c preventing it to be compiled properly with some compilers. WS2tcpip.h will get included into cgi_main.c by following inclusion chain: cgi_main.c <- php_standard.h <- fsock.h <- php_network.h <- WS2tcpip.h Since php.h is included several lines before, socklen_t is already defined as: php.h (151): typedef unsigned int socklen_t; Now WS2tcpip.h gets included and tries to redefine socklen_t as: WS2tcpip.h (593): typedef int socklen_t; I successfully tested it with the VectorC compiler, where this lead to a terminal error. - David Addendum: If you take a look into the CVS snapshot build log, you'll probably see this warning quite a lot of times (58x according to my editor): C:\\Program Files\\Microsoft SDK\\Include\\.\ws2tcpip.h(593) : warning C4142: benign redefinition of type Since this occurs throughout the whole build, the easiest solution is proabably to just change the lines 150-152 in php.h to something like this: #ifndef HAVE_SOCKLEN_T # ifdef PHP_WIN32 typedef int socklen_t; # else typedef unsigned int socklen_t; # endif #endif

Wez Furlong

21 years ago
We only support the MSVC compiler and libc under windows (there are plenty of quirks and assumptions made about it for the win32 build). Changing that typedef is slightly tricky; I left it as it was because there were compilation problems using older versons of MSVC and the platform SDK, and this redefinition is benign. If you can test you proposed change with MSVC 6, VS.Net and your VectorC compiler and make sure that it all still works, then we can commit it. --Wez. On Sun, 02 Jan 2005 11:41:32 +0100, David Strauss <kintaroZ@msn.com> wrote: