summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrank M. Kromann <fmk@php.net>2000-02-13 19:06:51 +0000
committerFrank M. Kromann <fmk@php.net>2000-02-13 19:06:51 +0000
commit7fa7c8a8e3f93ffef4be19047c7461eccafd2431 (patch)
tree4bb651f015cf445c04908cb457b086fa866983f2
parentbac7a5085e34338cda2af215728c5375a57ffc35 (diff)
downloadphp-git-7fa7c8a8e3f93ffef4be19047c7461eccafd2431.tar.gz
Fixing compile and link with current cvs.
-rw-r--r--ext/mssql/mssql.dsp47
-rw-r--r--ext/mssql/php_mssql.c199
-rw-r--r--ext/mssql/php_mssql.h11
3 files changed, 155 insertions, 102 deletions
diff --git a/ext/mssql/mssql.dsp b/ext/mssql/mssql.dsp
index dbb62ab7a5..af05c4912e 100644
--- a/ext/mssql/mssql.dsp
+++ b/ext/mssql/mssql.dsp
@@ -19,8 +19,9 @@ CFG=mssql - Win32 Debug
!MESSAGE
!MESSAGE "mssql - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE "mssql - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mssql - Win32 MSSQL 65 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mssql - Win32 MSSQL 70 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "mssql - Win32 MSSQL 65 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "mssql - Win32 MSSQL 70 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "mssql - Win32 MSSQL 70 Debug" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE
# Begin Project
@@ -82,7 +83,7 @@ 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 /nologo /dll /debug /machine:I386 /pdbtype:sept
-!ELSEIF "$(CFG)" == "mssql - Win32 MSSQL 65 Release"
+!ELSEIF "$(CFG)" == "mssql - Win32 MSSQL 65 Release_TS"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
@@ -97,7 +98,7 @@ LINK32=link.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MSSQL_EXPORTS" /D "COMPILE_DL" /D "DBNTWIN32" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "mssql-65" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MSSQL_EXPORTS" /D "COMPILE_DL" /D "DBNTWIN32" /D ZTS=1 /D MSSQL65=1 /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "mssql-65" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MSSQL_EXPORTS" /D "COMPILE_DL" /D "DBNTWIN32" /D ZTS=1 /D MSSQL65=1 /D ZEND_WIN32=1 /D PHP_WIN32=1 /YX /FD /c
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x406 /d "NDEBUG"
@@ -109,7 +110,7 @@ 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 php4ts.lib ntwdblib.lib /nologo /dll /machine:I386 /out:"MSSQL_65_Release/php_mssql.dll" /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 php4ts.lib ntwdblib.lib /nologo /dll /machine:I386 /out:"MSSQL_65_Release/php_mssql.dll" /libpath:"..\..\Release_TS" /libpath:"mssql-65"
-!ELSEIF "$(CFG)" == "mssql - Win32 MSSQL 70 Release"
+!ELSEIF "$(CFG)" == "mssql - Win32 MSSQL 70 Release_TS"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
@@ -124,7 +125,7 @@ LINK32=link.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MSSQL_EXPORTS" /D "COMPILE_DL" /D "DBNTWIN32" /D ZTS=1 /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "mssql-70" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MSSQL_EXPORTS" /D "COMPILE_DL" /D "DBNTWIN32" /D ZTS=1 /D MSSQL70=1 /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "mssql-70" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MSSQL_EXPORTS" /D "COMPILE_DL" /D "DBNTWIN32" /D ZTS=1 /D MSSQL70=1 /D ZEND_WIN32=1 /D PHP_WIN32=1 /YX /FD /c
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x406 /d "NDEBUG"
@@ -134,7 +135,34 @@ 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 php4ts.lib ntwdblib.lib /nologo /dll /machine:I386 /out:"MSSQL_65_Release/php_mssql.dll" /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 php4ts.lib ntwdblib.lib /nologo /dll /machine:I386 /out:"MSSQL_65_Release/php_mssql.dll" /libpath:"..\..\Release_TS" /libpath:"mssql-70"
+# 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 php4ts.lib ntwdblib.lib /nologo /dll /machine:I386 /out:"MSSQL_70_Release/php_mssql.dll" /libpath:"..\..\Release_TS" /libpath:"mssql-70"
+
+!ELSEIF "$(CFG)" == "mssql - Win32 MSSQL 70 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "mssql___Win32_MSSQL_70_Debug"
+# PROP BASE Intermediate_Dir "mssql___Win32_MSSQL_70_Debug"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "mssql___Win32_MSSQL_70_Debug"
+# PROP Intermediate_Dir "mssql___Win32_MSSQL_70_Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "mssql-70" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MSSQL_EXPORTS" /D "COMPILE_DL" /D "DBNTWIN32" /D ZTS=1 /D MSSQL70=1 /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "mssql-70" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MSSQL_EXPORTS" /D "COMPILE_DL" /D "DBNTWIN32" /D ZTS=1 /D MSSQL70=1 /YX /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x406 /d "NDEBUG"
+# ADD RSC /l 0x406 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# 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 php4ts.lib ntwdblib.lib /nologo /dll /machine:I386 /out:"MSSQL_65_Release/php_mssql.dll" /libpath:"..\..\Release_TS" /libpath:"mssql-70"
+# 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 php4ts.lib ntwdblib.lib /nologo /dll /machine:I386 /out:"MSSQL_70_Debug/php_mssql.dll" /libpath:"..\..\Debug_TS" /libpath:"mssql-70"
!ENDIF
@@ -142,8 +170,9 @@ LINK32=link.exe
# Name "mssql - Win32 Release"
# Name "mssql - Win32 Debug"
-# Name "mssql - Win32 MSSQL 65 Release"
-# Name "mssql - Win32 MSSQL 70 Release"
+# Name "mssql - Win32 MSSQL 65 Release_TS"
+# Name "mssql - Win32 MSSQL 70 Release_TS"
+# Name "mssql - Win32 MSSQL 70 Debug"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
diff --git a/ext/mssql/php_mssql.c b/ext/mssql/php_mssql.c
index d239080eb5..1e6ad4ec0e 100644
--- a/ext/mssql/php_mssql.c
+++ b/ext/mssql/php_mssql.c
@@ -32,31 +32,33 @@
#if HAVE_MSSQL
#define SAFE_STRING(s) ((s)?(s):"")
+static int le_result, le_link, le_plink;
+
static void php_mssql_get_column_content_with_type(mssql_link *mssql_ptr,int offset,zval *result, int column_type);
static void php_mssql_get_column_content_without_type(mssql_link *mssql_ptr,int offset,zval *result, int column_type);
function_entry mssql_functions[] = {
- PHP_FE(mssql_connect, NULL)
- PHP_FE(mssql_pconnect, NULL)
- PHP_FE(mssql_close, NULL)
- PHP_FE(mssql_select_db, NULL)
- PHP_FE(mssql_query, NULL)
- PHP_FE(mssql_free_result, NULL)
- PHP_FE(mssql_get_last_message, NULL)
- PHP_FE(mssql_num_rows, NULL)
- PHP_FE(mssql_num_fields, NULL)
- PHP_FE(mssql_fetch_field, NULL)
- PHP_FE(mssql_fetch_row, NULL)
- PHP_FE(mssql_fetch_array, NULL)
- PHP_FE(mssql_fetch_object, NULL)
- PHP_FE(mssql_field_length, NULL)
- PHP_FE(mssql_field_name, NULL)
- PHP_FE(mssql_field_type, NULL)
- PHP_FE(mssql_data_seek, NULL)
- PHP_FE(mssql_field_seek, NULL)
- PHP_FE(mssql_result, NULL)
- PHP_FE(mssql_min_error_severity, NULL)
- PHP_FE(mssql_min_message_severity, NULL)
+ PHP_FE(mssql_connect, NULL)
+ PHP_FE(mssql_pconnect, NULL)
+ PHP_FE(mssql_close, NULL)
+ PHP_FE(mssql_select_db, NULL)
+ PHP_FE(mssql_query, NULL)
+ PHP_FE(mssql_free_result, NULL)
+ PHP_FE(mssql_get_last_message, NULL)
+ PHP_FE(mssql_num_rows, NULL)
+ PHP_FE(mssql_num_fields, NULL)
+ PHP_FE(mssql_fetch_field, NULL)
+ PHP_FE(mssql_fetch_row, NULL)
+ PHP_FE(mssql_fetch_array, NULL)
+ PHP_FE(mssql_fetch_object, NULL)
+ PHP_FE(mssql_field_length, NULL)
+ PHP_FE(mssql_field_name, NULL)
+ PHP_FE(mssql_field_type, NULL)
+ PHP_FE(mssql_data_seek, NULL)
+ PHP_FE(mssql_field_seek, NULL)
+ PHP_FE(mssql_result, NULL)
+ PHP_FE(mssql_min_error_severity, NULL)
+ PHP_FE(mssql_min_message_severity, NULL)
{NULL, NULL, NULL}
};
@@ -74,7 +76,7 @@ zend_module_entry mssql_module_entry = {
#ifdef ZTS
int mssql_globals_id;
#else
-ZEND_API php_mssql_globals mssql_globals;
+PHP_MSSQL_API php_mssql_globals mssql_globals;
#endif
#ifdef COMPILE_DL
@@ -90,7 +92,7 @@ PHP_INI_BEGIN()
STD_PHP_INI_ENTRY_EX("mssql.max_links", "-1", PHP_INI_SYSTEM, OnUpdateInt, max_links, php_mssql_globals, mssql_globals, display_link_numbers)
STD_PHP_INI_ENTRY_EX("mssql.min_error_severity", "10", PHP_INI_ALL, OnUpdateInt, cfg_min_error_severity, php_mssql_globals, mssql_globals, display_link_numbers)
STD_PHP_INI_ENTRY_EX("mssql.min_message_severity", "10", PHP_INI_ALL, OnUpdateInt, cfg_min_message_severity, php_mssql_globals, mssql_globals, display_link_numbers)
- STD_PHP_INI_ENTRY_EX("mssql.compatability_mode", "0", PHP_INI_ALL, OnUpdateInt, compatability_mode, php_mssql_globals, mssql_globals, display_link_numbers)
+ STD_PHP_INI_BOOLEAN("mssql.compatability_mode", "0", PHP_INI_ALL, OnUpdateBool, compatability_mode, php_mssql_globals, mssql_globals)
STD_PHP_INI_ENTRY_EX("mssql.connect_timeout", "5", PHP_INI_ALL, OnUpdateInt, connect_timeout, php_mssql_globals, mssql_globals, display_link_numbers)
STD_PHP_INI_ENTRY_EX("mssql.textsize", "-1", PHP_INI_ALL, OnUpdateInt, textsize, php_mssql_globals, mssql_globals, display_link_numbers)
STD_PHP_INI_ENTRY_EX("mssql.textlimit", "-1", PHP_INI_ALL, OnUpdateInt, textlimit, php_mssql_globals, mssql_globals, display_link_numbers)
@@ -121,8 +123,7 @@ static int php_mssql_message_handler(DBPROCESS *dbproc, DBINT msgno,int msgstate
static int _clean_invalid_results(list_entry *le)
{
MSSQLLS_FETCH();
-
- if (le->type == MS_SQL_G(le_result)) {
+ if (le->type == le_result) {
mssql_link *mssql_ptr = ((mssql_result *) le->ptr)->mssql_ptr;
if (!mssql_ptr->valid) {
@@ -156,13 +157,24 @@ static void _free_mssql_result(mssql_result *result)
efree(result);
}
+static void php_mssql_set_default_link(int id)
+{
+ MSSQLLS_FETCH();
+
+ if (MS_SQL_G(default_link)!=-1) {
+ zend_list_delete(MS_SQL_G(default_link));
+ }
+ MS_SQL_G(default_link) = id;
+ zend_list_addref(id);
+}
static void _close_mssql_link(mssql_link *mssql_ptr)
{
MSSQLLS_FETCH();
+ ELS_FETCH();
mssql_ptr->valid = 0;
- zend_hash_apply(MS_SQL_G(resource_list),(int (*)(void *))_clean_invalid_results);
+ zend_hash_apply(&EG(regular_list),(int (*)(void *))_clean_invalid_results);
dbclose(mssql_ptr->link);
dbfreelogin(mssql_ptr->login);
efree(mssql_ptr);
@@ -176,7 +188,7 @@ static void _close_mssql_plink(mssql_link *mssql_ptr)
dbclose(mssql_ptr->link);
dbfreelogin(mssql_ptr->login);
- free(mssql_ptr);
+ efree(mssql_ptr);
MS_SQL_G(num_persistent)--;
MS_SQL_G(num_links)--;
}
@@ -190,7 +202,6 @@ static void php_mssql_init_globals(php_mssql_globals *mssql_globals)
PHP_MINIT_FUNCTION(mssql)
{
- ELS_FETCH();
MSSQLLS_D;
#ifdef ZTS
@@ -199,11 +210,11 @@ PHP_MINIT_FUNCTION(mssql)
#else
MS_SQL_G(num_persistent) = 0;
#endif
- REGISTER_INI_ENTRIES();
- MS_SQL_G(le_result) = register_list_destructors(_free_mssql_result, NULL);
- MS_SQL_G(le_link) = register_list_destructors(_close_mssql_link, NULL);
- MS_SQL_G(le_plink) = register_list_destructors(NULL, _close_mssql_plink);
+ REGISTER_INI_ENTRIES();
+ le_result = register_list_destructors(_free_mssql_result, NULL);
+ le_link = register_list_destructors(_close_mssql_link, NULL);
+ le_plink = register_list_destructors(NULL, _close_mssql_plink);
mssql_module_entry.type = type;
if (dbinit()==FAIL) {
@@ -216,16 +227,14 @@ PHP_MINIT_FUNCTION(mssql)
} else {
MS_SQL_G(get_column_content) = php_mssql_get_column_content_without_type;
}
-// if (MS_SQL_G(connecttimeout) < 1) MS_SQL_G(connecttimeout) = 1;
-// dbsetlogintime(MS_SQL_G(connecttimeout));
+ if (MS_SQL_G(connect_timeout) < 1) MS_SQL_G(connect_timeout) = 1;
+ dbsetlogintime(MS_SQL_G(connect_timeout));
return SUCCESS;
}
PHP_MSHUTDOWN_FUNCTION(mssql)
{
- MSSQLLS_FETCH();
-
UNREGISTER_INI_ENTRIES();
dbexit();
return SUCCESS;
@@ -238,7 +247,7 @@ PHP_RINIT_FUNCTION(mssql)
MS_SQL_G(default_link) = -1;
MS_SQL_G(num_links) = MS_SQL_G(num_persistent);
- MS_SQL_G(appname) = "PHP";
+ MS_SQL_G(appname) = estrndup("PHP 4.0",7);
MS_SQL_G(server_message) = empty_string;
MS_SQL_G(min_error_severity) = MS_SQL_G(cfg_min_error_severity);
MS_SQL_G(min_message_severity) = MS_SQL_G(cfg_min_message_severity);
@@ -249,7 +258,11 @@ PHP_RINIT_FUNCTION(mssql)
PHP_RSHUTDOWN_FUNCTION(mssql)
{
MSSQLLS_FETCH();
- STR_FREE(MS_SQL_G(server_message));
+
+ STR_FREE(MS_SQL_G(appname));
+ if (MS_SQL_G(server_message)) {
+ STR_FREE(MS_SQL_G(server_message));
+ }
return SUCCESS;
}
@@ -282,12 +295,12 @@ void php_mssql_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent)
MSSQLLS_FETCH();
// PLS_FETCH();
- MS_SQL_G(resource_list) = list;
- MS_SQL_G(resource_plist) = plist;
-
switch(ARG_COUNT(ht)) {
case 0: /* defaults */
host=user=passwd=NULL;
+ hashed_details_length=5+3;
+ hashed_details = (char *) emalloc(hashed_details_length+1);
+ strcpy(hashed_details,"mssql___");
break;
case 1: {
zval **yyhost;
@@ -298,6 +311,9 @@ void php_mssql_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent)
convert_to_string_ex(yyhost);
host = (*yyhost)->value.str.val;
user=passwd=NULL;
+ hashed_details_length = (*yyhost)->value.str.len+5+3;
+ hashed_details = (char *) emalloc(hashed_details_length+1);
+ sprintf(hashed_details,"mssql_%s__",(*yyhost)->value.str.val);
}
break;
case 2: {
@@ -311,6 +327,9 @@ void php_mssql_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent)
host = (*yyhost)->value.str.val;
user = (*yyuser)->value.str.val;
passwd=NULL;
+ hashed_details_length = (*yyhost)->value.str.len+(*yyuser)->value.str.len+5+3;
+ hashed_details = (char *) emalloc(hashed_details_length+1);
+ sprintf(hashed_details,"mssql_%s_%s_",(*yyhost)->value.str.val,(*yyuser)->value.str.val);
}
break;
case 3: {
@@ -325,6 +344,9 @@ void php_mssql_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent)
host = (*yyhost)->value.str.val;
user = (*yyuser)->value.str.val;
passwd = (*yypasswd)->value.str.val;
+ hashed_details_length = (*yyhost)->value.str.len+(*yyuser)->value.str.len+(*yypasswd)->value.str.len+5+3;
+ hashed_details = (char *) emalloc(hashed_details_length+1);
+ sprintf(hashed_details,"mssql_%s_%s_%s",(*yyhost)->value.str.val,(*yyuser)->value.str.val,(*yypasswd)->value.str.val); /* SAFE */
}
break;
default:
@@ -332,19 +354,11 @@ void php_mssql_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent)
break;
}
- hashed_details_length = sizeof("mssql___")-1 + strlen(SAFE_STRING(host))+strlen(SAFE_STRING(user))+strlen(SAFE_STRING(passwd));
- hashed_details = (char *) emalloc(hashed_details_length+1);
-
if (hashed_details == NULL) {
php_error(E_WARNING, "Out of memory");
RETURN_FALSE;
}
- sprintf(hashed_details,"mssql_%s_%s_%s", SAFE_STRING(host), SAFE_STRING(user), SAFE_STRING(passwd));
-
-// return_value->value.lval = 0;
-// return_value->type = IS_RESOURCE;
-
/* set a DBLOGIN record */
if ((mssql.login = dblogin()) == NULL) {
php_error(E_WARNING,"MS SQL: Unable to allocate login record");
@@ -370,8 +384,7 @@ void php_mssql_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent)
list_entry *le;
/* try to find if we already have this link in our persistent list */
- if (zend_hash_find(plist, hashed_details, hashed_details_length + 1,
- (void **) &le)==FAILURE) { /* we don't */
+ if (zend_hash_find(&EG(persistent_list), hashed_details, hashed_details_length + 1, (void **) &le)==FAILURE) { /* we don't */
list_entry new_le;
if (MS_SQL_G(max_links) != -1 && MS_SQL_G(num_links) >= MS_SQL_G(max_links)) {
@@ -419,9 +432,9 @@ void php_mssql_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent)
/* hash it up */
mssql_ptr = (mssql_link *) emalloc(sizeof(mssql_link));
memcpy(mssql_ptr, &mssql, sizeof(mssql_link));
- new_le.type = MS_SQL_G(le_plink);
+ new_le.type = le_plink;
new_le.ptr = mssql_ptr;
- if (zend_hash_update(plist, hashed_details, hashed_details_length + 1, &new_le, sizeof(list_entry), NULL)==FAILURE) {
+ if (zend_hash_update(&EG(persistent_list), hashed_details, hashed_details_length + 1, &new_le, sizeof(list_entry), NULL)==FAILURE) {
efree(mssql_ptr);
efree(hashed_details);
dbfreelogin(mssql.login);
@@ -430,7 +443,7 @@ void php_mssql_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent)
MS_SQL_G(num_persistent)++;
MS_SQL_G(num_links)++;
} else { /* we do */
- if (le->type != MS_SQL_G(le_plink)) {
+ if (le->type != le_plink) {
#if BROKEN_MSSQL_PCONNECTS
log_error("PHP/MS SQL: Hashed persistent link is not a MS SQL link!",php_rqst->server);
#endif
@@ -449,7 +462,7 @@ void php_mssql_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent)
log_error("PHP/MS SQL: Unable to reconnect!",php_rqst->server);
#endif
php_error(E_WARNING,"MS SQL: Link to server lost, unable to reconnect");
- zend_hash_del(plist, hashed_details, hashed_details_length+1);
+ zend_hash_del(&EG(persistent_list), hashed_details, hashed_details_length+1);
efree(hashed_details);
RETURN_FALSE;
}
@@ -460,13 +473,13 @@ void php_mssql_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent)
#if BROKEN_MSSQL_PCONNECTS
log_error("PHP/MS SQL: Unable to set required options",php_rqst->server);
#endif
- zend_hash_del(plist, hashed_details, hashed_details_length + 1);
+ zend_hash_del(&EG(persistent_list), hashed_details, hashed_details_length + 1);
efree(hashed_details);
RETURN_FALSE;
}
}
}
- ZEND_REGISTER_RESOURCE(return_value, mssql_ptr, MS_SQL_G(le_plink));
+ ZEND_REGISTER_RESOURCE(return_value, mssql_ptr, le_plink);
} else { /* non persistent */
list_entry *index_ptr, new_index_ptr;
@@ -475,7 +488,7 @@ void php_mssql_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent)
* if it doesn't, open a new mssql link, add it to the resource list,
* and add a pointer to it with hashed_details as the key.
*/
- if (zend_hash_find(list, hashed_details, hashed_details_length + 1,(void **) &index_ptr)==SUCCESS) {
+ if (zend_hash_find(&EG(regular_list), hashed_details, hashed_details_length + 1,(void **) &index_ptr)==SUCCESS) {
int type,link;
void *ptr;
@@ -484,14 +497,15 @@ void php_mssql_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent)
}
link = (int) index_ptr->ptr;
ptr = zend_list_find(link,&type); /* check if the link is still there */
- if (ptr && (type==MS_SQL_G(le_link) || type==MS_SQL_G(le_plink))) {
+ if (ptr && (type==le_link || type==le_plink)) {
zend_list_addref(link);
- return_value->value.lval = MS_SQL_G(default_link) = link;
+ return_value->value.lval = link;
+ php_mssql_set_default_link(link);
return_value->type = IS_RESOURCE;
efree(hashed_details);
return;
} else {
- zend_hash_del(list, hashed_details, hashed_details_length + 1);
+ zend_hash_del(&EG(regular_list), hashed_details, hashed_details_length + 1);
}
}
if (MS_SQL_G(max_links) != -1 && MS_SQL_G(num_links) >= MS_SQL_G(max_links)) {
@@ -531,19 +545,19 @@ void php_mssql_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent)
/* add it to the list */
mssql_ptr = (mssql_link *) emalloc(sizeof(mssql_link));
memcpy(mssql_ptr, &mssql, sizeof(mssql_link));
- ZEND_REGISTER_RESOURCE(return_value, mssql_ptr, MS_SQL_G(le_link));
+ ZEND_REGISTER_RESOURCE(return_value, mssql_ptr, le_link);
/* add it to the hash */
new_index_ptr.ptr = (void *) return_value->value.lval;
new_index_ptr.type = le_index_ptr;
- if (zend_hash_update(list, hashed_details, hashed_details_length + 1,(void *) &new_index_ptr, sizeof(list_entry),NULL)==FAILURE) {
+ if (zend_hash_update(&EG(regular_list), hashed_details, hashed_details_length + 1,(void *) &new_index_ptr, sizeof(list_entry),NULL)==FAILURE) {
efree(hashed_details);
RETURN_FALSE;
}
MS_SQL_G(num_links)++;
}
efree(hashed_details);
-// MS_SQL_G(default_link)=return_value->value.lval;
+ php_mssql_set_default_link(return_value->value.lval);
}
@@ -571,7 +585,7 @@ PHP_FUNCTION(mssql_pconnect)
PHP_FUNCTION(mssql_close)
{
- zval **mssql_link_index;
+ zval **mssql_link_index=NULL;
int id;
mssql_link *mssql_ptr;
MSSQLLS_FETCH();
@@ -579,21 +593,21 @@ PHP_FUNCTION(mssql_close)
switch (ARG_COUNT(ht)) {
case 0:
- id = MS_SQL_G(default_link);
+ id = php_mssql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
+ CHECK_LINK(id);
break;
case 1:
if (zend_get_parameters_ex(1, &mssql_link_index)==FAILURE) {
RETURN_FALSE;
}
- ZEND_FETCH_RESOURCE2(mssql_ptr, mssql_link *, mssql_link_index, -1, "MS SQL-Link", MS_SQL_G(le_link), MS_SQL_G(le_plink));
- id = (*mssql_link_index)->value.lval;
+ id = -1;
break;
default:
WRONG_PARAM_COUNT;
break;
}
-
- zend_list_delete(id);
+ ZEND_FETCH_RESOURCE2(mssql_ptr, mssql_link *, mssql_link_index, id, "MS SQL-Link", le_link, le_plink);
+ zend_list_delete((*mssql_link_index)->value.lval);
RETURN_TRUE;
}
@@ -612,20 +626,20 @@ PHP_FUNCTION(mssql_select_db)
RETURN_FALSE;
}
id = php_mssql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
+ CHECK_LINK(id);
break;
case 2:
if (zend_get_parameters_ex(2, &db, &mssql_link_index)==FAILURE) {
RETURN_FALSE;
}
- ZEND_FETCH_RESOURCE2(mssql_ptr, mssql_link *, mssql_link_index, -1, "MS SQL-Link", MS_SQL_G(le_link), MS_SQL_G(le_plink));
- id = (*mssql_link_index)->value.lval;
+ id = -1;
break;
default:
WRONG_PARAM_COUNT;
break;
}
-
- CHECK_LINK(id);
+
+ ZEND_FETCH_RESOURCE2(mssql_ptr, mssql_link *, mssql_link_index, id, "MS SQL-Link", le_link, le_plink);
convert_to_string_ex(db);
@@ -701,6 +715,7 @@ static void php_mssql_get_column_content_without_type(mssql_link *mssql_ptr,int
var_reset(result);
return;
}
+
if (dbwillconvert(coltype(offset),SQLCHAR)) {
unsigned char *res_buf;
int res_length = dbdatlen(mssql_ptr->link,offset);
@@ -724,6 +739,7 @@ PHP_FUNCTION(mssql_query)
int retvalue;
mssql_link *mssql_ptr;
mssql_result *result;
+ int id;
int num_fields;
int blocks_initialized=1;
int i,j;
@@ -736,18 +752,21 @@ PHP_FUNCTION(mssql_query)
if (zend_get_parameters_ex(1, &query)==FAILURE) {
RETURN_FALSE;
}
-// id = MS_SQL_G(default_link);
+ id = php_mssql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
+ CHECK_LINK(id);
break;
case 2:
if (zend_get_parameters_ex(2, &query, &mssql_link_index)==FAILURE) {
RETURN_FALSE;
}
- ZEND_FETCH_RESOURCE2(mssql_ptr, mssql_link *, mssql_link_index, -1, "MS SQL-Link", MS_SQL_G(le_link), MS_SQL_G(le_plink));
+ id = -1;
break;
default:
WRONG_PARAM_COUNT;
break;
}
+
+ ZEND_FETCH_RESOURCE2(mssql_ptr, mssql_link *, mssql_link_index, id, "MS SQL-Link", le_link, le_plink);
convert_to_string_ex(query);
@@ -846,7 +865,7 @@ PHP_FUNCTION(mssql_query)
}
efree(column_types);
- ZEND_REGISTER_RESOURCE(return_value, result, MS_SQL_G(le_result));
+ ZEND_REGISTER_RESOURCE(return_value, result, le_result);
}
PHP_FUNCTION(mssql_free_result)
@@ -860,7 +879,7 @@ PHP_FUNCTION(mssql_free_result)
WRONG_PARAM_COUNT;
}
- ZEND_FETCH_RESOURCE(result, mssql_result *, mssql_result_index, -1, "MS SQL-result", MS_SQL_G(le_result));
+ ZEND_FETCH_RESOURCE(result, mssql_result *, mssql_result_index, -1, "MS SQL-result", le_result);
zend_list_delete((*mssql_result_index)->value.lval);
RETURN_TRUE;
}
@@ -883,7 +902,7 @@ PHP_FUNCTION(mssql_num_rows)
WRONG_PARAM_COUNT;
}
- ZEND_FETCH_RESOURCE(result, mssql_result *, mssql_result_index, -1, "MS SQL-result", MS_SQL_G(le_result));
+ ZEND_FETCH_RESOURCE(result, mssql_result *, mssql_result_index, -1, "MS SQL-result", le_result);
return_value->value.lval = result->num_rows;
return_value->type = IS_LONG;
@@ -900,7 +919,7 @@ PHP_FUNCTION(mssql_num_fields)
WRONG_PARAM_COUNT;
}
- ZEND_FETCH_RESOURCE(result, mssql_result *, mssql_result_index, -1, "MS SQL-result", MS_SQL_G(le_result));
+ ZEND_FETCH_RESOURCE(result, mssql_result *, mssql_result_index, -1, "MS SQL-result", le_result);
return_value->value.lval = result->num_fields;
return_value->type = IS_LONG;
@@ -918,7 +937,7 @@ PHP_FUNCTION(mssql_fetch_row)
WRONG_PARAM_COUNT;
}
- ZEND_FETCH_RESOURCE(result, mssql_result *, mssql_result_index, -1, "MS SQL-result", MS_SQL_G(le_result));
+ ZEND_FETCH_RESOURCE(result, mssql_result *, mssql_result_index, -1, "MS SQL-result", le_result);
if (result->cur_row >= result->num_rows) {
RETURN_FALSE;
@@ -939,7 +958,7 @@ static void php_mssql_fetch_hash(INTERNAL_FUNCTION_PARAMETERS)
zval **mssql_result_index;
mssql_result *result;
int i;
- zval *zvalue_ptr, *tmp;
+ zval *tmp;
MSSQLLS_FETCH();
PLS_FETCH();
@@ -948,7 +967,7 @@ static void php_mssql_fetch_hash(INTERNAL_FUNCTION_PARAMETERS)
WRONG_PARAM_COUNT;
}
- ZEND_FETCH_RESOURCE(result, mssql_result *, mssql_result_index, -1, "MS SQL-result", MS_SQL_G(le_result));
+ ZEND_FETCH_RESOURCE(result, mssql_result *, mssql_result_index, -1, "MS SQL-result", le_result);
if (result->cur_row >= result->num_rows) {
RETURN_FALSE;
@@ -1001,7 +1020,7 @@ PHP_FUNCTION(mssql_data_seek)
id = mssql_result_index->value.lval;
result = (mssql_result *) zend_list_find(id,&type);
- if (type!=MS_SQL_G(le_result)) {
+ if (type!=le_result) {
php_error(E_WARNING,"%d is not a MS SQL result index",id);
RETURN_FALSE;
}
@@ -1097,7 +1116,7 @@ PHP_FUNCTION(mssql_fetch_field)
id = mssql_result_index->value.lval;
result = (mssql_result *) zend_list_find(id,&type);
- if (type!=MS_SQL_G(le_result)) {
+ if (type!=le_result) {
php_error(E_WARNING,"%d is not a MS SQL result index",id);
RETURN_FALSE;
}
@@ -1155,7 +1174,7 @@ PHP_FUNCTION(mssql_field_length)
id = mssql_result_index->value.lval;
result = (mssql_result *) zend_list_find(id,&type);
- if (type!=MS_SQL_G(le_result)) {
+ if (type!=le_result) {
php_error(E_WARNING,"%d is not a MS SQL result index",id);
RETURN_FALSE;
}
@@ -1207,7 +1226,7 @@ PHP_FUNCTION(mssql_field_name)
id = mssql_result_index->value.lval;
result = (mssql_result *) zend_list_find(id,&type);
- if (type!=MS_SQL_G(le_result)) {
+ if (type!=le_result) {
php_error(E_WARNING,"%d is not a MS SQL result index",id);
RETURN_FALSE;
}
@@ -1260,7 +1279,7 @@ PHP_FUNCTION(mssql_field_type)
id = mssql_result_index->value.lval;
result = (mssql_result *) zend_list_find(id,&type);
- if (type!=MS_SQL_G(le_result)) {
+ if (type!=le_result) {
php_error(E_WARNING,"%d is not a MS SQL result index",id);
RETURN_FALSE;
}
@@ -1298,7 +1317,7 @@ PHP_FUNCTION(mssql_field_seek)
id = mssql_result_index->value.lval;
result = (mssql_result *) zend_list_find(id,&type);
- if (type!=MS_SQL_G(le_result)) {
+ if (type!=le_result) {
php_error(E_WARNING,"%d is not a MS SQL result index",id);
RETURN_FALSE;
}
@@ -1331,7 +1350,7 @@ PHP_FUNCTION(mssql_result)
id = mssql_result_index->value.lval;
result = (mssql_result *) zend_list_find(id,&type);
- if (type!=MS_SQL_G(le_result)) {
+ if (type!=le_result) {
php_error(E_WARNING,"%d is not a MS SQL result index",id);
RETURN_FALSE;
}
diff --git a/ext/mssql/php_mssql.h b/ext/mssql/php_mssql.h
index 2941f3a940..1461510d49 100644
--- a/ext/mssql/php_mssql.h
+++ b/ext/mssql/php_mssql.h
@@ -27,6 +27,12 @@
#include "sqlfront.h"
#include "sqldb.h"
+#ifdef PHP_WIN32
+#define PHP_MSSQL_API __declspec(dllexport)
+#else
+#define PHP_MSSQL_API
+#endif
+
#if MSSQL65
#define MSSQL_VERSION "6.5"
#elif MSSQL70
@@ -47,7 +53,7 @@
#define DLEXPORT
#endif
-#ifdef ZTS
+#ifdef __ZTS
#include "TSRM.h"
#endif
@@ -95,7 +101,6 @@ typedef struct {
long allow_persistent;
char *appname;
char *server_message;
- int le_link,le_plink,le_result;
long min_error_severity, min_message_severity;
long cfg_min_error_severity, cfg_min_message_severity;
long compatability_mode, connect_timeout;
@@ -136,7 +141,7 @@ typedef struct mssql_result {
# define MSSQLLS_CC
# define MS_SQL_G(v) (mssql_globals.v)
# define MSSQLLS_FETCH()
-extern ZEND_API php_mssql_globals mssql_globals;
+extern PHP_MSSQL_API php_mssql_globals mssql_globals;
#endif
#else