Critical typedef redefinitions
| From: | David Strauss | Date: | Sun, 02 Jan 2005 10:41:32 +0000 |
| Subject: | Critical typedef redefinitions | ||
| Groups: | php.internals | ||
| Request: | Send a blank email to internals+get-14261@lists.php.net to get a copy of this message | ||
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