static inline zend_long *pthreads_get_guard(zend_object *zobj, zval *member) /* {{{ */ { HashTable *guards; zend_long stub, *guard; zval tmp; ZEND_ASSERT(GC_FLAGS(zobj) & IS_OBJ_USE_GUARDS); if (GC_FLAGS(zobj) & IS_OBJ_HAS_GUARDS) { guards = Z_PTR(zobj->properties_table[zobj->ce->default_properties_count]); ZEND_ASSERT(guards != NULL); if (Z_TYPE_P(member) == IS_LONG) { if ((guard = (zend_long *)zend_hash_index_find_ptr(guards, Z_LVAL_P(member))) != NULL) { return guard; } } else { if ((guard = (zend_long *)zend_hash_find_ptr(guards, Z_STR_P(member))) != NULL) { return guard; } } } else { ALLOC_HASHTABLE(guards); zend_hash_init(guards, 8, NULL, pthreads_guard_dtor, 0); ZVAL_PTR(&tmp, guards); Z_PTR(zobj->properties_table[zobj->ce->default_properties_count]) = guards; GC_FLAGS(zobj) |= IS_OBJ_HAS_GUARDS; } stub = 0; if (Z_TYPE_P(member) == IS_LONG) { return (zend_long *)zend_hash_index_add_mem(guards, Z_LVAL_P(member), &stub, sizeof(zend_ulong)); } else return (zend_long *)zend_hash_add_mem(guards, Z_STR_P(member), &stub, sizeof(zend_ulong)); }
/* {{{ void mysqli_add_property(HashTable *h, char *pname, mysqli_read_t r_func, mysqli_write_t w_func) */ void mysqli_add_property(HashTable *h, const char *pname, size_t pname_len, mysqli_read_t r_func, mysqli_write_t w_func) { mysqli_prop_handler p; p.name = zend_string_init(pname, pname_len, 1); p.read_func = (r_func) ? r_func : mysqli_read_na; p.write_func = (w_func) ? w_func : mysqli_write_na; zend_hash_add_mem(h, p.name, &p, sizeof(mysqli_prop_handler)); zend_string_release(p.name); }
/* {{{ xmlreader_register_prop_handler */ static void xmlreader_register_prop_handler(HashTable *prop_handler, char *name, xmlreader_read_int_t read_int_func, xmlreader_read_const_char_t read_char_func, int rettype) { xmlreader_prop_handler hnd; zend_string *str; hnd.read_char_func = read_char_func; hnd.read_int_func = read_int_func; hnd.type = rettype; str = zend_string_init_interned(name, strlen(name), 1); zend_hash_add_mem(prop_handler, str, &hnd, sizeof(xmlreader_prop_handler)); zend_string_release_ex(str, 1); }