diff options
author | Frank M. Kromann <fmk@php.net> | 2000-02-13 19:06:51 +0000 |
---|---|---|
committer | Frank M. Kromann <fmk@php.net> | 2000-02-13 19:06:51 +0000 |
commit | 7fa7c8a8e3f93ffef4be19047c7461eccafd2431 (patch) | |
tree | 4bb651f015cf445c04908cb457b086fa866983f2 | |
parent | bac7a5085e34338cda2af215728c5375a57ffc35 (diff) | |
download | php-git-7fa7c8a8e3f93ffef4be19047c7461eccafd2431.tar.gz |
Fixing compile and link with current cvs.
-rw-r--r-- | ext/mssql/mssql.dsp | 47 | ||||
-rw-r--r-- | ext/mssql/php_mssql.c | 199 | ||||
-rw-r--r-- | ext/mssql/php_mssql.h | 11 |
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 |