From 0a18a9d744afb9d97d46bad1f40c11a047bad5df Mon Sep 17 00:00:00 2001 From: Wez Furlong Date: Sun, 16 Feb 2003 03:48:49 +0000 Subject: [PATCH] A add much more useful select(2) implementation than is provided by windows sockets. The winsock implementation will only work with sockets; our implementation works with sockets and file descriptors. By association, stream_select() will now operate correctly with files, pipes and sockets. This change required linking against the winsock2 library. In terms of compatibility, only older versions of windows 95 do not have winsock2 installed by default. It is available as a redistributable file, and is most likely installed by any OS patches (eg: Internet Explorer) applied by the user. Also, add a win32 compatible pipe test when opening a stream from a pipe. This test will only work on NT, win2k and XP platforms. Without this test, interleaved fread() and select() calls would cause the read buffer to be clobbered. I will be working on a fix for this issue for win9x. --- ext/curl/interface.c | 2 +- ext/curl/streams.c | 2 +- ext/fbsql/php_fbsql.c | 2 +- ext/ftp/ftp.c | 2 +- ext/hyperwave/hg_comm.c | 2 +- ext/hyperwave/hw.c | 2 +- ext/imap/php_imap.c | 2 +- ext/ldap/ldap.c | 2 +- ext/mcal/php_mcal.c | 2 +- ext/mysql/php_mysql.c | 2 +- ext/odbc/php_odbc.c | 2 +- ext/rpc/com/com_wrapper.c | 6 +- ext/snmp/snmp.c | 2 +- ext/standard/dns.c | 2 +- ext/standard/file.c | 162 +++++++++++++++++++++++++++++- ext/standard/fsock.c | 2 +- ext/standard/ftp_fopen_wrapper.c | 4 +- ext/standard/http_fopen_wrapper.c | 4 +- ext/standard/pack.c | 2 +- ext/zlib/zlib.c | 2 +- main/fopen_wrappers.c | 4 +- main/mergesort.c | 2 +- main/network.c | 2 +- main/php.h | 4 + main/php_open_temporary_file.c | 2 +- main/streams.c | 18 ++++ run-tests.php | 16 ++- win32/php4dllts.dsp | 8 +- win32/sendmail.c | 2 +- win32/time.h | 2 +- 30 files changed, 225 insertions(+), 43 deletions(-) diff --git a/ext/curl/interface.c b/ext/curl/interface.c index 2b5c48a61e9..3286543f516 100644 --- a/ext/curl/interface.c +++ b/ext/curl/interface.c @@ -30,7 +30,7 @@ #include #ifdef PHP_WIN32 -#include +#include #include #endif diff --git a/ext/curl/streams.c b/ext/curl/streams.c index 58695bd50ae..ed577493180 100644 --- a/ext/curl/streams.c +++ b/ext/curl/streams.c @@ -36,7 +36,7 @@ #include #ifdef PHP_WIN32 -#include +#include #include #endif diff --git a/ext/fbsql/php_fbsql.c b/ext/fbsql/php_fbsql.c index df19e70a9d5..0b278f2d02f 100644 --- a/ext/fbsql/php_fbsql.c +++ b/ext/fbsql/php_fbsql.c @@ -43,7 +43,7 @@ #include "ext/standard/php_string.h" #ifdef PHP_WIN32 -#include +#include #else #include diff --git a/ext/ftp/ftp.c b/ext/ftp/ftp.c index 1ebce4e4707..233c832508d 100644 --- a/ext/ftp/ftp.c +++ b/ext/ftp/ftp.c @@ -33,7 +33,7 @@ #include #include #ifdef PHP_WIN32 -#include +#include #elif defined(NETWARE) #ifdef USE_WINSOCK /* Modified to use Winsock (NOVSOCK2.H), atleast for now */ #include diff --git a/ext/hyperwave/hg_comm.c b/ext/hyperwave/hg_comm.c index 856b1c1bfa1..5aaae3dcfd2 100644 --- a/ext/hyperwave/hg_comm.c +++ b/ext/hyperwave/hg_comm.c @@ -31,7 +31,7 @@ #include #include #ifdef PHP_WIN32 -# include +# include # define EWOULDBLOCK WSAEWOULDBLOCK # define ETIMEDOUT WSAETIMEDOUT # define bcopy memcpy diff --git a/ext/hyperwave/hw.c b/ext/hyperwave/hw.c index 4975b9586fe..8859e13952a 100644 --- a/ext/hyperwave/hw.c +++ b/ext/hyperwave/hw.c @@ -34,7 +34,7 @@ #include "SAPI.h" #ifdef PHP_WIN32 -#include +#include #endif #if HYPERWAVE diff --git a/ext/imap/php_imap.c b/ext/imap/php_imap.c index e43f513f98e..77c9aceb2a1 100644 --- a/ext/imap/php_imap.c +++ b/ext/imap/php_imap.c @@ -50,7 +50,7 @@ #include #ifdef PHP_WIN32 -#include +#include #include #include "win32/sendmail.h" MAILSTREAM DEFAULTPROTO; diff --git a/ext/ldap/ldap.c b/ext/ldap/ldap.c index 96adc911d3f..a4dbca40bcb 100644 --- a/ext/ldap/ldap.c +++ b/ext/ldap/ldap.c @@ -46,7 +46,7 @@ #ifdef PHP_WIN32 #include #if HAVE_NSLDAP -#include +#include #endif #define strdup _strdup #undef WINDOWS diff --git a/ext/mcal/php_mcal.c b/ext/mcal/php_mcal.c index 6ecd3a54197..3ef97c5683a 100644 --- a/ext/mcal/php_mcal.c +++ b/ext/mcal/php_mcal.c @@ -42,7 +42,7 @@ #include "ext/standard/info.h" #include "ext/standard/basic_functions.h" #ifdef PHP_WIN32 -#include "winsock.h" +#include "winsock2.h" #endif static void cal_close_it(zend_rsrc_list_entry *rsrc TSRMLS_DC); diff --git a/ext/mysql/php_mysql.c b/ext/mysql/php_mysql.c index ef46b204a01..6a493ba3a13 100644 --- a/ext/mysql/php_mysql.c +++ b/ext/mysql/php_mysql.c @@ -37,7 +37,7 @@ #if HAVE_MYSQL #ifdef PHP_WIN32 -# include +# include # define signal(a, b) NULL #elif defined(NETWARE) # include diff --git a/ext/odbc/php_odbc.c b/ext/odbc/php_odbc.c index 5583a4dfcb4..ba473e89111 100644 --- a/ext/odbc/php_odbc.c +++ b/ext/odbc/php_odbc.c @@ -44,7 +44,7 @@ #include "php_ini.h" #ifdef PHP_WIN32 -#include +#include #define ODBC_TYPE "Win32" #define PHP_ODBC_TYPE ODBC_TYPE diff --git a/ext/rpc/com/com_wrapper.c b/ext/rpc/com/com_wrapper.c index 1c27c4d774f..04e9a74f084 100644 --- a/ext/rpc/com/com_wrapper.c +++ b/ext/rpc/com/com_wrapper.c @@ -56,13 +56,13 @@ #define _WIN32_DCOM +#include "php.h" +#include "php_ini.h" + #include #include #include -#include "php.h" -#include "php_ini.h" - #include "../rpc.h" #include "../php_rpc.h" #include "../handler.h" diff --git a/ext/snmp/snmp.c b/ext/snmp/snmp.c index 6f95b28772f..ad767536332 100644 --- a/ext/snmp/snmp.c +++ b/ext/snmp/snmp.c @@ -33,7 +33,7 @@ #include #ifdef PHP_WIN32 -#include +#include #include #include #include "win32/time.h" diff --git a/ext/standard/dns.c b/ext/standard/dns.c index 32641382fa0..916ff4637d2 100644 --- a/ext/standard/dns.c +++ b/ext/standard/dns.c @@ -44,7 +44,7 @@ #include "resolv.h" #endif #endif /* HAVE_LIBBIND */ -#include +#include #else /* This holds good for NetWare too, both for Winsock and Berkeley sockets */ #include #if HAVE_ARPA_INET_H diff --git a/ext/standard/file.c b/ext/standard/file.c index 25d12573309..d5024cc3967 100644 --- a/ext/standard/file.c +++ b/ext/standard/file.c @@ -44,7 +44,7 @@ #include #ifdef PHP_WIN32 #include -#include +#include #define O_RDONLY _O_RDONLY #include "win32/param.h" #include "win32/winutil.h" @@ -821,6 +821,160 @@ static int stream_array_emulate_read_fd_set(zval *stream_array TSRMLS_DC) } /* }}} */ +#ifdef PHP_WIN32 +/* Win32 select() will only work with sockets, so we roll our own implementation that will + * get the OS file handle from regular fd's and sockets and then use WaitForMultipleObjects(). + * This implementation is not as feature-full as posix select, but it works for our purposes + */ +static int php_select(int max_fd, fd_set *rfds, fd_set *wfds, fd_set *efds, struct timeval *tv) +{ + HANDLE *handles; + DWORD ms, waitret; + DWORD ms_total; + int i, f, s, fd_count = 0, sock_count = 0; + int retval; + fd_set ard, awr, aex; /* active fd sets */ + long sock_events; + + for (i = 0; i < max_fd; i++) { + if (FD_ISSET(i, rfds) || FD_ISSET(i, wfds) || FD_ISSET(i, efds)) { + if (_get_osfhandle(i) == 0xffffffff) { + /* it is a socket */ + sock_count++; + } else { + fd_count++; + } + } + } + + if (fd_count + sock_count == 0) { + return 0; + } + + handles = (HANDLE*)emalloc((fd_count + sock_count) * sizeof(HANDLE)); + + /* populate the events and handles arrays */ + f = 0; + s = 0; + for (i = 0; i < max_fd; i++) { + if (FD_ISSET(i, rfds) || FD_ISSET(i, wfds) || FD_ISSET(i, efds)) { + long h = _get_osfhandle(i); + if (h == 0xFFFFFFFF) { + HANDLE evt; + long evt_flags = 0; + + if (FD_ISSET(i, rfds)) { + evt_flags |= FD_READ|FD_CONNECT|FD_ACCEPT|FD_CLOSE; + } + if (FD_ISSET(i, wfds)) { + evt_flags |= FD_WRITE; + } + if (FD_ISSET(i, efds)) { + evt_flags |= FD_OOB; + } + + evt = WSACreateEvent(); + WSAEventSelect(i, evt, evt_flags); + + handles[fd_count + s] = evt; + s++; + } else { + handles[f++] = (HANDLE)h; + } + } + } + + /* calculate how long we need to wait in milliseconds */ + if (tv == NULL) { + ms_total = INFINITE; + } else { + ms_total = tv->tv_sec * 1000; + ms_total += tv->tv_usec / 1000; + } + + waitret = MsgWaitForMultipleObjects(fd_count + sock_count, handles, FALSE, ms_total, QS_ALLEVENTS); + + if (waitret == WAIT_TIMEOUT) { + retval = 0; + } else if (waitret == 0xFFFFFFFF) { + retval = -1; + } else { + + FD_ZERO(&ard); + FD_ZERO(&awr); + FD_ZERO(&aex); + + f = 0; + retval = 0; + for (i = 0; i < max_fd; i++) { + if (FD_ISSET(i, rfds) || FD_ISSET(i, wfds) || FD_ISSET(i, efds)) { + if (f >= fd_count) { + /* socket event */ + HANDLE evt = handles[f]; + + if (WAIT_OBJECT_0 == WaitForSingleObject(evt, 0)) { + /* check for various signal states */ + if (FD_ISSET(i, rfds)) { + WSAEventSelect(i, evt, FD_READ|FD_CONNECT|FD_ACCEPT|FD_CLOSE); + if (WAIT_OBJECT_0 == WaitForSingleObject(evt, 0)) { + FD_SET(i, &ard); + } + } + if (FD_ISSET(i, wfds)) { + WSAEventSelect(i, evt, FD_WRITE); + if (WAIT_OBJECT_0 == WaitForSingleObject(evt, 0)) { + FD_SET(i, &awr); + } + } + if (FD_ISSET(i, efds)) { + WSAEventSelect(i, evt, FD_OOB); + if (WAIT_OBJECT_0 == WaitForSingleObject(evt, 0)) { + FD_SET(i, &aex); + } + } + retval++; + } + + WSACloseEvent(evt); + + } else { + if (WAIT_OBJECT_0 == WaitForSingleObject(handles[f], 0)) { + if (FD_ISSET(i, rfds)) { + FD_SET(i, &ard); + } + if (FD_ISSET(i, wfds)) { + FD_SET(i, &awr); + } + if (FD_ISSET(i, efds)) { + FD_SET(i, &aex); + } + retval++; + } + + } + f++; + } + } + + if (rfds) { + *rfds = ard; + } + if (wfds) { + *wfds = awr; + } + if (efds) { + *efds = aex; + } + } + + efree(handles); + + return retval; +} +#else +#define php_select(m, r, w, e, t) select(m, r, w, e, t) +#endif + /* {{{ proto int stream_select(array &read_streams, array &write_streams, array &except_streams, int tv_sec[, int tv_usec]) Runs the select() system call on the sets of streams with a timeout specified by tv_sec and tv_usec */ PHP_FUNCTION(stream_select) @@ -867,11 +1021,11 @@ PHP_FUNCTION(stream_select) } } - retval = select(max_fd+1, &rfds, &wfds, &efds, tv_p); + retval = php_select(max_fd+1, &rfds, &wfds, &efds, tv_p); if (retval == -1) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "unable to select [%d]: %s", - errno, strerror(errno)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "unable to select [%d]: %s (max_fd=%d)", + errno, strerror(errno), max_fd); RETURN_FALSE; } diff --git a/ext/standard/fsock.c b/ext/standard/fsock.c index d1f37a46dc0..bbe6d7debbe 100644 --- a/ext/standard/fsock.c +++ b/ext/standard/fsock.c @@ -46,7 +46,7 @@ #include #endif #ifdef PHP_WIN32 -#include +#include #elif defined(NETWARE) #ifdef NEW_LIBC #ifdef USE_WINSOCK diff --git a/ext/standard/ftp_fopen_wrapper.c b/ext/standard/ftp_fopen_wrapper.c index c68ff5fcf31..a603b464b33 100644 --- a/ext/standard/ftp_fopen_wrapper.c +++ b/ext/standard/ftp_fopen_wrapper.c @@ -32,7 +32,7 @@ #ifdef PHP_WIN32 #include -#include +#include #define O_RDONLY _O_RDONLY #include "win32/param.h" #elif defined(NETWARE) @@ -55,7 +55,7 @@ #endif #ifdef PHP_WIN32 -#include +#include #elif defined(NETWARE) && defined(USE_WINSOCK) /*#include */ #include diff --git a/ext/standard/http_fopen_wrapper.c b/ext/standard/http_fopen_wrapper.c index 55f9ef26c0d..d12c61b5f5f 100644 --- a/ext/standard/http_fopen_wrapper.c +++ b/ext/standard/http_fopen_wrapper.c @@ -36,7 +36,7 @@ #ifdef PHP_WIN32 #include -#include +#include #define O_RDONLY _O_RDONLY #include "win32/param.h" #elif defined(NETWARE) @@ -59,7 +59,7 @@ #endif #ifdef PHP_WIN32 -#include +#include #elif defined(NETWARE) && defined(USE_WINSOCK) /*#include */ #include diff --git a/ext/standard/pack.c b/ext/standard/pack.c index 0002aaeb377..755665d6360 100644 --- a/ext/standard/pack.c +++ b/ext/standard/pack.c @@ -27,7 +27,7 @@ #include #ifdef PHP_WIN32 #include -#include +#include #define O_RDONLY _O_RDONLY #include "win32/param.h" #elif defined(NETWARE) diff --git a/ext/zlib/zlib.c b/ext/zlib/zlib.c index 3a2c13e2d81..b04ca107ebf 100644 --- a/ext/zlib/zlib.c +++ b/ext/zlib/zlib.c @@ -36,7 +36,7 @@ #include #ifdef PHP_WIN32 #include -#include +#include #define O_RDONLY _O_RDONLY #include "win32/param.h" #else diff --git a/main/fopen_wrappers.c b/main/fopen_wrappers.c index c6781c8ce8c..eb91436b3bc 100644 --- a/main/fopen_wrappers.c +++ b/main/fopen_wrappers.c @@ -33,7 +33,7 @@ #ifdef PHP_WIN32 #include -#include +#include #define O_RDONLY _O_RDONLY #include "win32/param.h" #elif defined(NETWARE) @@ -74,7 +74,7 @@ #endif #ifdef PHP_WIN32 -#include +#include #elif defined(NETWARE) && defined(USE_WINSOCK) /*#include */ #include diff --git a/main/mergesort.c b/main/mergesort.c index 7ee4ee00efc..34da44cf2f7 100644 --- a/main/mergesort.c +++ b/main/mergesort.c @@ -61,7 +61,7 @@ static char sccsid[] = "@(#)merge.c 8.2 (Berkeley) 2/14/94"; #include "php.h" #ifdef PHP_WIN32 -#include /* Includes definition for u_char */ +#include /* Includes definition for u_char */ #endif #if defined(NETWARE) && !defined(NEW_LIBC) diff --git a/main/network.c b/main/network.c index 51b46b8f185..50428a81166 100644 --- a/main/network.c +++ b/main/network.c @@ -26,7 +26,7 @@ #ifdef PHP_WIN32 #include -#include +#include #define O_RDONLY _O_RDONLY #include "win32/param.h" #elif defined(NETWARE) diff --git a/main/php.h b/main/php.h index 6cd191453a4..d6c220b3e14 100644 --- a/main/php.h +++ b/main/php.h @@ -22,6 +22,10 @@ #ifndef PHP_H #define PHP_H +#ifdef PHP_WIN32 +#include +#endif + #ifdef HAVE_DMALLOC #include #endif diff --git a/main/php_open_temporary_file.c b/main/php_open_temporary_file.c index eff0393eb14..f24ee66e319 100644 --- a/main/php_open_temporary_file.c +++ b/main/php_open_temporary_file.c @@ -27,7 +27,7 @@ #ifdef PHP_WIN32 #include -#include +#include #define O_RDONLY _O_RDONLY #include "win32/param.h" #include "win32/winutil.h" diff --git a/main/streams.c b/main/streams.c index 67e961540be..d746e359968 100755 --- a/main/streams.c +++ b/main/streams.c @@ -1332,6 +1332,15 @@ PHPAPI php_stream *_php_stream_fopen_from_fd(int fd, const char *mode STREAMS_DC struct stat sb; self->is_pipe = (fstat(self->fd, &sb) == 0 && S_ISFIFO(sb.st_mode)) ? 1 : 0; } +#elif defined(PHP_WIN32) + { + long handle = _get_osfhandle(self->fd); + DWORD in_buf_size, out_buf_size; + + if (handle != 0xFFFFFFFF) { + self->is_pipe = GetNamedPipeInfo((HANDLE)handle, NULL, &out_buf_size, &in_buf_size, NULL); + } + } #endif stream = php_stream_alloc_rel(&php_stream_stdio_ops, self, 0, mode); @@ -1365,6 +1374,15 @@ PHPAPI php_stream *_php_stream_fopen_from_file(FILE *file, const char *mode STRE struct stat sb; self->is_pipe = (fstat(self->fd, &sb) == 0 && S_ISFIFO(sb.st_mode)) ? 1 : 0; } +#elif defined(PHP_WIN32) + { + long handle = _get_osfhandle(self->fd); + DWORD in_buf_size, out_buf_size; + + if (handle != 0xFFFFFFFF) { + self->is_pipe = GetNamedPipeInfo((HANDLE)handle, NULL, &out_buf_size, &in_buf_size, NULL); + } + } #endif stream = php_stream_alloc_rel(&php_stream_stdio_ops, self, 0, mode); diff --git a/run-tests.php b/run-tests.php index cb68f326538..f393b5fedd5 100755 --- a/run-tests.php +++ b/run-tests.php @@ -520,26 +520,32 @@ function system_with_timeout($commandline) { $data = ""; - $proc = proc_open($commandline, array(1 => array('pipe', 'w')), $pipes); + $proc = proc_open($commandline, array( + 0 => array('pipe', 'r'), + 1 => array('pipe', 'w'), + 2 => array('pipe', 'w') + ), $pipes); if (!$proc) return false; + fclose($pipes[0]); + while (true) { /* hide errors from interrupted syscalls */ $r = $pipes; $w = null; $e = null; - $n = stream_select($r, $w, $e, 60); + $n = @stream_select($r, $w, $e, 60); if ($n == 0) { /* timed out */ $data .= "\n ** ERROR: process timed out **\n"; proc_terminate($proc); return $data; - } else if ($n) { - $line = fgets($pipes[1]); - if ($line === false) { + } else if ($n > 0) { + $line = fread($pipes[1], 8192); + if (strlen($line) == 0) { /* EOF */ break; } diff --git a/win32/php4dllts.dsp b/win32/php4dllts.dsp index afd2c74bfbb..5cec39f174a 100644 --- a/win32/php4dllts.dsp +++ b/win32/php4dllts.dsp @@ -55,7 +55,7 @@ BSC32=bscmake.exe # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib wsock32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ZendTS.lib TSRM.lib resolv.lib libmysql.lib zlib.lib Urlmon.lib /nologo /version:4.0 /dll /debug /machine:I386 /nodefaultlib:"libcmt" /out:"..\Debug_TS\php4ts_debug.dll" /pdbtype:sept /libpath:"..\TSRM\Debug_TS" /libpath:"..\Zend\Debug_TS" /libpath:"..\..\bindlib_w32\Debug" /libpath:"..\ext\mysql\libmysql\Debug_TS" /libpath:"Debug_TS" /libpath:"..\..\zlib\Debug" +# ADD LINK32 kernel32.lib user32.lib gdi32.lib ws2_32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ZendTS.lib TSRM.lib resolv.lib libmysql.lib zlib.lib Urlmon.lib /nologo /version:4.0 /dll /debug /machine:I386 /nodefaultlib:"libcmt" /out:"..\Debug_TS\php4ts_debug.dll" /pdbtype:sept /libpath:"..\TSRM\Debug_TS" /libpath:"..\Zend\Debug_TS" /libpath:"..\..\bindlib_w32\Debug" /libpath:"..\ext\mysql\libmysql\Debug_TS" /libpath:"Debug_TS" /libpath:"..\..\zlib\Debug" !ELSEIF "$(CFG)" == "php4dllts - Win32 Release_TS" @@ -81,7 +81,7 @@ BSC32=bscmake.exe # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib wsock32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ZendTS.lib TSRM.lib resolv.lib libmysql.lib zlib.lib Urlmon.lib /nologo /version:4.0 /dll /machine:I386 /nodefaultlib:"libcmt" /out:"..\Release_TS\php4ts.dll" /libpath:"..\TSRM\Release_TS" /libpath:"..\Zend\Release_TS" /libpath:"..\..\bindlib_w32\Release" /libpath:"..\ext\mysql\libmysql\Release_TS" /libpath:"Release_TS" /libpath:"..\..\zlib\Release" +# ADD LINK32 kernel32.lib user32.lib gdi32.lib ws2_32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ZendTS.lib TSRM.lib resolv.lib libmysql.lib zlib.lib Urlmon.lib /nologo /version:4.0 /dll /machine:I386 /nodefaultlib:"libcmt" /out:"..\Release_TS\php4ts.dll" /libpath:"..\TSRM\Release_TS" /libpath:"..\Zend\Release_TS" /libpath:"..\..\bindlib_w32\Release" /libpath:"..\ext\mysql\libmysql\Release_TS" /libpath:"Release_TS" /libpath:"..\..\zlib\Release" !ELSEIF "$(CFG)" == "php4dllts - Win32 Release_TS_inline" @@ -108,7 +108,7 @@ BSC32=bscmake.exe # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib wsock32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ZendTS.lib TSRM.lib resolv.lib /nologo /dll /machine:I386 /nodefaultlib:"libc.lib" /nodefaultlib:"libcmt.lib" /out:"Release_TS/php4ts.dll" /libpath:"TSRM\Release_TS" /libpath:"Zend\Release_TS" /libpath:"..\bindlib_w32\Release" -# ADD LINK32 kernel32.lib user32.lib gdi32.lib wsock32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ZendTS.lib TSRM.lib resolv.lib libmysql.lib zlib.lib Urlmon.lib /nologo /version:4.0 /dll /machine:I386 /nodefaultlib:"libcmt" /out:"..\Release_TS_inline\php4ts.dll" /libpath:"..\TSRM\Release_TS_inline" /libpath:"..\Zend\Release_TS_inline" /libpath:"..\..\bindlib_w32\Release" /libpath:"..\ext\mysql\libmysql\Release_TS_inline" /libpath:"Release_TS_Inline" /libpath:"..\..\zlib\Release" +# ADD LINK32 kernel32.lib user32.lib gdi32.lib ws2_32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ZendTS.lib TSRM.lib resolv.lib libmysql.lib zlib.lib Urlmon.lib /nologo /version:4.0 /dll /machine:I386 /nodefaultlib:"libcmt" /out:"..\Release_TS_inline\php4ts.dll" /libpath:"..\TSRM\Release_TS_inline" /libpath:"..\Zend\Release_TS_inline" /libpath:"..\..\bindlib_w32\Release" /libpath:"..\ext\mysql\libmysql\Release_TS_inline" /libpath:"Release_TS_Inline" /libpath:"..\..\zlib\Release" !ELSEIF "$(CFG)" == "php4dllts - Win32 Release_TSDbg" @@ -135,7 +135,7 @@ BSC32=bscmake.exe # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib wsock32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ZendTS.lib TSRM.lib resolv.lib libmysql.lib /nologo /version:4.0 /dll /machine:I386 /nodefaultlib:"libc.lib" /nodefaultlib:"libcmt.lib" /out:"..\Release_TS\php4ts.dll" /libpath:"..\TSRM\Release_TS" /libpath:"..\Zend\Release_TS" /libpath:"..\..\bindlib_w32\Release" /libpath:"..\ext\mysql\libmysql\Release_TS" /libpath:"Release_TS" -# ADD LINK32 kernel32.lib user32.lib gdi32.lib wsock32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ZendTS.lib TSRM.lib resolv.lib libmysql.lib zlib.lib Urlmon.lib /nologo /version:4.0 /dll /debug /machine:I386 /nodefaultlib:"libcmt" /out:"..\Release_TSDbg\php4ts.dll" /libpath:"..\TSRM\Release_TSDbg" /libpath:"..\Zend\Release_TSDbg" /libpath:"..\..\bindlib_w32\Release" /libpath:"..\ext\mysql\libmysql\Release_TSDbg" /libpath:"Release_TSDbg" +# ADD LINK32 kernel32.lib user32.lib gdi32.lib ws2_32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ZendTS.lib TSRM.lib resolv.lib libmysql.lib zlib.lib Urlmon.lib /nologo /version:4.0 /dll /debug /machine:I386 /nodefaultlib:"libcmt" /out:"..\Release_TSDbg\php4ts.dll" /libpath:"..\TSRM\Release_TSDbg" /libpath:"..\Zend\Release_TSDbg" /libpath:"..\..\bindlib_w32\Release" /libpath:"..\ext\mysql\libmysql\Release_TSDbg" /libpath:"Release_TSDbg" !ENDIF diff --git a/win32/sendmail.c b/win32/sendmail.c index 97a1af9a14f..82f8efab5d0 100644 --- a/win32/sendmail.c +++ b/win32/sendmail.c @@ -23,7 +23,7 @@ #include #include #ifndef NETWARE -#include +#include #else /* NETWARE */ #include #endif /* NETWARE */ diff --git a/win32/time.h b/win32/time.h index f0514ebe598..4d6c8a2bc2f 100644 --- a/win32/time.h +++ b/win32/time.h @@ -13,7 +13,7 @@ #define TIME_H /* Include stuff ************************************************************ */ -#include +#include #include #include