CVS update: php3/dl/mssql

From: Date: Mon, 07 Sep 1998 16:47:25 +0000
Subject: CVS update: php3/dl/mssql
Groups: php.dev 
Request: Send a blank email to php-dev+get-866@lists.php.net to get a copy of this message
Date: Monday September 7, 1998 @ 12:47 Author: shane Update of /repository/php3/dl/mssql In directory asf:/u2/tmp/cvs-serv17341/dl/mssql Modified Files: mssql.c mssql.dsp php3_mssql.h Log Message: remove printf output in parser for release compiles fix big API problem in variables.c that was causing a problem in mssql module backporting mssql from 3.1. Index: php3/dl/mssql/mssql.c diff -c php3/dl/mssql/mssql.c:1.2 php3/dl/mssql/mssql.c:1.3 *** php3/dl/mssql/mssql.c:1.2 Fri Aug 14 17:46:59 1998 --- php3/dl/mssql/mssql.c Mon Sep 7 12:47:24 1998 *************** *** 32,42 **** +----------------------------------------------------------------------+ */ #ifdef THREAD_SAFE ! #include "tls.h" #endif ! #ifndef MSVC5 #include "config.h" #endif #include "php.h" --- 32,50 ---- +----------------------------------------------------------------------+ */ + #define IS_EXT_MODULE #ifdef THREAD_SAFE ! # ifndef PHP_31 ! # undef THREAD_SAFE /*no need in 3.0*/ ! # else ! # include "tls.h" ! DWORD mssqltls; ! static int numthreads=0; ! void *mssql_mutex; ! # endif #endif ! #if !(WIN32|WINNT) #include "config.h" #endif #include "php.h" *************** *** 46,53 **** --- 54,66 ---- #include "php3_mssql.h" #if HAVE_MSSQL + #define SAFE_STRING(s) ((s)?(s):"") + #if PHP_31 + #include "ext/standard/php3_string.h" + #else #include "php3_string.h" + #endif #include "php3_list.h" #if BROKEN_MSSQL_PCONNECTS *************** *** 81,116 **** php3_module_entry mssql_module_entry = { "Microsoft SQL", mssql_functions, php3_minit_mssql, php3_mshutdown_mssql, php3_rinit_mssql, php3_rshutdown_mssql, php3_info_mssql, STANDARD_MODULE_PROPERTIES - // "Microsoft SQL", mssql_functions, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, NULL }; #if COMPILE_DL DLEXPORT php3_module_entry *get_module(void) { return &mssql_module_entry; } #endif ! /* ! BOOL WINAPI DllMain(HANDLE hModule, ! DWORD ul_reason_for_call, ! LPVOID lpReserved) ! { ! ! switch( ul_reason_for_call ) { ! case DLL_PROCESS_ATTACH: ! break; ! case DLL_THREAD_ATTACH: ! break; ! case DLL_THREAD_DETACH: ! break; ! case DLL_PROCESS_DETACH: ! break; ! } ! return 1; ! } ! */ ! //THREAD_LS mssql_module php3_mssql_module; ! static HashTable *resource_list, *resource_plist; #define CHECK_LINK(link) { if (link==-1) { php3_error(E_WARNING,"MS SQL: A link to the server could not be established"); RETURN_FALSE; } } --- 94,119 ---- php3_module_entry mssql_module_entry = { "Microsoft SQL", mssql_functions, php3_minit_mssql, php3_mshutdown_mssql, php3_rinit_mssql, php3_rshutdown_mssql, php3_info_mssql, STANDARD_MODULE_PROPERTIES }; #if COMPILE_DL DLEXPORT php3_module_entry *get_module(void) { return &mssql_module_entry; } #endif ! ! #if defined(THREAD_SAFE) ! ! #define msSQL_GLOBAL(a) php3_mssql_module->a ! #define msSQL_TLS_VARS \ ! mssql_module *php3_mssql_module=TlsGetValue(mssqltls) ! ! #else ! #define msSQL_GLOBAL(a) php3_mssql_module.a ! #define msSQL_TLS_VARS mssql_module php3_mssql_module; ! #endif ! #define CHECK_LINK(link) { if (link==-1) { php3_error(E_WARNING,"MS SQL: A link to the server could not be established"); RETURN_FALSE; } } *************** *** 123,129 **** static int php3_mssql_error_handler(DBPROCESS *dbproc,int severity,int dberr, int oserr,char *dberrstr,char *oserrstr) { ! if (severity >= php3_mssql_module.min_error_severity) { php3_error(E_WARNING,"MS SQL error: %s (severity %d)",dberrstr,severity); } return INT_CANCEL; --- 126,134 ---- static int php3_mssql_error_handler(DBPROCESS *dbproc,int severity,int dberr, int oserr,char *dberrstr,char *oserrstr) { ! msSQL_TLS_VARS; ! ! if (severity >= msSQL_GLOBAL(min_error_severity)) { php3_error(E_WARNING,"MS SQL error: %s (severity %d)",dberrstr,severity); } return INT_CANCEL; *************** *** 134,151 **** int severity,char *msgtext,char *srvname, char *procname,DBUSMALLINT line) { ! if (severity >= php3_mssql_module.min_message_severity) { php3_error(E_WARNING,"MS SQL message: %s (severity %d)",msgtext,severity); } ! STR_FREE(php3_mssql_module.server_message); ! php3_mssql_module.server_message = estrdup(msgtext); return 0; } static int _clean_invalid_results(list_entry *le) { ! if (le->type == php3_mssql_module.le_result) { mssql_link *mssql_ptr = ((mssql_result *) le->ptr)->mssql_ptr; if (!mssql_ptr->valid) { --- 139,160 ---- int severity,char *msgtext,char *srvname, char *procname,DBUSMALLINT line) { ! msSQL_TLS_VARS; ! ! if (severity >= msSQL_GLOBAL(min_message_severity)) { php3_error(E_WARNING,"MS SQL message: %s (severity %d)",msgtext,severity); } ! STR_FREE(msSQL_GLOBAL(server_message)); ! msSQL_GLOBAL(server_message) = estrdup(msgtext); return 0; } static int _clean_invalid_results(list_entry *le) { ! msSQL_TLS_VARS; ! ! if (le->type == msSQL_GLOBAL(le_result)) { mssql_link *mssql_ptr = ((mssql_result *) le->ptr)->mssql_ptr; if (!mssql_ptr->valid) { *************** *** 159,169 **** static void _free_mssql_result(mssql_result *result) { int i,j; ! if (result->data) { for (i=0; i<result->num_rows; i++) { for (j=0; j<result->num_fields; j++) { ! yystype_destructor(&result->data[i][j] _INLINE_TLS); } efree(result->data[i]); } --- 168,178 ---- static void _free_mssql_result(mssql_result *result) { int i,j; ! if (result->data) { for (i=0; i<result->num_rows; i++) { for (j=0; j<result->num_fields; j++) { ! php3_yystype_destructor(&result->data[i][j]); } efree(result->data[i]); } *************** *** 183,274 **** static void _close_mssql_link(mssql_link *mssql_ptr) { mssql_ptr->valid = 0; ! _php3_hash_apply(resource_list,(int (*)(void *))_clean_invalid_results); dbclose(mssql_ptr->link); dbfreelogin(mssql_ptr->login); efree(mssql_ptr); ! php3_mssql_module.num_links--; } static void _close_mssql_plink(mssql_link *mssql_ptr) { dbclose(mssql_ptr->link); dbfreelogin(mssql_ptr->login); free(mssql_ptr); ! php3_mssql_module.num_persistent--; ! php3_mssql_module.num_links--; } int php3_minit_mssql(INIT_FUNC_ARGS) { char *interface_file; ! long compatability_mode; if (dbinit()==FAIL) { return FAILURE; } dberrhandle((DBERRHANDLE_PROC) php3_mssql_error_handler); dbmsghandle((DBMSGHANDLE_PROC) php3_mssql_message_handler); ! if (cfg_get_string("mssql.interface_file",&interface_file)==SUCCESS) { ! // dbsetifile(interface_file); } ! if (cfg_get_long("mssql.allow_persistent",&php3_mssql_module.allow_persistent)==FAILURE) { ! php3_mssql_module.allow_persistent=1; } ! if (cfg_get_long("mssql.max_persistent",&php3_mssql_module.max_persistent)==FAILURE) { ! php3_mssql_module.max_persistent=-1; } ! if (cfg_get_long("mssql.max_links",&php3_mssql_module.max_links)==FAILURE) { ! php3_mssql_module.max_links=-1; } ! if (cfg_get_long("mssql.min_error_severity",&php3_mssql_module.cfg_min_error_severity)==FAILURE) { ! php3_mssql_module.cfg_min_error_severity=10; } ! if (cfg_get_long("mssql.min_message_severity",&php3_mssql_module.cfg_min_message_severity)==FAILURE) { ! php3_mssql_module.cfg_min_message_severity=10; } if (cfg_get_long("mssql.compatability_mode",&compatability_mode)==FAILURE) { compatability_mode = 0; } if (compatability_mode) { ! php3_mssql_module.get_column_content = php3_mssql_get_column_content_with_type; } else { ! php3_mssql_module.get_column_content = php3_mssql_get_column_content_without_type; } - php3_mssql_module.num_persistent=0; - php3_mssql_module.le_link = register_list_destructors(_close_mssql_link,NULL); - php3_mssql_module.le_plink = register_list_destructors(NULL,_close_mssql_plink); - php3_mssql_module.le_result = register_list_destructors(_free_mssql_result,NULL); - return SUCCESS; } int php3_rinit_mssql(INIT_FUNC_ARGS) { ! php3_mssql_module.default_link=-1; ! php3_mssql_module.num_links = php3_mssql_module.num_persistent; ! php3_mssql_module.appname = "PHP"; ! php3_mssql_module.server_message = empty_string; ! php3_mssql_module.min_error_severity = php3_mssql_module.cfg_min_error_severity; ! php3_mssql_module.min_message_severity = php3_mssql_module.cfg_min_message_severity; return SUCCESS; } int php3_mshutdown_mssql(void) { dbexit(); return SUCCESS; } int php3_rshutdown_mssql(void) { ! STR_FREE(php3_mssql_module.server_message); return SUCCESS; } --- 192,331 ---- static void _close_mssql_link(mssql_link *mssql_ptr) { + msSQL_TLS_VARS; + mssql_ptr->valid = 0; ! _php3_hash_apply(msSQL_GLOBAL(resource_list),(int (*)(void *))_clean_invalid_results); dbclose(mssql_ptr->link); dbfreelogin(mssql_ptr->login); efree(mssql_ptr); ! msSQL_GLOBAL(num_links--); } static void _close_mssql_plink(mssql_link *mssql_ptr) { + msSQL_TLS_VARS; + dbclose(mssql_ptr->link); dbfreelogin(mssql_ptr->login); free(mssql_ptr); ! msSQL_GLOBAL(num_persistent--); ! msSQL_GLOBAL(num_links--); } int php3_minit_mssql(INIT_FUNC_ARGS) { char *interface_file; ! long compatability_mode,connecttimeout; ! #if defined(THREAD_SAFE) ! mssql_module *php3_mssql_module; ! PHP3_MUTEX_ALLOC(mssql_mutex); ! PHP3_MUTEX_LOCK(mssql_mutex); ! numthreads++; ! if (numthreads==1){ ! if (!PHP3_TLS_PROC_STARTUP(mssqltls)){ ! PHP3_MUTEX_UNLOCK(mssql_mutex); ! PHP3_MUTEX_FREE(mssql_mutex); ! return FAILURE; ! } ! } ! PHP3_MUTEX_UNLOCK(mssql_mutex); ! if(!PHP3_TLS_THREAD_INIT(mssqltls,php3_mssql_module,mssql_module)){ ! PHP3_MUTEX_FREE(mssql_mutex); ! return FAILURE; ! } ! #endif if (dbinit()==FAIL) { return FAILURE; } dberrhandle((DBERRHANDLE_PROC) php3_mssql_error_handler); dbmsghandle((DBMSGHANDLE_PROC) php3_mssql_message_handler); ! if (cfg_get_string("mssql.interface_file",&interface_file)==SUCCESS) { ! //dbsetifile(interface_file); } ! if (cfg_get_long("mssql.allow_persistent",&msSQL_GLOBAL(allow_persistent))==FAILURE) { ! msSQL_GLOBAL(allow_persistent)=1; } ! if (cfg_get_long("mssql.max_persistent",&msSQL_GLOBAL(max_persistent))==FAILURE) { ! msSQL_GLOBAL(max_persistent)=-1; } ! if (cfg_get_long("mssql.max_links",&msSQL_GLOBAL(max_links))==FAILURE) { ! msSQL_GLOBAL(max_links)=-1; } ! if (cfg_get_long("mssql.min_error_severity",&msSQL_GLOBAL(cfg_min_error_severity))==FAILURE) { ! msSQL_GLOBAL(cfg_min_error_severity)=10; } ! if (cfg_get_long("mssql.min_message_severity",&msSQL_GLOBAL(cfg_min_message_severity))==FAILURE) { ! msSQL_GLOBAL(cfg_min_message_severity)=10; } if (cfg_get_long("mssql.compatability_mode",&compatability_mode)==FAILURE) { compatability_mode = 0; } + if (cfg_get_long("mssql.connect_timeout",&connecttimeout)==FAILURE) { + connecttimeout = 5; + } + if (cfg_get_long("magic_quotes_runtime",&msSQL_GLOBAL(magic_quotes_runtime))==FAILURE) { + msSQL_GLOBAL(magic_quotes_runtime) = 0; + } if (compatability_mode) { ! msSQL_GLOBAL(get_column_content) = php3_mssql_get_column_content_with_type; } else { ! msSQL_GLOBAL(get_column_content) = php3_mssql_get_column_content_without_type; } + /* set a minimum timeout, and exclude infinite timeouts */ + if(connecttimeout<1)connecttimeout=1; + dbsetlogintime(connecttimeout); + + msSQL_GLOBAL(num_persistent)=0; + msSQL_GLOBAL(le_link) = register_list_destructors(_close_mssql_link,NULL); + msSQL_GLOBAL(le_plink) = register_list_destructors(NULL,_close_mssql_plink); + msSQL_GLOBAL(le_result) = register_list_destructors(_free_mssql_result,NULL); return SUCCESS; } int php3_rinit_mssql(INIT_FUNC_ARGS) { ! msSQL_TLS_VARS; ! ! msSQL_GLOBAL(default_link)=-1; ! msSQL_GLOBAL(num_links) = msSQL_GLOBAL(num_persistent); ! msSQL_GLOBAL(appname) = "PHP"; ! msSQL_GLOBAL(server_message) = empty_string; ! msSQL_GLOBAL(min_error_severity) = msSQL_GLOBAL(cfg_min_error_severity); ! msSQL_GLOBAL(min_message_severity) = msSQL_GLOBAL(cfg_min_message_severity); return SUCCESS; } int php3_mshutdown_mssql(void) { + msSQL_TLS_VARS; + #ifdef THREAD_SAFE + PHP3_TLS_THREAD_FREE(php3_mssql_module); + PHP3_MUTEX_LOCK(mssql_mutex); + numthreads--; + if (numthreads<1) { + PHP3_TLS_PROC_SHUTDOWN(mssqltls); + PHP3_MUTEX_UNLOCK(mssql_mutex); + PHP3_MUTEX_FREE(mssql_mutex); + return SUCCESS; + } + PHP3_MUTEX_UNLOCK(mssql_mutex); + #endif dbexit(); return SUCCESS; } int php3_rshutdown_mssql(void) { ! msSQL_TLS_VARS; ! ! STR_FREE(msSQL_GLOBAL(server_message)); return SUCCESS; } *************** *** 278,293 **** char *hashed_details; int hashed_details_length; mssql_link mssql,*mssql_ptr; ! resource_list = list; ! resource_plist = plist; switch(ARG_COUNT(ht)) { case 0: /* defaults */ host=user=passwd=NULL; - hashed_details_length=6+3; - hashed_details = (char *) emalloc(hashed_details_length+1); - strcpy(hashed_details,"mssql___"); break; case 1: { pval *yyhost; --- 335,349 ---- char *hashed_details; int hashed_details_length; mssql_link mssql,*mssql_ptr; + list_entry *le; + msSQL_TLS_VARS; ! msSQL_GLOBAL(resource_list) = list; ! msSQL_GLOBAL(resource_plist) = plist; switch(ARG_COUNT(ht)) { case 0: /* defaults */ host=user=passwd=NULL; break; case 1: { pval *yyhost; *************** *** 298,306 **** convert_to_string(yyhost); host = yyhost->value.str.val; user=passwd=NULL; - hashed_details_length = yyhost->value.str.len+6+3; - hashed_details = (char *) emalloc(hashed_details_length+1); - sprintf(hashed_details,"mssql_%s__",yyhost->value.str.val); } break; case 2: { --- 354,359 ---- *************** *** 314,322 **** host = yyhost->value.str.val; user = yyuser->value.str.val; passwd=NULL; - hashed_details_length = yyhost->value.str.len+yyuser->value.str.len+6+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: { --- 367,372 ---- *************** *** 331,345 **** 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+6+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: WRONG_PARAM_COUNT; break; } /* set a DBLOGIN record */ --- 381,395 ---- host = yyhost->value.str.val; user = yyuser->value.str.val; passwd = yypasswd->value.str.val; } break; default: WRONG_PARAM_COUNT; 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); + sprintf(hashed_details,"mssql_%s_%s_%s",SAFE_STRING(host), SAFE_STRING(user), SAFE_STRING(passwd)); /* set a DBLOGIN record */ *************** *** 354,384 **** if (passwd) { DBSETLPWD(mssql.login,passwd); } ! DBSETLAPP(mssql.login,php3_mssql_module.appname); mssql.valid = 1; DBSETLVERSION(mssql.login, DBVER60); // DBSETLTIME(mssql.login, TIMEOUT_INFINITE); ! ! if (!php3_mssql_module.allow_persistent) { persistent=0; } if (persistent) { - list_entry *le; /* try to find if we already have this link in our persistent list */ ! if (_php3_hash_find(plist, hashed_details, hashed_details_length+1, (void **) &le)==FAILURE) { /* we don't */ list_entry new_le; ! if (php3_mssql_module.max_links!=-1 && php3_mssql_module.num_links>=php3_mssql_module.max_links) { ! php3_error(E_WARNING,"MS SQL: Too many open links (%d)",php3_mssql_module.num_links); efree(hashed_details); dbfreelogin(mssql.login); RETURN_FALSE; } ! if (php3_mssql_module.max_persistent!=-1 && php3_mssql_module.num_persistent>=php3_mssql_module.max_persistent) { ! php3_error(E_WARNING,"MS SQL: Too many open persistent links (%d)",php3_mssql_module.num_persistent); efree(hashed_details); dbfreelogin(mssql.login); RETURN_FALSE; --- 404,433 ---- if (passwd) { DBSETLPWD(mssql.login,passwd); } ! DBSETLAPP(mssql.login,msSQL_GLOBAL(appname)); mssql.valid = 1; DBSETLVERSION(mssql.login, DBVER60); // DBSETLTIME(mssql.login, TIMEOUT_INFINITE); ! if (!msSQL_GLOBAL(allow_persistent)) { persistent=0; } if (persistent) { /* try to find if we already have this link in our persistent list */ ! if (_php3_hash_find(plist, hashed_details, hashed_details_length+1, ! (void **) &le)==FAILURE) { /* we don't */ list_entry new_le; ! if (msSQL_GLOBAL(max_links)!=-1 && msSQL_GLOBAL(num_links)>=msSQL_GLOBAL(max_links)) { ! php3_error(E_WARNING,"MS SQL: Too many open links (%d)",msSQL_GLOBAL(num_links)); efree(hashed_details); dbfreelogin(mssql.login); RETURN_FALSE; } ! if (msSQL_GLOBAL(max_persistent)!=-1 && msSQL_GLOBAL(num_persistent)>=msSQL_GLOBAL(max_persistent)) { ! php3_error(E_WARNING,"MS SQL: Too many open persistent links (%d)",msSQL_GLOBAL(num_persistent)); efree(hashed_details); dbfreelogin(mssql.login); RETURN_FALSE; *************** *** 402,408 **** /* hash it up */ mssql_ptr = (mssql_link *) malloc(sizeof(mssql_link)); memcpy(mssql_ptr,&mssql,sizeof(mssql_link)); ! new_le.type = php3_mssql_module.le_plink; new_le.ptr = mssql_ptr; if (_php3_hash_update(plist, hashed_details, hashed_details_length+1, (void *) &new_le, sizeof(list_entry),NULL)==FAILURE) { free(mssql_ptr); --- 451,457 ---- /* hash it up */ mssql_ptr = (mssql_link *) malloc(sizeof(mssql_link)); memcpy(mssql_ptr,&mssql,sizeof(mssql_link)); ! new_le.type = msSQL_GLOBAL(le_plink); new_le.ptr = mssql_ptr; if (_php3_hash_update(plist, hashed_details, hashed_details_length+1, (void *) &new_le, sizeof(list_entry),NULL)==FAILURE) { free(mssql_ptr); *************** *** 410,419 **** dbfreelogin(mssql.login); RETURN_FALSE; } ! php3_mssql_module.num_persistent++; ! php3_mssql_module.num_links++; } else { /* we do */ ! if (le->type != php3_mssql_module.le_plink) { #if BROKEN_MSSQL_PCONNECTS log_error("PHP/MS SQL: Hashed persistent link is not a MS SQL link!",php3_rqst->server); #endif --- 459,468 ---- dbfreelogin(mssql.login); RETURN_FALSE; } ! msSQL_GLOBAL(num_persistent++); ! msSQL_GLOBAL(num_links++); } else { /* we do */ ! if (le->type != msSQL_GLOBAL(le_plink)) { #if BROKEN_MSSQL_PCONNECTS log_error("PHP/MS SQL: Hashed persistent link is not a MS SQL link!",php3_rqst->server); #endif *************** *** 431,437 **** #if BROKEN_MSSQL_PCONNECTS log_error("PHP/MS SQL: Unable to reconnect!",php3_rqst->server); #endif ! /*php3_error(E_WARNING,"MS SQL: Link to server lost, unable to reconnect");*/ _php3_hash_del(plist, hashed_details, hashed_details_length+1); efree(hashed_details); RETURN_FALSE; --- 480,486 ---- #if BROKEN_MSSQL_PCONNECTS log_error("PHP/MS SQL: Unable to reconnect!",php3_rqst->server); #endif ! php3_error(E_WARNING,"MS SQL: Link to server lost, unable to reconnect"); _php3_hash_del(plist, hashed_details, hashed_details_length+1); efree(hashed_details); RETURN_FALSE; *************** *** 450,456 **** } } } ! return_value->value.lval = php3_list_insert(mssql_ptr,php3_mssql_module.le_plink); return_value->type = IS_LONG; } else { /* non persistent */ list_entry *index_ptr,new_index_ptr; --- 499,505 ---- } } } ! return_value->value.lval = php3_list_insert(mssql_ptr,msSQL_GLOBAL(le_plink)); return_value->type = IS_LONG; } else { /* non persistent */ list_entry *index_ptr,new_index_ptr; *************** *** 464,476 **** int type,link; void *ptr; if (index_ptr->type != le_index_ptr) { RETURN_FALSE; } link = (int) index_ptr->ptr; ptr = php3_list_find(link,&type); /* check if the link is still there */ ! if (ptr && (type==php3_mssql_module.le_link || type==php3_mssql_module.le_plink)) { ! return_value->value.lval = php3_mssql_module.default_link = link; return_value->type = IS_LONG; efree(hashed_details); return; --- 513,529 ---- int type,link; void *ptr; + #ifdef THREAD_SAFE + if (index_ptr->type != _php3_le_index_ptr()) { + #else if (index_ptr->type != le_index_ptr) { + #endif RETURN_FALSE; } link = (int) index_ptr->ptr; ptr = php3_list_find(link,&type); /* check if the link is still there */ ! if (ptr && (type==msSQL_GLOBAL(le_link) || type==msSQL_GLOBAL(le_plink))) { ! return_value->value.lval = msSQL_GLOBAL(default_link) = link; return_value->type = IS_LONG; efree(hashed_details); return; *************** *** 478,485 **** _php3_hash_del(list,hashed_details,hashed_details_length+1); } } ! if (php3_mssql_module.max_links!=-1 && php3_mssql_module.num_links>=php3_mssql_module.max_links) { ! php3_error(E_WARNING,"MS SQL: Too many open links (%d)",php3_mssql_module.num_links); efree(hashed_details); RETURN_FALSE; } --- 531,538 ---- _php3_hash_del(list,hashed_details,hashed_details_length+1); } } ! if (msSQL_GLOBAL(max_links)!=-1 && msSQL_GLOBAL(num_links)>=msSQL_GLOBAL(max_links)) { ! php3_error(E_WARNING,"MS SQL: Too many open links (%d)",msSQL_GLOBAL(num_links)); efree(hashed_details); RETURN_FALSE; } *************** *** 501,555 **** /* add it to the list */ mssql_ptr = (mssql_link *) emalloc(sizeof(mssql_link)); memcpy(mssql_ptr,&mssql,sizeof(mssql_link)); ! return_value->value.lval = php3_list_insert(mssql_ptr,php3_mssql_module.le_link); return_value->type = IS_LONG; /* add it to the hash */ new_index_ptr.ptr = (void *) return_value->value.lval; new_index_ptr.type = le_index_ptr; if (_php3_hash_update(list,hashed_details,hashed_details_length+1,(void *) &new_index_ptr, sizeof(list_entry),NULL)==FAILURE) { efree(hashed_details); RETURN_FALSE; } ! php3_mssql_module.num_links++; } efree(hashed_details); ! php3_mssql_module.default_link=return_value->value.lval; } static int php3_mssql_get_default_link(INTERNAL_FUNCTION_PARAMETERS) { ! if (php3_mssql_module.default_link==-1) { /* no link opened yet, implicitly open one */ HashTable dummy; _php3_hash_init(&dummy,0,NULL,NULL,0); php3_mssql_do_connect(&dummy,return_value,list,plist,0); _php3_hash_destroy(&dummy); } ! return php3_mssql_module.default_link; } ! DLEXPORT void php3_mssql_connect(INTERNAL_FUNCTION_PARAMETERS) { php3_mssql_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU,0); } ! DLEXPORT void php3_mssql_pconnect(INTERNAL_FUNCTION_PARAMETERS) { php3_mssql_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU,1); } ! DLEXPORT void php3_mssql_close(INTERNAL_FUNCTION_PARAMETERS) { pval *mssql_link_index; int id,type; switch (ARG_COUNT(ht)) { case 0: ! id = php3_mssql_module.default_link; break; case 1: if (getParameters(ht, 1, &mssql_link_index)==FAILURE) { --- 554,616 ---- /* add it to the list */ mssql_ptr = (mssql_link *) emalloc(sizeof(mssql_link)); memcpy(mssql_ptr,&mssql,sizeof(mssql_link)); ! return_value->value.lval = php3_list_insert(mssql_ptr,msSQL_GLOBAL(le_link)); return_value->type = IS_LONG; /* add it to the hash */ new_index_ptr.ptr = (void *) return_value->value.lval; + #ifdef THREAD_SAFE + new_index_ptr.type = _php3_le_index_ptr(); + #else new_index_ptr.type = le_index_ptr; + #endif if (_php3_hash_update(list,hashed_details,hashed_details_length+1,(void *) &new_index_ptr, sizeof(list_entry),NULL)==FAILURE) { efree(hashed_details); RETURN_FALSE; } ! msSQL_GLOBAL(num_links++); } efree(hashed_details); ! msSQL_GLOBAL(default_link)=return_value->value.lval; } static int php3_mssql_get_default_link(INTERNAL_FUNCTION_PARAMETERS) { ! msSQL_TLS_VARS; ! ! if (msSQL_GLOBAL(default_link)==-1) { /* no link opened yet, implicitly open one */ HashTable dummy; _php3_hash_init(&dummy,0,NULL,NULL,0); php3_mssql_do_connect(&dummy,return_value,list,plist,0); _php3_hash_destroy(&dummy); } ! return msSQL_GLOBAL(default_link); } ! void php3_mssql_connect(INTERNAL_FUNCTION_PARAMETERS) { php3_mssql_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU,0); } ! void php3_mssql_pconnect(INTERNAL_FUNCTION_PARAMETERS) { php3_mssql_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU,1); } ! void php3_mssql_close(INTERNAL_FUNCTION_PARAMETERS) { pval *mssql_link_index; int id,type; + msSQL_TLS_VARS; + switch (ARG_COUNT(ht)) { case 0: ! id = msSQL_GLOBAL(default_link); break; case 1: if (getParameters(ht, 1, &mssql_link_index)==FAILURE) { *************** *** 564,570 **** } php3_list_find(id,&type); ! if (type!=php3_mssql_module.le_link && type!=php3_mssql_module.le_plink) { php3_error(E_WARNING,"%d is not a MS SQL link index",id); RETURN_FALSE; } --- 625,631 ---- } php3_list_find(id,&type); ! if (type!=msSQL_GLOBAL(le_link) && type!=msSQL_GLOBAL(le_plink)) { php3_error(E_WARNING,"%d is not a MS SQL link index",id); RETURN_FALSE; } *************** *** 574,584 **** } ! DLEXPORT void php3_mssql_select_db(INTERNAL_FUNCTION_PARAMETERS) { pval *db,*mssql_link_index; int id,type; mssql_link *mssql_ptr; switch(ARG_COUNT(ht)) { case 1: --- 635,647 ---- } ! void php3_mssql_select_db(INTERNAL_FUNCTION_PARAMETERS) { pval *db,*mssql_link_index; int id,type; mssql_link *mssql_ptr; + msSQL_TLS_VARS; + switch(ARG_COUNT(ht)) { case 1: *************** *** 602,608 **** CHECK_LINK(id); mssql_ptr = (mssql_link *) php3_list_find(id,&type); ! if (type!=php3_mssql_module.le_link && type!=php3_mssql_module.le_plink) { php3_error(E_WARNING,"%d is not a MS SQL link index",id); RETURN_FALSE; } --- 665,671 ---- CHECK_LINK(id); mssql_ptr = (mssql_link *) php3_list_find(id,&type); ! if (type!=msSQL_GLOBAL(le_link) && type!=msSQL_GLOBAL(le_plink)) { php3_error(E_WARNING,"%d is not a MS SQL link index",id); RETURN_FALSE; } *************** *** 690,700 **** return; } if (dbwillconvert(coltype(offset),SQLCHAR)) { ! char *res_buf; int res_length = dbdatlen(mssql_ptr->link,offset); register char *p; ! res_buf = (char *) emalloc(res_length+1); memset(res_buf, ' ', res_length+1); dbconvert(NULL,coltype(offset),dbdata(mssql_ptr->link,offset), res_length,SQLCHAR,res_buf,-1); --- 753,763 ---- return; } if (dbwillconvert(coltype(offset),SQLCHAR)) { ! unsigned char *res_buf; int res_length = dbdatlen(mssql_ptr->link,offset); register char *p; ! res_buf = (unsigned char *) emalloc(res_length+1); memset(res_buf, ' ', res_length+1); dbconvert(NULL,coltype(offset),dbdata(mssql_ptr->link,offset), res_length,SQLCHAR,res_buf,-1); *************** *** 704,710 **** p--; res_length--; } ! *(++p) = 0; /* put a trailing NULL */ result->value.str.len = res_length; result->value.str.val = res_buf; --- 767,773 ---- p--; res_length--; } ! *(p) = '\0'; /* put a trailing NULL */ result->value.str.len = res_length; result->value.str.val = res_buf; *************** *** 716,722 **** } ! DLEXPORT void php3_mssql_query(INTERNAL_FUNCTION_PARAMETERS) { pval *query,*mssql_link_index; int id,type,retvalue; --- 779,785 ---- } ! void php3_mssql_query(INTERNAL_FUNCTION_PARAMETERS) { pval *query,*mssql_link_index; int id,type,retvalue; *************** *** 726,738 **** int blocks_initialized=1; int i,j; int *column_types; switch(ARG_COUNT(ht)) { case 1: if (getParameters(ht, 1, &query)==FAILURE) { RETURN_FALSE; } ! id = php3_mssql_module.default_link; break; case 2: if (getParameters(ht, 2, &query, &mssql_link_index)==FAILURE) { --- 789,803 ---- int blocks_initialized=1; int i,j; int *column_types; + msSQL_TLS_VARS; + switch(ARG_COUNT(ht)) { case 1: if (getParameters(ht, 1, &query)==FAILURE) { RETURN_FALSE; } ! id = msSQL_GLOBAL(default_link); break; case 2: if (getParameters(ht, 2, &query, &mssql_link_index)==FAILURE) { *************** *** 747,764 **** } mssql_ptr = (mssql_link *) php3_list_find(id,&type); ! if (type!=php3_mssql_module.le_link && type!=php3_mssql_module.le_plink) { php3_error(E_WARNING,"%d is not a MS SQL link index",id); RETURN_FALSE; } convert_to_string(query); if (dbcmd(mssql_ptr->link,query->value.str.val)==FAIL) { ! /*php3_error(E_WARNING,"MS SQL: Unable to set query");*/ RETURN_FALSE; } if (dbsqlexec(mssql_ptr->link)==FAIL || dbresults(mssql_ptr->link)==FAIL) { ! /*php3_error(E_WARNING,"MS SQL: Query failed");*/ RETURN_FALSE; } --- 812,829 ---- } mssql_ptr = (mssql_link *) php3_list_find(id,&type); ! if (type!=msSQL_GLOBAL(le_link) && type!=msSQL_GLOBAL(le_plink)) { php3_error(E_WARNING,"%d is not a MS SQL link index",id); RETURN_FALSE; } convert_to_string(query); if (dbcmd(mssql_ptr->link,query->value.str.val)==FAIL) { ! php3_error(E_WARNING,"MS SQL: Unable to set query"); RETURN_FALSE; } if (dbsqlexec(mssql_ptr->link)==FAIL || dbresults(mssql_ptr->link)==FAIL) { ! php3_error(E_WARNING,"MS SQL: Query failed"); RETURN_FALSE; } *************** *** 797,803 **** } result->data[i] = (pval *) emalloc(sizeof(pval)*num_fields); for (j=1; j<=num_fields; j++) { ! php3_mssql_module.get_column_content(mssql_ptr, j, &result->data[i][j-1], column_types[j-1]); } retvalue=dbnextrow(mssql_ptr->link); dbclrbuf(mssql_ptr->link,DBLASTROW(mssql_ptr->link)-1); --- 862,868 ---- } result->data[i] = (pval *) emalloc(sizeof(pval)*num_fields); for (j=1; j<=num_fields; j++) { ! msSQL_GLOBAL(get_column_content(mssql_ptr, j, &result->data[i][j-1], column_types[j-1])); } retvalue=dbnextrow(mssql_ptr->link); dbclrbuf(mssql_ptr->link,DBLASTROW(mssql_ptr->link)-1); *************** *** 845,860 **** } } efree(column_types); ! return_value->value.lval = php3_list_insert(result,php3_mssql_module.le_result); return_value->type = IS_LONG; } ! DLEXPORT void php3_mssql_free_result(INTERNAL_FUNCTION_PARAMETERS) { pval *mssql_result_index; mssql_result *result; int type; if (ARG_COUNT(ht)!=1 || getParameters(ht, 1, &mssql_result_index)==FAILURE) { WRONG_PARAM_COUNT; --- 910,927 ---- } } efree(column_types); ! return_value->value.lval = php3_list_insert(result,msSQL_GLOBAL(le_result)); return_value->type = IS_LONG; } ! void php3_mssql_free_result(INTERNAL_FUNCTION_PARAMETERS) { pval *mssql_result_index; mssql_result *result; int type; + msSQL_TLS_VARS; + if (ARG_COUNT(ht)!=1 || getParameters(ht, 1, &mssql_result_index)==FAILURE) { WRONG_PARAM_COUNT; *************** *** 866,872 **** } result = (mssql_result *) php3_list_find(mssql_result_index->value.lval,&type); ! if (type!=php3_mssql_module.le_result) { // php3_error(E_WARNING,"%d is not a MS SQL result index",mssql_result_index->value.lval); RETURN_FALSE; } --- 933,939 ---- } result = (mssql_result *) php3_list_find(mssql_result_index->value.lval,&type); ! if (type!=msSQL_GLOBAL(le_result)) { // php3_error(E_WARNING,"%d is not a MS SQL result index",mssql_result_index->value.lval); RETURN_FALSE; } *************** *** 875,891 **** } ! DLEXPORT void php3_mssql_get_last_message(INTERNAL_FUNCTION_PARAMETERS) { ! RETURN_STRING(php3_mssql_module.server_message,1); } ! DLEXPORT void php3_mssql_num_rows(INTERNAL_FUNCTION_PARAMETERS) { pval *result_index; int type,id; mssql_result *result; if (ARG_COUNT(ht)!=1 || getParameters(ht, 1, &result_index)==FAILURE) { WRONG_PARAM_COUNT; --- 942,962 ---- } ! void php3_mssql_get_last_message(INTERNAL_FUNCTION_PARAMETERS) { ! msSQL_TLS_VARS; ! ! RETURN_STRING(msSQL_GLOBAL(server_message),1); } ! void php3_mssql_num_rows(INTERNAL_FUNCTION_PARAMETERS) { pval *result_index; int type,id; mssql_result *result; + msSQL_TLS_VARS; + if (ARG_COUNT(ht)!=1 || getParameters(ht, 1, &result_index)==FAILURE) { WRONG_PARAM_COUNT; *************** *** 895,901 **** id = result_index->value.lval; result = (mssql_result *) php3_list_find(id,&type); ! if (type!=php3_mssql_module.le_result) { php3_error(E_WARNING,"%d is not a MS SQL result index",id); RETURN_FALSE; } --- 966,972 ---- id = result_index->value.lval; result = (mssql_result *) php3_list_find(id,&type); ! if (type!=msSQL_GLOBAL(le_result)) { php3_error(E_WARNING,"%d is not a MS SQL result index",id); RETURN_FALSE; } *************** *** 905,915 **** } ! DLEXPORT void php3_mssql_num_fields(INTERNAL_FUNCTION_PARAMETERS) { pval *result_index; int type,id; mssql_result *result; if (ARG_COUNT(ht)!=1 || getParameters(ht, 1, &result_index)==FAILURE) { WRONG_PARAM_COUNT; --- 976,988 ---- } ! void php3_mssql_num_fields(INTERNAL_FUNCTION_PARAMETERS) { pval *result_index; int type,id; mssql_result *result; + msSQL_TLS_VARS; + if (ARG_COUNT(ht)!=1 || getParameters(ht, 1, &result_index)==FAILURE) { WRONG_PARAM_COUNT; *************** *** 919,925 **** id = result_index->value.lval; result = (mssql_result *) php3_list_find(id,&type); ! if (type!=php3_mssql_module.le_result) { php3_error(E_WARNING,"%d is not a MS SQL result index",id); RETURN_FALSE; } --- 992,998 ---- id = result_index->value.lval; result = (mssql_result *) php3_list_find(id,&type); ! if (type!=msSQL_GLOBAL(le_result)) { php3_error(E_WARNING,"%d is not a MS SQL result index",id); RETURN_FALSE; } *************** *** 929,941 **** } ! DLEXPORT void php3_mssql_fetch_row(INTERNAL_FUNCTION_PARAMETERS) { pval *mssql_result_index; int type,i,id; mssql_result *result; pval field_content; if (ARG_COUNT(ht)!=1 || getParameters(ht, 1, &mssql_result_index)==FAILURE) { WRONG_PARAM_COUNT; } --- 1002,1016 ---- } ! void php3_mssql_fetch_row(INTERNAL_FUNCTION_PARAMETERS) { pval *mssql_result_index; int type,i,id; mssql_result *result; pval field_content; + msSQL_TLS_VARS; + if (ARG_COUNT(ht)!=1 || getParameters(ht, 1, &mssql_result_index)==FAILURE) { WRONG_PARAM_COUNT; } *************** *** 944,950 **** id = mssql_result_index->value.lval; result = (mssql_result *) php3_list_find(id,&type); ! if (type!=php3_mssql_module.le_result) { php3_error(E_WARNING,"%d is not a MS SQL result index",id); RETURN_FALSE; } --- 1019,1025 ---- id = mssql_result_index->value.lval; result = (mssql_result *) php3_list_find(id,&type); ! if (type!=msSQL_GLOBAL(le_result)) { php3_error(E_WARNING,"%d is not a MS SQL result index",id); RETURN_FALSE; } *************** *** 970,975 **** --- 1045,1052 ---- int type; int i; pval *yystype_ptr,tmp; + msSQL_TLS_VARS; + if (ARG_COUNT(ht)!=1 || getParameters(ht, 1, &mssql_result_index)==FAILURE) { WRONG_PARAM_COUNT; *************** *** 978,984 **** convert_to_long(mssql_result_index); result = (mssql_result *) php3_list_find(mssql_result_index->value.lval,&type); ! if (type!=php3_mssql_module.le_result) { php3_error(E_WARNING,"%d is not a MS SQL result index",mssql_result_index->value.lval); RETURN_FALSE; } --- 1055,1061 ---- convert_to_long(mssql_result_index); result = (mssql_result *) php3_list_find(mssql_result_index->value.lval,&type); ! if (type!=msSQL_GLOBAL(le_result)) { php3_error(E_WARNING,"%d is not a MS SQL result index",mssql_result_index->value.lval); RETURN_FALSE; } *************** *** 994,1000 **** for (i=0; i<result->num_fields; i++) { tmp = result->data[result->cur_row][i]; yystype_copy_constructor(&tmp); ! if (php3_ini.magic_quotes_runtime && tmp.type == IS_STRING) { tmp.value.str.val = _php3_addslashes(tmp.value.str.val,tmp.value.str.len,&tmp.value.str.len,1); } _php3_hash_index_update(return_value->value.ht, i, (void *) &tmp, sizeof(pval), (void **) &yystype_ptr); --- 1071,1077 ---- for (i=0; i<result->num_fields; i++) { tmp = result->data[result->cur_row][i]; yystype_copy_constructor(&tmp); ! if (msSQL_GLOBAL(magic_quotes_runtime) && tmp.type == IS_STRING) { tmp.value.str.val = _php3_addslashes(tmp.value.str.val,tmp.value.str.len,&tmp.value.str.len,1); } _php3_hash_index_update(return_value->value.ht, i, (void *) &tmp, sizeof(pval), (void **) &yystype_ptr); *************** *** 1004,1010 **** } ! DLEXPORT void php3_mssql_fetch_object(INTERNAL_FUNCTION_PARAMETERS) { php3_mssql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU); if (return_value->type==IS_ARRAY) { --- 1081,1087 ---- } ! void php3_mssql_fetch_object(INTERNAL_FUNCTION_PARAMETERS) { php3_mssql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU); if (return_value->type==IS_ARRAY) { *************** *** 1013,1029 **** } ! DLEXPORT void php3_mssql_fetch_array(INTERNAL_FUNCTION_PARAMETERS) { php3_mssql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU); } ! DLEXPORT void php3_mssql_data_seek(INTERNAL_FUNCTION_PARAMETERS) { pval *mssql_result_index,*offset; int type,id; mssql_result *result; if (ARG_COUNT(ht)!=2 || getParameters(ht, 2, &mssql_result_index, &offset)==FAILURE) { WRONG_PARAM_COUNT; } --- 1090,1108 ---- } ! void php3_mssql_fetch_array(INTERNAL_FUNCTION_PARAMETERS) { php3_mssql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU); } ! void php3_mssql_data_seek(INTERNAL_FUNCTION_PARAMETERS) { pval *mssql_result_index,*offset; int type,id; mssql_result *result; + msSQL_TLS_VARS; + if (ARG_COUNT(ht)!=2 || getParameters(ht, 2, &mssql_result_index, &offset)==FAILURE) { WRONG_PARAM_COUNT; } *************** *** 1032,1038 **** id = mssql_result_index->value.lval; result = (mssql_result *) php3_list_find(id,&type); ! if (type!=php3_mssql_module.le_result) { php3_error(E_WARNING,"%d is not a MS SQL result index",id); RETURN_FALSE; } --- 1111,1117 ---- id = mssql_result_index->value.lval; result = (mssql_result *) php3_list_find(id,&type); ! if (type!=msSQL_GLOBAL(le_result)) { php3_error(E_WARNING,"%d is not a MS SQL result index",id); RETURN_FALSE; } *************** *** 1099,1104 **** --- 1178,1185 ---- pval *mssql_result_index,*offset; int type,id,field_offset; mssql_result *result; + msSQL_TLS_VARS; + switch (ARG_COUNT(ht)) { case 1: *************** *** 1123,1129 **** id = mssql_result_index->value.lval; result = (mssql_result *) php3_list_find(id,&type); ! if (type!=php3_mssql_module.le_result) { php3_error(E_WARNING,"%d is not a MS SQL result index",id); RETURN_FALSE; } --- 1204,1210 ---- id = mssql_result_index->value.lval; result = (mssql_result *) php3_list_find(id,&type); ! if (type!=msSQL_GLOBAL(le_result)) { php3_error(E_WARNING,"%d is not a MS SQL result index",id); RETURN_FALSE; } *************** *** 1155,1161 **** --- 1236,1244 ---- pval *mssql_result_index,*offset; int type,id,field_offset; mssql_result *result; + msSQL_TLS_VARS; + switch (ARG_COUNT(ht)) { case 1: if (getParameters(ht, 1, &mssql_result_index)==FAILURE) { *************** *** 1179,1185 **** id = mssql_result_index->value.lval; result = (mssql_result *) php3_list_find(id,&type); ! if (type!=php3_mssql_module.le_result) { php3_error(E_WARNING,"%d is not a MS SQL result index",id); RETURN_FALSE; } --- 1262,1268 ---- id = mssql_result_index->value.lval; result = (mssql_result *) php3_list_find(id,&type); ! if (type!=msSQL_GLOBAL(le_result)) { php3_error(E_WARNING,"%d is not a MS SQL result index",id); RETURN_FALSE; } *************** *** 1205,1210 **** --- 1288,1295 ---- pval *mssql_result_index,*offset; int type,id,field_offset; mssql_result *result; + msSQL_TLS_VARS; + switch (ARG_COUNT(ht)) { case 1: *************** *** 1229,1235 **** id = mssql_result_index->value.lval; result = (mssql_result *) php3_list_find(id,&type); ! if (type!=php3_mssql_module.le_result) { php3_error(E_WARNING,"%d is not a MS SQL result index",id); RETURN_FALSE; } --- 1314,1320 ---- id = mssql_result_index->value.lval; result = (mssql_result *) php3_list_find(id,&type); ! if (type!=msSQL_GLOBAL(le_result)) { php3_error(E_WARNING,"%d is not a MS SQL result index",id); RETURN_FALSE; } *************** *** 1256,1261 **** --- 1341,1348 ---- pval *mssql_result_index,*offset; int type,id,field_offset; mssql_result *result; + msSQL_TLS_VARS; + switch (ARG_COUNT(ht)) { case 1: *************** *** 1280,1286 **** id = mssql_result_index->value.lval; result = (mssql_result *) php3_list_find(id,&type); ! if (type!=php3_mssql_module.le_result) { php3_error(E_WARNING,"%d is not a MS SQL result index",id); RETURN_FALSE; } --- 1367,1373 ---- id = mssql_result_index->value.lval; result = (mssql_result *) php3_list_find(id,&type); ! if (type!=msSQL_GLOBAL(le_result)) { php3_error(E_WARNING,"%d is not a MS SQL result index",id); RETURN_FALSE; } *************** *** 1302,1313 **** return_value->type = IS_STRING; } ! DLEXPORT void php3_mssql_field_seek(INTERNAL_FUNCTION_PARAMETERS) { pval *mssql_result_index,*offset; int type,id,field_offset; mssql_result *result; if (ARG_COUNT(ht)!=2 || getParameters(ht, 2, &mssql_result_index, &offset)==FAILURE) { WRONG_PARAM_COUNT; } --- 1389,1402 ---- return_value->type = IS_STRING; } ! void php3_mssql_field_seek(INTERNAL_FUNCTION_PARAMETERS) { pval *mssql_result_index,*offset; int type,id,field_offset; mssql_result *result; + msSQL_TLS_VARS; + if (ARG_COUNT(ht)!=2 || getParameters(ht, 2, &mssql_result_index, &offset)==FAILURE) { WRONG_PARAM_COUNT; } *************** *** 1316,1322 **** id = mssql_result_index->value.lval; result = (mssql_result *) php3_list_find(id,&type); ! if (type!=php3_mssql_module.le_result) { php3_error(E_WARNING,"%d is not a MS SQL result index",id); RETURN_FALSE; } --- 1405,1411 ---- id = mssql_result_index->value.lval; result = (mssql_result *) php3_list_find(id,&type); ! if (type!=msSQL_GLOBAL(le_result)) { php3_error(E_WARNING,"%d is not a MS SQL result index",id); RETURN_FALSE; } *************** *** 1334,1345 **** } ! DLEXPORT void php3_mssql_result(INTERNAL_FUNCTION_PARAMETERS) { pval *row, *field, *mssql_result_index; int id,type,field_offset=0; mssql_result *result; ! if (ARG_COUNT(ht)!=3 || getParameters(ht, 3, &mssql_result_index, &row, &field)==FAILURE) { WRONG_PARAM_COUNT; --- 1423,1435 ---- } ! void php3_mssql_result(INTERNAL_FUNCTION_PARAMETERS) { pval *row, *field, *mssql_result_index; int id,type,field_offset=0; mssql_result *result; ! msSQL_TLS_VARS; ! if (ARG_COUNT(ht)!=3 || getParameters(ht, 3, &mssql_result_index, &row, &field)==FAILURE) { WRONG_PARAM_COUNT; *************** *** 1349,1355 **** id = mssql_result_index->value.lval; result = (mssql_result *) php3_list_find(id,&type); ! if (type!=php3_mssql_module.le_result) { php3_error(E_WARNING,"%d is not a MS SQL result index",id); RETURN_FALSE; } --- 1439,1445 ---- id = mssql_result_index->value.lval; result = (mssql_result *) php3_list_find(id,&type); ! if (type!=msSQL_GLOBAL(le_result)) { php3_error(E_WARNING,"%d is not a MS SQL result index",id); RETURN_FALSE; } *************** *** 1391,1410 **** } ! DLEXPORT void php3_info_mssql(void) { char maxp[16],maxl[16]; ! if (php3_mssql_module.max_persistent==-1) { strcpy(maxp,"Unlimited"); } else { ! snprintf(maxp,15,"%ld",php3_mssql_module.max_persistent); maxp[15]=0; } ! if (php3_mssql_module.max_links==-1) { strcpy(maxl,"Unlimited"); } else { ! snprintf(maxl,15,"%ld",php3_mssql_module.max_links); maxl[15]=0; } php3_printf("<table cellpadding=5>" --- 1481,1502 ---- } ! void php3_info_mssql(void) { char maxp[16],maxl[16]; + msSQL_TLS_VARS; + ! if (msSQL_GLOBAL(max_persistent==-1)) { strcpy(maxp,"Unlimited"); } else { ! snprintf(maxp,15,"%ld",msSQL_GLOBAL(max_persistent)); maxp[15]=0; } ! if (msSQL_GLOBAL(max_links==-1)) { strcpy(maxl,"Unlimited"); } else { ! snprintf(maxl,15,"%ld",msSQL_GLOBAL(max_links)); maxl[15]=0; } php3_printf("<table cellpadding=5>" *************** *** 1414,1448 **** "<tr><td>Application name:</td><td>%s</td></tr>\n" "<tr><td valign=\"top\" width=\"20%%\">Client API information:</td><td><pre>%s</pre></td></tr>\n" "</table>\n", ! (php3_mssql_module.allow_persistent?"Yes":"No"), ! php3_mssql_module.num_persistent,maxp, ! php3_mssql_module.num_links,maxl, ! php3_mssql_module.appname, "MSSQL 6.5"); } ! DLEXPORT void php3_mssql_min_error_severity(INTERNAL_FUNCTION_PARAMETERS) { pval *severity; if (ARG_COUNT(ht)!=1 || getParameters(ht, 1, &severity)==FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(severity); ! php3_mssql_module.min_error_severity = severity->value.lval; } ! DLEXPORT void php3_mssql_min_message_severity(INTERNAL_FUNCTION_PARAMETERS) { pval *severity; if (ARG_COUNT(ht)!=1 || getParameters(ht, 1, &severity)==FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(severity); ! php3_mssql_module.min_message_severity = severity->value.lval; } #endif --- 1506,1544 ---- "<tr><td>Application name:</td><td>%s</td></tr>\n" "<tr><td valign=\"top\" width=\"20%%\">Client API information:</td><td><pre>%s</pre></td></tr>\n" "</table>\n", ! (msSQL_GLOBAL(allow_persistent)?"Yes":"No"), ! msSQL_GLOBAL(num_persistent),maxp, ! msSQL_GLOBAL(num_links),maxl, ! msSQL_GLOBAL(appname), "MSSQL 6.5"); } ! void php3_mssql_min_error_severity(INTERNAL_FUNCTION_PARAMETERS) { pval *severity; + msSQL_TLS_VARS; + if (ARG_COUNT(ht)!=1 || getParameters(ht, 1, &severity)==FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(severity); ! msSQL_GLOBAL(min_error_severity) = severity->value.lval; } ! void php3_mssql_min_message_severity(INTERNAL_FUNCTION_PARAMETERS) { pval *severity; + msSQL_TLS_VARS; + if (ARG_COUNT(ht)!=1 || getParameters(ht, 1, &severity)==FAILURE) { WRONG_PARAM_COUNT; } convert_to_long(severity); ! msSQL_GLOBAL(min_message_severity) = severity->value.lval; } #endif Index: php3/dl/mssql/mssql.dsp diff -c php3/dl/mssql/mssql.dsp:1.5 php3/dl/mssql/mssql.dsp:1.6 *** php3/dl/mssql/mssql.dsp:1.5 Fri Aug 14 17:57:46 1998 --- php3/dl/mssql/mssql.dsp Mon Sep 7 12:47:25 1998 *************** *** 63,70 **** # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "Debug" ! # 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" /YX /FD /c --- 63,70 ---- # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "c:\php3" ! # PROP Intermediate_Dir "c:\php3" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c Index: php3/dl/mssql/php3_mssql.h diff -c php3/dl/mssql/php3_mssql.h:1.1 php3/dl/mssql/php3_mssql.h:1.2 *** php3/dl/mssql/php3_mssql.h:1.1 Mon Aug 10 14:54:12 1998 --- php3/dl/mssql/php3_mssql.h Mon Sep 7 12:47:25 1998 *************** *** 28,34 **** */ ! /* $Id: php3_mssql.h,v 1.1 1998/08/10 18:54:12 fmk Exp $ */ #ifndef _PHP3_MSSQL_H #define _PHP3_MSSQL_H --- 28,34 ---- */ ! /* $Id: php3_mssql.h,v 1.2 1998/09/07 16:47:25 shane Exp $ */ #ifndef _PHP3_MSSQL_H #define _PHP3_MSSQL_H *************** *** 40,79 **** #if HAVE_MSSQL ! //extern php3_module_entry mssql_module_entry; ! //#define mssql_module_ptr &mssql_module_entry ! #ifdef THREAD_SAFE ! php3_globals_struct *php3_globals; ! #endif ! #include <phpdl.h> int php3_minit_mssql(INIT_FUNC_ARGS); int php3_rinit_mssql(INIT_FUNC_ARGS); int php3_mshutdown_mssql(void); int php3_rshutdown_mssql(void); ! DLEXPORT void php3_info_mssql(void); ! DLEXPORT void php3_mssql_connect(INTERNAL_FUNCTION_PARAMETERS); ! DLEXPORT void php3_mssql_pconnect(INTERNAL_FUNCTION_PARAMETERS); ! DLEXPORT void php3_mssql_close(INTERNAL_FUNCTION_PARAMETERS); ! DLEXPORT void php3_mssql_select_db(INTERNAL_FUNCTION_PARAMETERS); ! DLEXPORT void php3_mssql_query(INTERNAL_FUNCTION_PARAMETERS); ! DLEXPORT void php3_mssql_free_result(INTERNAL_FUNCTION_PARAMETERS); ! DLEXPORT void php3_mssql_get_last_message(INTERNAL_FUNCTION_PARAMETERS); ! DLEXPORT void php3_mssql_num_rows(INTERNAL_FUNCTION_PARAMETERS); ! DLEXPORT void php3_mssql_num_fields(INTERNAL_FUNCTION_PARAMETERS); ! DLEXPORT void php3_mssql_fetch_field(INTERNAL_FUNCTION_PARAMETERS); ! DLEXPORT void php3_mssql_fetch_row(INTERNAL_FUNCTION_PARAMETERS); ! DLEXPORT void php3_mssql_fetch_array(INTERNAL_FUNCTION_PARAMETERS); ! DLEXPORT void php3_mssql_fetch_object(INTERNAL_FUNCTION_PARAMETERS); ! DLEXPORT void php3_mssql_field_length(INTERNAL_FUNCTION_PARAMETERS); ! DLEXPORT void php3_mssql_field_name(INTERNAL_FUNCTION_PARAMETERS); ! DLEXPORT void php3_mssql_field_type(INTERNAL_FUNCTION_PARAMETERS); ! DLEXPORT void php3_mssql_data_seek(INTERNAL_FUNCTION_PARAMETERS); ! DLEXPORT void php3_mssql_field_seek(INTERNAL_FUNCTION_PARAMETERS); ! DLEXPORT void php3_mssql_result(INTERNAL_FUNCTION_PARAMETERS); ! DLEXPORT void php3_mssql_min_error_severity(INTERNAL_FUNCTION_PARAMETERS); ! DLEXPORT void php3_mssql_min_message_severity(INTERNAL_FUNCTION_PARAMETERS); /* void php3_mssql_db_query(INTERNAL_FUNCTION_PARAMETERS); --- 40,76 ---- #if HAVE_MSSQL ! extern php3_module_entry mssql_module_entry; ! #define mssql_module_ptr &mssql_module_entry ! #include "phpdl.h" int php3_minit_mssql(INIT_FUNC_ARGS); int php3_rinit_mssql(INIT_FUNC_ARGS); int php3_mshutdown_mssql(void); int php3_rshutdown_mssql(void); ! void php3_info_mssql(void); ! void php3_mssql_connect(INTERNAL_FUNCTION_PARAMETERS); ! void php3_mssql_pconnect(INTERNAL_FUNCTION_PARAMETERS); ! void php3_mssql_close(INTERNAL_FUNCTION_PARAMETERS); ! void php3_mssql_select_db(INTERNAL_FUNCTION_PARAMETERS); ! void php3_mssql_query(INTERNAL_FUNCTION_PARAMETERS); ! void php3_mssql_free_result(INTERNAL_FUNCTION_PARAMETERS); ! void php3_mssql_get_last_message(INTERNAL_FUNCTION_PARAMETERS); ! void php3_mssql_num_rows(INTERNAL_FUNCTION_PARAMETERS); ! void php3_mssql_num_fields(INTERNAL_FUNCTION_PARAMETERS); ! void php3_mssql_fetch_field(INTERNAL_FUNCTION_PARAMETERS); ! void php3_mssql_fetch_row(INTERNAL_FUNCTION_PARAMETERS); ! void php3_mssql_fetch_array(INTERNAL_FUNCTION_PARAMETERS); ! void php3_mssql_fetch_object(INTERNAL_FUNCTION_PARAMETERS); ! void php3_mssql_field_length(INTERNAL_FUNCTION_PARAMETERS); ! void php3_mssql_field_name(INTERNAL_FUNCTION_PARAMETERS); ! void php3_mssql_field_type(INTERNAL_FUNCTION_PARAMETERS); ! void php3_mssql_data_seek(INTERNAL_FUNCTION_PARAMETERS); ! void php3_mssql_field_seek(INTERNAL_FUNCTION_PARAMETERS); ! void php3_mssql_result(INTERNAL_FUNCTION_PARAMETERS); ! void php3_mssql_min_error_severity(INTERNAL_FUNCTION_PARAMETERS); ! void php3_mssql_min_message_severity(INTERNAL_FUNCTION_PARAMETERS); /* void php3_mssql_db_query(INTERNAL_FUNCTION_PARAMETERS); *************** *** 95,102 **** #define anyintcol(j) (coltype(j)==SQLINT4?intcol(j):(coltype(j)==SQLINT2?smallintcol(j):tinyintcol(j))) #define charcol(i) ((DBCHAR *) dbdata(mssql_ptr->link,i)) #define floatcol(i) ((float) *(DBFLT8 *) dbdata(mssql_ptr->link,i)) ! typedef struct mssql_link_struct mssql_link; typedef struct { long default_link; --- 92,104 ---- #define anyintcol(j) (coltype(j)==SQLINT4?intcol(j):(coltype(j)==SQLINT2?smallintcol(j):tinyintcol(j))) #define charcol(i) ((DBCHAR *) dbdata(mssql_ptr->link,i)) #define floatcol(i) ((float) *(DBFLT8 *) dbdata(mssql_ptr->link,i)) + ! typedef struct mssql_link_struct { ! LOGINREC *login; ! DBPROCESS *link; ! int valid; ! }mssql_link; typedef struct { long default_link; *************** *** 106,122 **** 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; void (*get_column_content)(mssql_link *mssql_ptr,int offset,pval *result,int column_type); } mssql_module; - struct mssql_link_struct { - LOGINREC *login; - DBPROCESS *link; - int valid; - }; - #define MSSQL_ROWS_BLOCK 128 typedef struct { --- 108,120 ---- char *appname; char *server_message; int le_link,le_plink,le_result; + int magic_quotes_runtime; long min_error_severity,min_message_severity; long cfg_min_error_severity,cfg_min_message_severity; void (*get_column_content)(mssql_link *mssql_ptr,int offset,pval *result,int column_type); + HashTable *resource_list, *resource_plist; } mssql_module; #define MSSQL_ROWS_BLOCK 128 typedef struct { *************** *** 133,140 **** int num_rows,num_fields; } mssql_result; ! extern mssql_module php3_mssql_module; #else --- 131,139 ---- int num_rows,num_fields; } mssql_result; ! #ifndef THREAD_SAFE extern mssql_module php3_mssql_module; + #endif #else -- PHP Development Mailing List http://www.php.net/ To unsubscribe send an empty message to php-dev-unsubscribe@lists.php.net For help: php-dev-help@lists.php.net

« previous php.dev (#866) next »