#include "php_db.h"
#include "ext/standard/php_string.h"
+static int le_db;
+
#if THREAD_SAFE
DWORD DbmTls;
static int numthreads=0;
-
-typedef struct dbm_global_struct{
- int le_db;
-}dbm_global_struct;
-
-#define DBM_GLOBAL(a) dbm_globals->a
-#define DBM_TLS_VARS dbm_global_struct *dbm_globals = TlsGetValue(DbmTls);
-
-#else
-static int le_db;
-#define DBM_GLOBAL(a) a
-#define DBM_TLS_VARS
#endif
/*needed for blocking calls in windows*/
void *dbm_mutex;
-dbm_info *php_find_dbm(pval *id,HashTable *list)
+dbm_info *php_find_dbm(pval *id)
{
list_entry *le;
dbm_info *info;
int numitems, i;
int info_type;
- DBM_TLS_VARS;
+ ELS_FETCH();
if (id->type == IS_STRING) {
- numitems = zend_hash_num_elements(list);
+ numitems = zend_hash_num_elements(&EG(regular_list));
for (i=1; i<=numitems; i++) {
- if (zend_hash_index_find(list, i, (void **) &le)==FAILURE) {
+ if (zend_hash_index_find(&EG(regular_list), i, (void **) &le)==FAILURE) {
continue;
}
- if (le->type == DBM_GLOBAL(le_db)) {
+ if (le->type == le_db) {
info = (dbm_info *)(le->ptr);
if (!strcmp(info->filename, id->value.str.val)) {
return (dbm_info *)(le->ptr);
/* didn't find it as a database filename, try as a number */
convert_to_long(id);
info = zend_list_find(id->value.lval, &info_type);
- if (info_type != DBM_GLOBAL(le_db))
+ if (info_type != le_db)
return NULL;
return info;
}
pval *filename, *mode;
dbm_info *info=NULL;
int ret;
- DBM_TLS_VARS;
if (ARG_COUNT(ht)!=2 || zend_get_parameters(ht,2,&filename,&mode)==FAILURE) {
WRONG_PARAM_COUNT;
info = php_dbm_open(filename->value.str.val, mode->value.str.val);
if (info) {
- ret = zend_list_insert(info, DBM_GLOBAL(le_db));
+ ret = zend_list_insert(info, le_db);
RETURN_LONG(ret);
} else {
RETURN_FALSE;
convert_to_string(key);
convert_to_string(value);
- info = php_find_dbm(id,list);
+ info = php_find_dbm(id);
if (!info) {
php_error(E_WARNING, "not a valid database identifier %d", id->value.lval);
RETURN_FALSE;
convert_to_string(key);
convert_to_string(value);
- info = php_find_dbm(id,list);
+ info = php_find_dbm(id);
if (!info) {
php_error(E_WARNING, "not a valid database identifier %d", id->value.lval);
RETURN_FALSE;
}
convert_to_string(key);
- info = php_find_dbm(id,list);
+ info = php_find_dbm(id);
if (!info) {
php_error(E_WARNING, "not a valid database identifier %d", id->value.lval);
RETURN_FALSE;
}
convert_to_string(key);
- info = php_find_dbm(id,list);
+ info = php_find_dbm(id);
if (!info) {
php_error(E_WARNING, "not a valid database identifier %d", id->value.lval);
RETURN_FALSE;
}
convert_to_string(key);
- info = php_find_dbm(id,list);
+ info = php_find_dbm(id);
if (!info) {
php_error(E_WARNING, "not a valid database identifier %d", id->value.lval);
RETURN_FALSE;
WRONG_PARAM_COUNT;
}
- info = php_find_dbm(id,list);
+ info = php_find_dbm(id);
if (!info) {
php_error(E_WARNING, "not a valid database identifier %d", id->value.lval);
RETURN_FALSE;
}
convert_to_string(key);
- info = php_find_dbm(id,list);
+ info = php_find_dbm(id);
if (!info) {
php_error(E_WARNING, "not a valid database identifier %d", id->value.lval);
RETURN_FALSE;
}
#endif
- DBM_GLOBAL(le_db) = register_list_destructors(php_dbm_close,NULL);
+ le_db = register_list_destructors(php_dbm_close,NULL);
return SUCCESS;
}
static PHP_MSHUTDOWN_FUNCTION(db)
{
- DBM_TLS_VARS;
#ifdef THREAD_SAFE
PHP3_TLS_THREAD_FREE(dbm_globals);
PHP3_MUTEX_LOCK(dbm_mutex);
#define phpext_db_ptr NULL
#endif
-dbm_info *php_find_dbm(pval *id,HashTable *list);
+dbm_info *php_find_dbm(pval *id);
int php_dbm_close(dbm_info *info);
dbm_info *php_dbm_open(char *filename, char *mode);
int php_dbm_insert(dbm_info *info, char *key, char *value);
/* }}} */
-static LDAP * _get_ldap_link(pval **link, HashTable *list)
+static LDAP * _get_ldap_link(pval **link)
{
LDAP *ldap;
int type;
}
-static LDAPMessage * _get_ldap_result(pval **result, HashTable *list)
+static LDAPMessage * _get_ldap_result(pval **result)
{
LDAPMessage *ldap_result;
int type;
}
-static LDAPMessage * _get_ldap_result_entry(pval **result, HashTable *list)
+static LDAPMessage * _get_ldap_result_entry(pval **result)
{
LDAPMessage *ldap_result_entry;
int type;
}
-static BerElement * _get_ber_entry(pval **berp, HashTable *list)
+static BerElement * _get_ber_entry(pval **berp)
{
BerElement *ber;
int type;
break;
}
- ldap = _get_ldap_link(link, list);
+ ldap = _get_ldap_link(link);
if (ldap == NULL) RETURN_FALSE;
if (ldap_bind_s(ldap, ldap_bind_rdn, ldap_bind_pw, LDAP_AUTH_SIMPLE) != LDAP_SUCCESS) {
convert_to_long_ex(link);
- ldap = _get_ldap_link(link, list);
+ ldap = _get_ldap_link(link);
if (ldap == NULL) RETURN_FALSE;
zend_list_delete((*link)->value.lval);
ldap_base_dn = NULL;
}
- ldap = _get_ldap_link(link, list);
+ ldap = _get_ldap_link(link);
if (ldap == NULL) RETURN_FALSE;
/* Is it useful to only get the attributes ? */
WRONG_PARAM_COUNT;
}
- ldap_result = _get_ldap_result(result, list);
+ ldap_result = _get_ldap_result(result);
if (ldap_result == NULL) {
RETVAL_FALSE;
} else {
WRONG_PARAM_COUNT;
}
- ldap = _get_ldap_link(link, list);
+ ldap = _get_ldap_link(link);
if (ldap == NULL) RETURN_FALSE;
- ldap_result = _get_ldap_result(result, list);
+ ldap_result = _get_ldap_result(result);
if (ldap_result == NULL) RETURN_FALSE;
RETURN_LONG(ldap_count_entries(ldap, ldap_result));
WRONG_PARAM_COUNT;
}
- ldap = _get_ldap_link(link, list);
+ ldap = _get_ldap_link(link);
if (ldap == NULL) RETURN_FALSE;
- ldap_result = _get_ldap_result(result, list);
+ ldap_result = _get_ldap_result(result);
if (ldap_result == NULL) RETURN_FALSE;
if ((ldap_result_entry = ldap_first_entry(ldap, ldap_result)) == NULL) {
WRONG_PARAM_COUNT;
}
- ldap = _get_ldap_link(link, list);
+ ldap = _get_ldap_link(link);
if (ldap == NULL) RETURN_FALSE;
- ldap_result_entry = _get_ldap_result_entry(result_entry, list);
+ ldap_result_entry = _get_ldap_result_entry(result_entry);
if (ldap_result_entry == NULL) RETURN_FALSE;
if ((ldap_result_entry_next = ldap_next_entry(ldap, ldap_result_entry)) == NULL) {
WRONG_PARAM_COUNT;
}
- ldap = _get_ldap_link(link, list);
+ ldap = _get_ldap_link(link);
if (ldap == NULL) RETURN_FALSE;
- ldap_result = _get_ldap_result(result, list);
+ ldap_result = _get_ldap_result(result);
if (ldap_result == NULL) RETURN_FALSE;
num_entries = ldap_count_entries(ldap, ldap_result);
WRONG_PARAM_COUNT;
}
- ldap = _get_ldap_link(link,list);
+ ldap = _get_ldap_link(link);
if (ldap == NULL) RETURN_FALSE;
- ldap_result_entry = _get_ldap_result_entry(result,list);
+ ldap_result_entry = _get_ldap_result_entry(result);
if (ldap_result_entry == NULL) RETURN_FALSE;
if ((attribute = ldap_first_attribute(ldap, ldap_result_entry, &ber)) == NULL) {
WRONG_PARAM_COUNT;
}
- ldap = _get_ldap_link(link,list);
+ ldap = _get_ldap_link(link);
if (ldap == NULL) RETURN_FALSE;
- ldap_result_entry = _get_ldap_result_entry(result,list);
+ ldap_result_entry = _get_ldap_result_entry(result);
if (ldap_result_entry == NULL) RETURN_FALSE;
- ber = _get_ber_entry(berp,list);
+ ber = _get_ber_entry(berp);
if ((attribute = ldap_next_attribute(ldap, ldap_result_entry, ber)) == NULL) {
RETURN_FALSE;
WRONG_PARAM_COUNT;
}
- ldap = _get_ldap_link(link, list);
+ ldap = _get_ldap_link(link);
if (ldap == NULL) RETURN_FALSE;
- ldap_result_entry = _get_ldap_result_entry(result_entry, list);
+ ldap_result_entry = _get_ldap_result_entry(result_entry);
if (ldap_result_entry == NULL) RETURN_FALSE;
num_attrib = 0;
WRONG_PARAM_COUNT;
}
- ldap = _get_ldap_link(link, list);
+ ldap = _get_ldap_link(link);
if (ldap == NULL) RETURN_FALSE;
- ldap_result_entry = _get_ldap_result_entry(result_entry, list);
+ ldap_result_entry = _get_ldap_result_entry(result_entry);
if (ldap_result_entry == NULL) RETURN_FALSE;
convert_to_string_ex(attr);
WRONG_PARAM_COUNT;
}
- ld = _get_ldap_link(link, list);
+ ld = _get_ldap_link(link);
if (ld == NULL) RETURN_FALSE;
- entry = _get_ldap_result_entry(entryp, list);
+ entry = _get_ldap_result_entry(entryp);
if (entry == NULL) RETURN_FALSE;
text = ldap_get_dn(ld, entry);
RETURN_FALSE;
}
- ldap = _get_ldap_link(link, list);
+ ldap = _get_ldap_link(link);
if (ldap == NULL) RETURN_FALSE;
convert_to_string_ex(dn);
WRONG_PARAM_COUNT;
}
- ldap = _get_ldap_link(link, list);
+ ldap = _get_ldap_link(link);
if (ldap == NULL) RETURN_FALSE;
convert_to_string_ex(dn);
char *hashed_details;
int hashed_details_length;
int msql;
+ ELS_FETCH();
switch(ARG_COUNT(ht)) {
case 0: /* defaults */
}
/* 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;
/* create the link */
/* hash it up */
new_le.type = msql_globals.le_plink;
new_le.ptr = (void *) msql;
- if (zend_hash_update(plist, hashed_details, hashed_details_length+1, (void *) &new_le, sizeof(list_entry), NULL)==FAILURE) {
+ if (zend_hash_update(&EG(persistent_list), hashed_details, hashed_details_length+1, (void *) &new_le, sizeof(list_entry), NULL)==FAILURE) {
efree(hashed_details);
RETURN_FALSE;
}
if (msql_stat(le->ptr)==NULL) { /* the link died */
if (msql_connect(le->ptr,host,user,passwd)==NULL) {
php_error(E_WARNING,"mSQL link 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;
}
* if it doesn't, open a new msql 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;
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 (msql_globals.max_links!=-1 && msql_globals.num_links>=msql_globals.max_links) {
/* 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;
}
PHP_MINIT_FUNCTION(mysql)
{
- ELS_FETCH();
-
#ifdef ZTS
mysql_globals_id = ts_allocate_id(sizeof(php_mysql_globals), (ts_allocate_ctor) php_mysql_init_globals, NULL);
#else
MYSQL *mysql;
MySLS_FETCH();
PLS_FETCH();
+ ELS_FETCH();
if (PG(sql_safe_mode)) {
if (ARG_COUNT(ht)>0) {
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 (MySG(max_links)!=-1 && MySG(num_links)>=MySG(max_links)) {
/* hash it up */
new_le.type = le_plink;
new_le.ptr = mysql;
- if (zend_hash_update(plist, hashed_details, hashed_details_length+1, (void *) &new_le, sizeof(list_entry), NULL)==FAILURE) {
+ if (zend_hash_update(&EG(persistent_list), hashed_details, hashed_details_length+1, (void *) &new_le, sizeof(list_entry), NULL)==FAILURE) {
free(mysql);
efree(hashed_details);
RETURN_FALSE;
if (mysql_connect(le->ptr,host,user,passwd)==NULL) {
#endif
php_error(E_WARNING,"MySQL: 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;
}
* if it doesn't, open a new mysql 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;
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 (MySG(max_links)!=-1 && MySG(num_links)>=MySG(max_links)) {
/* 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;
}
/* {{{ PHP_MINIT_FUNCTION(pcre) */
static PHP_MINIT_FUNCTION(pcre)
{
- ELS_FETCH();
-
#ifdef ZTS
pcre_globals_id = ts_allocate_id(
sizeof(php_pcre_globals),
PHP_MINIT_FUNCTION(array)
{
- ELS_FETCH();
-
#ifdef ZTS
array_globals_id = ts_allocate_id(sizeof(php_array_globals), NULL, NULL);
#endif
{
#ifdef ZTS
- ELS_FETCH();
assert_globals_id = ts_allocate_id(sizeof(php_assert_globals), (ts_allocate_ctor) php_assert_init_globals, NULL);
#else
php_assert_init_globals(ASSERTLS_C);
PHP_MINIT_FUNCTION(basic)
{
- ELS_FETCH();
#ifdef ZTS
- basic_globals_id = ts_allocate_id(sizeof(php_basic_globals), (ts_allocate_ctor) basic_globals_ctor, basic_globals_dtor);
+ basic_globals_id = ts_allocate_id(sizeof(php_basic_globals), (ts_allocate_ctor) basic_globals_ctor, (ts_allocate_dtor) basic_globals_dtor);
#else
basic_globals_ctor(BLS_C);
#endif
PHP_MINIT_FUNCTION(crypt)
{
- ELS_FETCH();
-
#if PHP3_STD_DES_CRYPT
REGISTER_LONG_CONSTANT("CRYPT_SALT_LENGTH", 2, CONST_CS | CONST_PERSISTENT);
#else
zend_module_entry *module_entry,*tmp;
zend_module_entry *(*get_module)(void);
PLS_FETCH();
+ ELS_FETCH();
if (cfg_get_string("extension_dir",&PG(extension_dir))==SUCCESS
&& PG(extension_dir)
module_entry->type = type;
module_entry->module_number = zend_next_free_module();
if (module_entry->module_startup_func) {
- if (module_entry->module_startup_func(type, module_entry->module_number)==FAILURE) {
+ if (module_entry->module_startup_func(type, module_entry->module_number ELS_CC)==FAILURE) {
php_error(E_CORE_WARNING,"%s: Unable to initialize module",module_entry->name);
dlclose(handle);
RETURN_FALSE;
if (module_entry->request_startup_func) {
- if (module_entry->request_startup_func(type, module_entry->module_number)) {
+ if (module_entry->request_startup_func(type, module_entry->module_number ELS_CC)) {
php_error(E_CORE_WARNING,"%s: Unable to initialize module",module_entry->name);
dlclose(handle);
RETURN_FALSE;
void register_html_constants(INIT_FUNC_ARGS)
{
- ELS_FETCH();
REGISTER_LONG_CONSTANT("HTML_SPECIALCHARS", HTML_SPECIALCHARS, CONST_PERSISTENT|CONST_CS);
REGISTER_LONG_CONSTANT("HTML_ENTITIES", HTML_ENTITIES, CONST_PERSISTENT|CONST_CS);
}
void register_phpinfo_constants(INIT_FUNC_ARGS)
{
- ELS_FETCH();
-
REGISTER_LONG_CONSTANT("INFO_GENERAL", PHP_INFO_GENERAL, CONST_PERSISTENT|CONST_CS);
REGISTER_LONG_CONSTANT("INFO_CREDITS", PHP_INFO_CREDITS, CONST_PERSISTENT|CONST_CS);
REGISTER_LONG_CONSTANT("INFO_CONFIGURATION", PHP_INFO_CONFIGURATION, CONST_PERSISTENT|CONST_CS);
PHP_MINIT_FUNCTION(syslog)
{
- ELS_FETCH();
-
/* error levels */
REGISTER_LONG_CONSTANT("LOG_EMERG", LOG_EMERG, CONST_CS | CONST_PERSISTENT); /* system unusable */
REGISTER_LONG_CONSTANT("LOG_ALERT", LOG_ALERT, CONST_CS | CONST_PERSISTENT); /* immediate action required */
php_sybase_globals sybase_globals;
static CS_CONTEXT *context;
-static HashTable *resource_list,*resource_plist;
#define CHECK_LINK(link) { if (link==-1) { php_error(E_WARNING,"Sybase: A link to the server could not be established"); RETURN_FALSE; } }
static void _close_sybase_link(sybase_link *sybase_ptr)
{
CS_INT con_status;
+ ELS_FETCH();
sybase_ptr->valid = 0;
- /*
- this can cause crashes in the current model.
- if the resource gets destroyed via destroy_resource_list() resource_list
- will *not* be in a consistent state. thies@digicol.de
- */
- zend_hash_apply(resource_list,(int (*)(void *))_clean_invalid_results);
+ zend_hash_apply(&EG(regular_list),(int (*)(void *))_clean_invalid_results);
/* Non-persistent connections will always be connected or we wouldn't
* get here, but since we want to check the death status anyway
char *hashed_details;
int hashed_details_length;
sybase_link *sybase_ptr;
+ ELS_FETCH();
- resource_list = list;
- resource_plist = plist;
-
switch(ARG_COUNT(ht)) {
case 0: /* defaults */
host=user=passwd=NULL;
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 (sybase_globals.max_links!=-1 && sybase_globals.num_links>=sybase_globals.max_links) {
/* hash it up */
new_le.type = sybase_globals.le_plink;
new_le.ptr = sybase_ptr;
- if (zend_hash_update(plist, hashed_details, hashed_details_length+1, (void *) &new_le, sizeof(list_entry),NULL)==FAILURE) {
+ if (zend_hash_update(&EG(persistent_list), hashed_details, hashed_details_length+1, (void *) &new_le, sizeof(list_entry),NULL)==FAILURE) {
ct_close(sybase_ptr->connection, CS_UNUSED);
ct_con_drop(sybase_ptr->connection);
free(sybase_ptr);
* if it doesn't, open a new sybase 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;
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 (sybase_globals.max_links!=-1 && sybase_globals.num_links>=sybase_globals.max_links) {
/* 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) {
ct_close(sybase_ptr->connection, CS_UNUSED);
ct_con_drop(sybase_ptr->connection);
efree(sybase_ptr);
CLS_FETCH();
ELS_FETCH();
SLS_FETCH();
- PLS_FETCH();
sapi_send_headers();
php_end_ob_buffering(SG(request_info).headers_only?0:1);