cvs: /php4 php_modules.dsw /php4 ChangeLog main.c php.ini-dist php4ts.dsw php_ini.c php_ini.h /php4/ext/mysql mysql.c mysql.dsp /php4/ext/standard
dl.c
| From: | Zeev Suraski | Date: | Fri, 13 Aug 1999 21:03:27 +0000 |
| Subject: | cvs: /php4 php_modules.dsw /php4 ChangeLog main.c php.ini-dist php4ts.dsw php_ini.c php_ini.h /php4/ext/mysql mysql.c mysql.dsp /php4/ext/standard dl.c |
||
| Groups: | php.version4 | ||
| Request: | Send a blank email to php-version4+get-3410@lists.php.net to get a copy of this message | ||
zeev Fri Aug 13 17:03:27 1999 EDT
Added files:
/php4 php_modules.dsw
Modified files:
/php4 ChangeLog main.c php.ini-dist php4ts.dsw php_ini.c php_ini.h
/php4/ext/mysql mysql.c mysql.dsp
/php4/ext/standard dl.c
Log:
- Add PHP Modules workspace
- Get the MySQL module to compile&work under thread-safe Win32
- Fix various thread safety issues with dynamic modules
Index: php4/ChangeLog
diff -u php4/ChangeLog:1.49 php4/ChangeLog:1.50
--- php4/ChangeLog:1.49 Thu Aug 12 20:14:15 1999
+++ php4/ChangeLog Fri Aug 13 17:03:26 1999
@@ -2,6 +2,8 @@
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
?? ?? 1999, Version 4.0 Beta 3
+- Fixed thread-safety issues in the MySQL module (Zeev)
+- Fixed thread-safe support for dynamic modules (Zeev)
- Fixed Sybase CT build process (Zeev)
August 9 1999, Version 4.0 Beta 2
Index: php4/main.c
diff -u php4/main.c:1.95 php4/main.c:1.96
--- php4/main.c:1.95 Thu Aug 12 07:05:43 1999
+++ php4/main.c Fri Aug 13 17:03:26 1999
@@ -19,7 +19,7 @@
*/
-/* $Id: main.c,v 1.95 1999/08/12 11:05:43 verdy_p Exp $ */
+/* $Id: main.c,v 1.96 1999/08/13 21:03:26 zeev Exp $ */
#include <stdio.h>
@@ -96,9 +96,6 @@
/* True globals (no need for thread safety) */
HashTable configuration_hash;
PHPAPI char *php3_ini_path = NULL;
-#ifdef ZTS
-php_core_globals *main_core_globals=NULL;
-#endif
#define SAFE_FILENAME(f) ((f)?(f):"-")
@@ -755,20 +752,17 @@
}
-#ifdef ZTS
-static void core_globals_ctor(php_core_globals *core_globals)
+static int zend_body_write_wrapper(const char *str, uint str_length)
{
- if (main_core_globals) {
- *core_globals = *main_core_globals;
- }
+ return zend_body_write(str, str_length);
}
-#endif
-
-static int zend_body_write_wrapper(const char *str, uint str_length)
+#ifdef ZTS
+static void php_new_thread_end_handler(THREAD_T thread_id)
{
- return zend_body_write(str, str_length);
+ php_ini_refresh_caches();
}
+#endif
int php_module_startup(sapi_module_struct *sf)
@@ -810,10 +804,11 @@
zuf.get_ini_entry = php_get_ini_entry_for_zend;
zend_startup(&zuf, NULL);
+ tsrm_set_new_thread_end_handler(php_new_thread_end_handler);
+
#ifdef ZTS
- core_globals_id = ts_allocate_id(sizeof(php_core_globals), core_globals_ctor, NULL);
+ core_globals_id = ts_allocate_id(sizeof(php_core_globals), NULL, NULL);
core_globals = ts_resource(core_globals_id);
- main_core_globals = core_globals;
#endif
PG(header_is_being_sent) = 0;
@@ -835,11 +830,12 @@
le_index_ptr = _register_list_destructors(NULL, NULL, 0);
FREE_MUTEX(gLock);
+ php_ini_mstartup();
+
if (php3_config_ini_startup() == FAILURE) {
return FAILURE;
}
- php_ini_mstartup();
REGISTER_INI_ENTRIES();
zuv.short_tags = (unsigned char) PG(short_tags);
Index: php4/php.ini-dist
diff -u php4/php.ini-dist:1.3 php4/php.ini-dist:1.4
--- php4/php.ini-dist:1.3 Sat Aug 7 14:21:35 1999
+++ php4/php.ini-dist Fri Aug 13 17:03:26 1999
@@ -51,7 +51,7 @@
; Misc
allow_builtin_links = Off ; Sets whether phpinfo() will generate built-in links that display the
PHP
; and Zend logos, and tells PHP whether to honor them or not.
- ; It is no securty threat in any way, but it make sit possible
+ ; It is no security threat in any way, but it makes it possible
; to determine whether you use PHP on your server or not.
Index: php4/php4ts.dsw
diff -u php4/php4ts.dsw:1.4 php4/php4ts.dsw:1.5
--- php4/php4ts.dsw:1.4 Mon Apr 26 10:00:46 1999
+++ php4/php4ts.dsw Fri Aug 13 17:03:26 1999
@@ -3,7 +3,7 @@
###############################################################################
-Project: "TSRM"=..\TSRM\TSRM.dsp - Package Owner=<4>
+Project: "TSRM"=.\TSRM\TSRM.dsp - Package Owner=<4>
Package=<5>
{{{
@@ -15,7 +15,7 @@
###############################################################################
-Project: "libzendts"=..\libzend\libzendts.dsp - Package Owner=<4>
+Project: "libzendts"=.\libzend\libzendts.dsp - Package Owner=<4>
Package=<5>
{{{
@@ -23,6 +23,9 @@
Package=<4>
{{{
+ Begin Project Dependency
+ Project_Dep_Name TSRM
+ End Project Dependency
}}}
###############################################################################
Index: php4/php_ini.c
diff -u php4/php_ini.c:1.26 php4/php_ini.c:1.27
--- php4/php_ini.c:1.26 Mon Aug 2 15:16:34 1999
+++ php4/php_ini.c Fri Aug 13 17:03:26 1999
@@ -125,6 +125,21 @@
}
+static int php_ini_refresh_cache(php_ini_entry *p)
+{
+ if (p->on_modify) {
+ p->on_modify(p, p->value, p->value_length, p->mh_arg1, p->mh_arg2, p->mh_arg3);
+ }
+ return 0;
+}
+
+
+PHPAPI void php_ini_refresh_caches()
+{
+ zend_hash_apply(&known_directives, (int (*)(void *)) php_ini_refresh_cache);
+}
+
+
PHPAPI int php_alter_ini_entry(char *name, uint name_length, char *new_value, uint
new_value_length, int modify_type)
{
php_ini_entry *ini_entry;
Index: php4/php_ini.h
diff -u php4/php_ini.h:1.12 php4/php_ini.h:1.13
--- php4/php_ini.h:1.12 Fri Jul 16 09:12:42 1999
+++ php4/php_ini.h Fri Aug 13 17:03:26 1999
@@ -57,6 +57,7 @@
PHPAPI int php_register_ini_entries(php_ini_entry *ini_entry, int module_number);
PHPAPI void php_unregister_ini_entries(int module_number);
+PHPAPI void php_ini_refresh_caches();
PHPAPI int php_alter_ini_entry(char *name, uint name_length, char *new_value, uint
new_value_length, int modify_type);
PHPAPI int php_restore_ini_entry(char *name, uint name_length);
PHPAPI void display_ini_entries(zend_module_entry *module);
@@ -100,11 +101,15 @@
#ifdef ZTS
#define STD_PHP_INI_ENTRY(name, default_value, modifyable, on_modify, property_name, struct_type,
struct_ptr) \
PHP_INI_ENTRY2(name, default_value, modifyable, on_modify, (void *) XtOffsetOf(struct_type,
property_name), (void *) &struct_ptr##_id)
+#define STD_PHP_INI_ENTRY_EX(name, default_value, modifyable, on_modify, property_name,
struct_type, struct_ptr, displayer) \
+ PHP_INI_ENTRY2_EX(name, default_value, modifyable, on_modify, (void *) XtOffsetOf(struct_type,
property_name), (void *) &struct_ptr##_id, displayer)
#define STD_PHP_INI_BOOLEAN(name, default_value, modifyable, on_modify, property_name, struct_type,
struct_ptr) \
PHP_INI_ENTRY3_EX(name, default_value, modifyable, on_modify, (void *) XtOffsetOf(struct_type,
property_name), (void *) &struct_ptr##_id, NULL, php_ini_boolean_displayer_cb)
#else
#define STD_PHP_INI_ENTRY(name, default_value, modifyable, on_modify, property_name, struct_type,
struct_ptr) \
PHP_INI_ENTRY2(name, default_value, modifyable, on_modify, (void *) XtOffsetOf(struct_type,
property_name), (void *) &struct_ptr)
+#define STD_PHP_INI_ENTRY_EX(name, default_value, modifyable, on_modify, property_name,
struct_type, struct_ptr, display) \
+ PHP_INI_ENTRY2_EX(name, default_value, modifyable, on_modify, (void *) XtOffsetOf(struct_type,
property_name), (void *) &struct_ptr, displayer)
#define STD_PHP_INI_BOOLEAN(name, default_value, modifyable, on_modify, property_name, struct_type,
struct_ptr) \
PHP_INI_ENTRY3_EX(name, default_value, modifyable, on_modify, (void *) XtOffsetOf(struct_type,
property_name), (void *) &struct_ptr, NULL, php_ini_boolean_displayer_cb)
#endif
Index: php4/ext/mysql/mysql.c
diff -u php4/ext/mysql/mysql.c:1.17 php4/ext/mysql/mysql.c:1.18
--- php4/ext/mysql/mysql.c:1.17 Mon Aug 2 15:16:47 1999
+++ php4/ext/mysql/mysql.c Fri Aug 13 17:03:27 1999
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: mysql.c,v 1.17 1999/08/02 19:16:47 zeev Exp $ */
+/* $Id: mysql.c,v 1.18 1999/08/13 21:03:27 zeev Exp $ */
/* TODO:
@@ -246,14 +246,36 @@
}
+static PHP_INI_DISP(display_link_numbers)
+{
+ char *value;
+
+ if (type==PHP_INI_DISPLAY_ORIG && ini_entry->modified) {
+ value = ini_entry->orig_value;
+ } else if (ini_entry->value) {
+ value = ini_entry->value;
+ } else {
+ value = NULL;
+ }
+
+ if (value) {
+ if (atoi(value)==-1) {
+ PUTS("Unlimited");
+ } else {
+ php_printf("%s", value);
+ }
+ }
+}
+
+
PHP_INI_BEGIN()
- STD_PHP_INI_ENTRY("mysql.allow_persistent", "1", PHP_INI_SYSTEM, OnUpdateInt, allow_persistent, php_mysql_globals, mysql_globals)
- STD_PHP_INI_ENTRY("mysql.max_persistent", "-1", PHP_INI_SYSTEM, OnUpdateInt, max_persistent, php_mysql_globals, mysql_globals)
- STD_PHP_INI_ENTRY("mysql.max_links", "-1", PHP_INI_SYSTEM, OnUpdateInt, max_links, php_mysql_globals, mysql_globals)
- STD_PHP_INI_ENTRY("mysql.default_host", NULL, PHP_INI_ALL, OnUpdateString, default_host, php_mysql_globals, mysql_globals)
- STD_PHP_INI_ENTRY("mysql.default_user", NULL, PHP_INI_ALL, OnUpdateString, default_user, php_mysql_globals, mysql_globals)
- STD_PHP_INI_ENTRY("mysql.default_password", NULL, PHP_INI_ALL, OnUpdateString, default_password, php_mysql_globals, mysql_globals)
- PHP_INI_ENTRY("mysql.default_port", NULL, PHP_INI_ALL, OnMySQLPort)
+ STD_PHP_INI_BOOLEAN("mysql.allow_persistent", "1", PHP_INI_SYSTEM, OnUpdateInt, allow_persistent, php_mysql_globals, mysql_globals)
+ STD_PHP_INI_ENTRY_EX("mysql.max_persistent", "-1", PHP_INI_SYSTEM, OnUpdateInt, max_persistent, php_mysql_globals, mysql_globals, display_link_numbers)
+ STD_PHP_INI_ENTRY_EX("mysql.max_links", "-1", PHP_INI_SYSTEM, OnUpdateInt, max_links, php_mysql_globals, mysql_globals, display_link_numbers)
+ STD_PHP_INI_ENTRY("mysql.default_host", NULL, PHP_INI_ALL, OnUpdateString, default_host, php_mysql_globals, mysql_globals)
+ STD_PHP_INI_ENTRY("mysql.default_user", NULL, PHP_INI_ALL, OnUpdateString, default_user, php_mysql_globals, mysql_globals)
+ STD_PHP_INI_ENTRY("mysql.default_password", NULL, PHP_INI_ALL, OnUpdateString, default_password, php_mysql_globals, mysql_globals)
+ PHP_INI_ENTRY("mysql.default_port", NULL, PHP_INI_ALL, OnMySQLPort)
PHP_INI_END()
@@ -267,6 +289,8 @@
PHP_MINIT_FUNCTION(mysql)
{
+ ELS_FETCH();
+
#ifdef ZTS
mysql_globals_id = ts_allocate_id(sizeof(php_mysql_globals), php_mysql_init_globals, NULL);
#else
@@ -306,41 +330,24 @@
PHP_MINFO_FUNCTION(mysql)
{
- char maxp[16],maxl[16];
+ char buf[32];
MySLS_FETCH();
-
- if (MySG(max_persistent)==-1) {
- strcpy(maxp,"Unlimited");
- } else {
- snprintf(maxp,15,"%ld",MySG(max_persistent));
- maxp[15]=0;
- }
- if (MySG(max_links)==-1) {
- strcpy(maxl,"Unlimited");
- } else {
- snprintf(maxl,15,"%ld",MySG(max_links));
- maxl[15]=0;
- }
- php_printf("<table cellpadding=5>"
- "<tr><td>Allow persistent
links:</td><td>%s</td></tr>\n"
- "<tr><td>Persistent
links:</td><td>%d/%s</td></tr>\n"
- "<tr><td>Total links:</td><td>%d/%s</td></tr>\n"
- "<tr><td>Client API
version:</td><td>%s</td></tr>\n"
-#if !(WIN32|WINNT)
- "<tr><td valign=\"top\">Compilation
definitions:</td><td>"
- "<tt>MYSQL_INCLUDE=%s<br>\n"
- "MYSQL_LFLAGS=%s<br>\n"
- "MYSQL_LIBS=%s<br></tt></td></tr>"
-#endif
- "</table>\n",
- (MySG(allow_persistent)?"Yes":"No"),
- MySG(num_persistent),maxp,
- MySG(num_links),maxl,
- mysql_get_client_info()
+
+ DISPLAY_INI_ENTRIES();
+
+ php_printf("<table border=5 width=\"600\">");
+ php_info_print_table_header(2, "Key", "Value");
+ sprintf(buf, "%d", MySG(num_persistent));
+ php_info_print_table_row(2, "Active Persistent Links", buf);
+ sprintf(buf, "%d", MySG(num_links));
+ php_info_print_table_row(2, "Active Links", buf);
+ php_info_print_table_row(2, "Client API version", mysql_get_client_info());
#if !(WIN32|WINNT)
- ,PHP_MYSQL_INCLUDE,PHP_MYSQL_LFLAGS,PHP_MYSQL_LIBS
+ php_info_print_table_row(2, "MYSQL_INCLUDE", PHP_MYSQL_INCLUDE);
+ php_info_print_table_row(2, "MYSQL_LFLAGS", PHP_MYSQL_LFLAGS);
+ php_info_print_table_row(2, "MYSQL_LIBS", PHP_MYSQL_LIBS);
#endif
- );
+ php_printf("</table>\n");
}
Index: php4/ext/mysql/mysql.dsp
diff -u php4/ext/mysql/mysql.dsp:1.1 php4/ext/mysql/mysql.dsp:1.2
--- php4/ext/mysql/mysql.dsp:1.1 Fri Jun 4 06:45:54 1999
+++ php4/ext/mysql/mysql.dsp Fri Aug 13 17:03:27 1999
@@ -45,7 +45,7 @@
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D
"_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MYSQL_EXPORTS" /YX
/FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\..\libzend" /I
"..\..\..\bindlib_w32" /I "..\..\..\MySQL\include" /I "..\..\..\TSRM"
/D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D
"_USRDLL" /D "MYSQL_EXPORTS" /D "COMPILE_DL" /D HAVE_MYSQL=1 /YX /FD
/c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\libzend" /I
"..\..\..\bindlib_w32" /I "..\..\..\MySQL\include" /I "..\..\TSRM" /D
"NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D
"_USRDLL" /D "MYSQL_EXPORTS" /D "COMPILE_DL" /D HAVE_MYSQL=1 /YX /FD
/c
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x40d /d "NDEBUG"
@@ -55,7 +55,7 @@
# 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 winspool.lib comdlg32.lib advapi32.lib shell32.lib
ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libmySQL.lib php4nts.lib /nologo /dll
/machine:I386 /out:"Release/php_mysql.dll" /libpath:"..\..\..\MySQL\lib\opt"
/libpath:"..\..\Release"
+# ADD 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 libmySQL.lib php4nts.lib /nologo /dll
/machine:I386 /out:"Release/php_mysql.dll"
/libpath:"..\..\..\MySQL\libmysql\Release" /libpath:"..\..\Release"
!ELSEIF "$(CFG)" == "mysql - Win32 Debug"
@@ -70,8 +70,8 @@
# PROP Intermediate_Dir "Debug"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D
"_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MYSQL_EXPORTS" /YX
/FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\..\libzend" /I
"..\..\..\bindlib_w32" /I "..\..\..\MySQL\include" /I "..\..\..\TSRM"
/D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D
"_USRDLL" /D "MYSQL_EXPORTS" /D "COMPILE_DL" /D HAVE_MYSQL=1 /D
ZEND_DEBUG=1 /FR /YX /FD /GZ /c
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D
"_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MYSQL_EXPORTS" /YX
/FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\libzend" /I
"..\..\..\bindlib_w32" /I "..\..\..\MySQL\include" /I "..\..\TSRM" /D
"_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D
"_USRDLL" /D "MYSQL_EXPORTS" /D "COMPILE_DL" /D HAVE_MYSQL=1 /D
ZEND_DEBUG=1 /FR /YX /FD /GZ /c
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x40d /d "_DEBUG"
@@ -81,7 +81,7 @@
# 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 winspool.lib comdlg32.lib advapi32.lib shell32.lib
ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libmySQL.lib php4nts.lib /nologo /dll /debug
/machine:I386 /out:"Debug/php_mysql.dll" /pdbtype:sept
/libpath:"..\..\..\MySQL\lib\debug" /libpath:"..\..\Debug"
+# ADD 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 libmySQL.lib php4nts.lib /nologo /dll /debug
/machine:I386 /out:"Debug/php_mysql.dll" /pdbtype:sept
/libpath:"..\..\..\MySQL\libmysql\Debug" /libpath:"..\..\Debug"
!ELSEIF "$(CFG)" == "mysql - Win32 Debug_TS"
@@ -96,8 +96,8 @@
# PROP Intermediate_Dir "Debug_TS"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "..\.." /I
"..\..\..\libzend" /I "..\..\..\bindlib_w32" /D "_DEBUG" /D
"WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D
"MYSQL_EXPORTS" /D "COMPILE_DL" /D HAVE_MYSQL=1 /FR /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\..\libzend" /I
"..\..\..\bindlib_w32" /I "..\..\..\MySQL\include" /I "..\..\..\TSRM"
/D "_DEBUG" /D ZEND_DEBUG=1 /D "WIN32" /D "_WINDOWS" /D
"_MBCS" /D "_USRDLL" /D "MYSQL_EXPORTS" /D "COMPILE_DL" /D
HAVE_MYSQL=1 /D "ZTS" /FR /YX /FD /GZ /c
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "..\.." /I
"..\..\..\libzend" /I "..\..\..\bindlib_w32" /D "_DEBUG" /D
"WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D
"MYSQL_EXPORTS" /D "COMPILE_DL" /D HAVE_MYSQL=1 /FR /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\libzend" /I
"..\..\..\bindlib_w32" /I "..\..\..\MySQL\include" /I "..\..\TSRM" /D
"_DEBUG" /D ZEND_DEBUG=1 /D "WIN32" /D "_WINDOWS" /D "_MBCS"
/D "_USRDLL" /D "MYSQL_EXPORTS" /D "COMPILE_DL" /D HAVE_MYSQL=1 /D
"ZTS" /FR /YX /FD /GZ /c
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x40d /d "_DEBUG"
@@ -107,7 +107,7 @@
# 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 winspool.lib comdlg32.lib advapi32.lib shell32.lib
ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libmySQL.lib php4ts.lib /nologo /dll /debug
/machine:I386 /out:"Debug_TS/php_mysql.dll" /pdbtype:sept
/libpath:"..\..\..\MySQL\lib\debug" /libpath:"..\..\Debug_TS"
+# ADD 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 libmySQL.lib php4ts.lib /nologo /dll /debug
/machine:I386 /out:"Debug_TS/php_mysql.dll" /pdbtype:sept
/libpath:"..\..\..\MySQL\libmysql\Debug" /libpath:"..\..\Debug_TS"
!ELSEIF "$(CFG)" == "mysql - Win32 Release_TS"
@@ -123,7 +123,7 @@
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\..\libzend" /I
"..\..\..\bindlib_w32" /D "NDEBUG" /D "WIN32" /D "_WINDOWS"
/D "_MBCS" /D "_USRDLL" /D "MYSQL_EXPORTS" /D "COMPILE_DL"
/D HAVE_MYSQL=1 /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\..\libzend" /I
"..\..\..\bindlib_w32" /I "..\..\..\MySQL\include" /I "..\..\..\TSRM"
/D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D
"_USRDLL" /D "MYSQL_EXPORTS" /D "COMPILE_DL" /D HAVE_MYSQL=1 /D
"ZTS" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\libzend" /I
"..\..\..\bindlib_w32" /I "..\..\..\MySQL\include" /I "..\..\TSRM" /D
"NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D
"_USRDLL" /D "MYSQL_EXPORTS" /D "COMPILE_DL" /D HAVE_MYSQL=1 /D
"ZTS" /YX /FD /c
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x40d /d "NDEBUG"
@@ -133,7 +133,7 @@
# 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 winspool.lib comdlg32.lib advapi32.lib shell32.lib
ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libmySQL.lib php4ts.lib /nologo /dll
/machine:I386 /out:"Release_TS/php_mysql.dll" /libpath:"..\..\..\MySQL\lib\opt"
/libpath:"..\..\Release_TS"
+# ADD 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 libmySQL.lib php4ts.lib /nologo /dll
/machine:I386 /out:"Release_TS/php_mysql.dll"
/libpath:"..\..\..\MySQL\libmysql\Release" /libpath:"..\..\Release_TS"
!ENDIF
Index: php4/ext/standard/dl.c
diff -u php4/ext/standard/dl.c:1.8 php4/ext/standard/dl.c:1.9
--- php4/ext/standard/dl.c:1.8 Mon Aug 2 15:16:50 1999
+++ php4/ext/standard/dl.c Fri Aug 13 17:03:27 1999
@@ -87,7 +87,9 @@
php3_module_entry *(*get_module)(void);
PLS_FETCH();
- if (cfg_get_string("extension_dir",&PG(extension_dir))==SUCCESS &&
PG(extension_dir)){
+ if (cfg_get_string("extension_dir",&PG(extension_dir))==SUCCESS
+ && PG(extension_dir)
+ && PG(extension_dir)[0]){
int extension_dir_len = strlen(PG(extension_dir));
if (PG(extension_dir)[extension_dir_len-1]=='/' ||
PG(extension_dir)[extension_dir_len-1]=='\\') {