EnchantBroker *pbroker;
enchant_dict **dict;
unsigned int dictcnt;
- long rsrc_id;
+ zend_resource *rsrc;
} _enchant_broker;
typedef struct _dict_struct {
unsigned int id;
EnchantDict *pdict;
enchant_broker *pbroker;
- long rsrc_id;
- enchant_dict *next;
- enchant_dict *prev;
+ zend_resource *rsrc;
} _enchant_dict;
void * ud) /* {{{ */
{
zval *zdesc = (zval *) ud;
- zval *tmp_array;
+ zval tmp_array;
- MAKE_STD_ZVAL(tmp_array);
- array_init(tmp_array);
+ array_init(&tmp_array);
- add_assoc_string(tmp_array, "name", (char *)name);
- add_assoc_string(tmp_array, "desc", (char *)desc);
- add_assoc_string(tmp_array, "file", (char *)file);
+ add_assoc_string(&tmp_array, "name", (char *)name);
+ add_assoc_string(&tmp_array, "desc", (char *)desc);
+ add_assoc_string(&tmp_array, "file", (char *)file);
if (Z_TYPE_P(zdesc)!=IS_ARRAY) {
array_init(zdesc);
}
- add_next_index_zval(zdesc, tmp_array);
+ add_next_index_zval(zdesc, &tmp_array);
}
/* }}} */
const char * const provider_file, void * ud) /* {{{ */
{
zval *zdesc = (zval *) ud;
- zval *tmp_array;
+ zval tmp_array;
- MAKE_STD_ZVAL(tmp_array);
- array_init(tmp_array);
- add_assoc_string(tmp_array, "lang_tag", (char *)lang_tag);
- add_assoc_string(tmp_array, "provider_name", (char *)provider_name);
- add_assoc_string(tmp_array, "provider_desc", (char *)provider_desc);
- add_assoc_string(tmp_array, "provider_file", (char *)provider_file);
+ array_init(&tmp_array);
+ add_assoc_string(&tmp_array, "lang_tag", (char *)lang_tag);
+ add_assoc_string(&tmp_array, "provider_name", (char *)provider_name);
+ add_assoc_string(&tmp_array, "provider_desc", (char *)provider_desc);
+ add_assoc_string(&tmp_array, "provider_file", (char *)provider_file);
if (Z_TYPE_P(zdesc) != IS_ARRAY) {
array_init(zdesc);
}
- add_next_index_zval(zdesc, tmp_array);
+ add_next_index_zval(zdesc, &tmp_array);
}
/* }}} */
-static void php_enchant_broker_free(zend_rsrc_list_entry *rsrc TSRMLS_DC) /* {{{ */
+static void php_enchant_broker_free(zend_resource *rsrc TSRMLS_DC) /* {{{ */
{
if (rsrc->ptr) {
enchant_broker *broker = (enchant_broker *)rsrc->ptr;
int total;
total = broker->dictcnt-1;
do {
- zend_list_delete(broker->dict[total]->rsrc_id);
- efree(broker->dict[total]);
+ if (broker->dict[total]) {
+ enchant_dict *pdict = broker->dict[total];
+ broker->dict[total] = NULL;
+ zend_list_free(pdict->rsrc);
+ efree(pdict);
+ }
total--;
} while (total>=0);
}
}
/* }}} */
-static void php_enchant_dict_free(zend_rsrc_list_entry *rsrc TSRMLS_DC) /* {{{ */
+static void php_enchant_dict_free(zend_resource *rsrc TSRMLS_DC) /* {{{ */
{
if (rsrc->ptr) {
enchant_dict *pdict = (enchant_dict *)rsrc->ptr;
if (pdict) {
- if (pdict->pdict && pdict->pbroker) {
- enchant_broker_free_dict(pdict->pbroker->pbroker, pdict->pdict);
- if (pdict->id) {
- pdict->pbroker->dict[pdict->id-1]->next = NULL;
- }
- zend_list_delete(pdict->pbroker->rsrc_id);
+ enchant_broker *pbroker = pdict->pbroker;
+
+ if (pdict->pdict && pbroker) {
+ enchant_broker_free_dict(pbroker->pbroker, pdict->pdict);
}
+ pbroker->dict[pdict->id] = NULL;
+ efree(pdict);
+ zend_list_delete(pbroker->rsrc);
}
}
}
/* }}} */
#define PHP_ENCHANT_GET_BROKER \
- ZEND_FETCH_RESOURCE(pbroker, enchant_broker *, &broker, -1, "enchant_broker", le_enchant_broker); \
+ ZEND_FETCH_RESOURCE(pbroker, enchant_broker *, broker, -1, "enchant_broker", le_enchant_broker); \
if (!pbroker || !pbroker->pbroker) { \
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", "Resource broker invalid"); \
RETURN_FALSE; \
}
#define PHP_ENCHANT_GET_DICT \
- ZEND_FETCH_RESOURCE(pdict, enchant_dict *, &dict, -1, "enchant_dict", le_enchant_dict); \
+ ZEND_FETCH_RESOURCE(pdict, enchant_dict *, dict, -1, "enchant_dict", le_enchant_dict); \
if (!pdict || !pdict->pdict) { \
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", "Invalid dictionary resource."); \
RETURN_FALSE; \
broker->pbroker = pbroker;
broker->dict = NULL;
broker->dictcnt = 0;
- broker->rsrc_id = ZEND_REGISTER_RESOURCE(return_value, broker, le_enchant_broker);
+ broker->rsrc = ZEND_REGISTER_RESOURCE(return_value, broker, le_enchant_broker);
} else {
RETURN_FALSE;
}
}
PHP_ENCHANT_GET_BROKER;
- zend_list_delete(Z_RESVAL_P(broker));
+ zend_list_close(Z_RES_P(broker));
RETURN_TRUE;
}
/* }}} */
msg = enchant_broker_get_error(pbroker->pbroker);
if (msg) {
- RETURN_STRING((char *)msg, 1);
+ RETURN_STRING((char *)msg);
}
RETURN_FALSE;
}
dict->id = pos;
dict->pbroker = pbroker;
dict->pdict = d;
- dict->prev = pos ? pbroker->dict[pos-1] : NULL;
- dict->next = NULL;
pbroker->dict[pos] = dict;
- if (pos) {
- pbroker->dict[pos-1]->next = dict;
- }
-
- dict->rsrc_id = ZEND_REGISTER_RESOURCE(return_value, dict, le_enchant_dict);
- zend_list_addref(pbroker->rsrc_id);
+ dict->rsrc = ZEND_REGISTER_RESOURCE(return_value, dict, le_enchant_dict);
+ pbroker->rsrc->gc.refcount++;
} else {
RETURN_FALSE;
}
dict->id = pos;
dict->pbroker = pbroker;
dict->pdict = d;
- dict->prev = pos?pbroker->dict[pos-1]:NULL;
- dict->next = NULL;
pbroker->dict[pos] = dict;
- if (pos) {
- pbroker->dict[pos-1]->next = dict;
- }
- dict->rsrc_id = ZEND_REGISTER_RESOURCE(return_value, dict, le_enchant_dict);
+
+ dict->rsrc = ZEND_REGISTER_RESOURCE(return_value, dict, le_enchant_dict);
+ pbroker->rsrc->gc.refcount++;
} else {
RETURN_FALSE;
}
PHP_ENCHANT_GET_DICT;
- zend_list_delete(Z_RESVAL_P(dict));
+ zend_list_close(Z_RES_P(dict));
RETURN_TRUE;
}
/* }}} */
msg = enchant_dict_get_error(pdict->pdict);
if (msg) {
- RETURN_STRING((char *)msg, 1);
+ RETURN_STRING((char *)msg);
}
RETURN_FALSE;