#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
-#include "enchant.h"
+#include <enchant.h>
#include "php.h"
#include "php_ini.h"
#include "ext/standard/info.h"
EnchantBroker *pbroker;
enchant_dict **dict;
unsigned int dictcnt;
- zval *rsrc_id;
+ long rsrc_id;
} _enchant_broker;
typedef struct _dict_struct {
unsigned int id;
EnchantDict *pdict;
enchant_broker *pbroker;
- zval *rsrc_id;
+ long rsrc_id;
enchant_dict *next;
enchant_dict *prev;
} _enchant_dict;
int total, tofree;
tofree = total = broker->dictcnt-1;
do {
- zend_list_delete(Z_RESVAL_P(broker->dict[total]->rsrc_id));
+ zend_list_delete(broker->dict[total]->rsrc_id);
efree(broker->dict[total]);
total--;
} while (total>=0);
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);
}
- if (pdict->id) {
- pdict->pbroker->dict[pdict->id-1]->next = NULL;
- }
+
}
}
}
*/
PHP_MINIT_FUNCTION(enchant)
{
- le_enchant_broker = zend_register_list_destructors_ex(php_enchant_broker_free, NULL, "enchant broker", module_number);
- le_enchant_dict = zend_register_list_destructors_ex(php_enchant_dict_free, NULL, "enchant dict", module_number);
+ le_enchant_broker = zend_register_list_destructors_ex(php_enchant_broker_free, NULL, "enchant_broker", module_number);
+ le_enchant_dict = zend_register_list_destructors_ex(php_enchant_dict_free, NULL, "enchant_dict", module_number);
return SUCCESS;
}
}
#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;
- ZEND_REGISTER_RESOURCE(return_value, broker, le_enchant_broker);
- broker->rsrc_id = return_value;
+ broker->rsrc_id = ZEND_REGISTER_RESOURCE(return_value, broker, le_enchant_broker);
} else {
RETURN_FALSE;
}
dict->id = pos;
dict->pbroker = pbroker;
dict->pdict = d;
- dict->rsrc_id = return_value;
dict->prev = pos ? pbroker->dict[pos-1] : NULL;
dict->next = NULL;
pbroker->dict[pos] = dict;
pbroker->dict[pos-1]->next = dict;
}
- ZEND_REGISTER_RESOURCE(return_value, dict, le_enchant_dict);
+ dict->rsrc_id = ZEND_REGISTER_RESOURCE(return_value, dict, le_enchant_dict);
+ zend_list_addref(pbroker->rsrc_id);
} else {
RETURN_FALSE;
}
dict->id = pos;
dict->pbroker = pbroker;
dict->pdict = d;
- dict->rsrc_id = return_value;
dict->prev = pos?pbroker->dict[pos-1]:NULL;
dict->next = NULL;
pbroker->dict[pos] = dict;
if (pos) {
pbroker->dict[pos-1]->next = dict;
}
- ZEND_REGISTER_RESOURCE(return_value, dict, le_enchant_dict);
+ dict->rsrc_id = ZEND_REGISTER_RESOURCE(return_value, dict, le_enchant_dict);
} else {
RETURN_FALSE;
}