@@ -56,20 +56,17 @@ typedef struct _xmlreader_prop_handler {
56
56
#define XMLREADER_LOAD_STRING 0
57
57
#define XMLREADER_LOAD_FILE 1
58
58
59
- /* {{{ xmlreader_register_prop_handler */
60
- 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 )
59
+ static void xmlreader_register_prop_handler (HashTable * prop_handler , const char * name , size_t name_len , const xmlreader_prop_handler * hnd )
61
60
{
62
- xmlreader_prop_handler hnd ;
63
- zend_string * str ;
64
-
65
- hnd .read_char_func = read_char_func ;
66
- hnd .read_int_func = read_int_func ;
67
- hnd .type = rettype ;
68
- str = zend_string_init_interned (name , strlen (name ), 1 );
69
- zend_hash_add_mem (prop_handler , str , & hnd , sizeof (xmlreader_prop_handler ));
70
- zend_string_release_ex (str , 1 );
61
+ zend_string * str = zend_string_init_interned (name , name_len , true);
62
+ zend_hash_add_new_ptr (prop_handler , str , (void * ) hnd );
63
+ zend_string_release_ex (str , true);
71
64
}
72
- /* }}} */
65
+
66
+ #define XMLREADER_REGISTER_PROP_HANDLER (prop_handler , name , prop_read_int_func , prop_read_char_func , prop_type ) do { \
67
+ static const xmlreader_prop_handler hnd = {.read_int_func = prop_read_int_func, .read_char_func = prop_read_char_func, .type = prop_type}; \
68
+ xmlreader_register_prop_handler(prop_handler, "" name, sizeof("" name) - 1, &hnd); \
69
+ } while (0)
73
70
74
71
/* {{{ xmlreader_property_reader */
75
72
static int xmlreader_property_reader (xmlreader_object * obj , xmlreader_prop_handler * hnd , zval * rv )
@@ -427,10 +424,6 @@ static void php_xmlreader_no_arg(INTERNAL_FUNCTION_PARAMETERS, xmlreader_read_in
427
424
}
428
425
/* }}} */
429
426
430
- static void php_xmlreader_free_prop_handler (zval * el ) /* {{{ */ {
431
- pefree (Z_PTR_P (el ), 1 );
432
- } /* }}} */
433
-
434
427
/* {{{ php_xmlreader_no_arg_string */
435
428
static void php_xmlreader_no_arg_string (INTERNAL_FUNCTION_PARAMETERS , xmlreader_read_char_t internal_function ) {
436
429
zval * id ;
@@ -1188,21 +1181,21 @@ PHP_MINIT_FUNCTION(xmlreader)
1188
1181
prev_zend_post_startup_cb = zend_post_startup_cb ;
1189
1182
zend_post_startup_cb = xmlreader_fixup_temporaries ;
1190
1183
1191
- zend_hash_init (& xmlreader_prop_handlers , 0 , NULL , php_xmlreader_free_prop_handler , 1 );
1192
- xmlreader_register_prop_handler (& xmlreader_prop_handlers , "attributeCount" , xmlTextReaderAttributeCount , NULL , IS_LONG );
1193
- xmlreader_register_prop_handler (& xmlreader_prop_handlers , "baseURI" , NULL , xmlTextReaderConstBaseUri , IS_STRING );
1194
- xmlreader_register_prop_handler (& xmlreader_prop_handlers , "depth" , xmlTextReaderDepth , NULL , IS_LONG );
1195
- xmlreader_register_prop_handler (& xmlreader_prop_handlers , "hasAttributes" , xmlTextReaderHasAttributes , NULL , _IS_BOOL );
1196
- xmlreader_register_prop_handler (& xmlreader_prop_handlers , "hasValue" , xmlTextReaderHasValue , NULL , _IS_BOOL );
1197
- xmlreader_register_prop_handler (& xmlreader_prop_handlers , "isDefault" , xmlTextReaderIsDefault , NULL , _IS_BOOL );
1198
- xmlreader_register_prop_handler (& xmlreader_prop_handlers , "isEmptyElement" , xmlTextReaderIsEmptyElement , NULL , _IS_BOOL );
1199
- xmlreader_register_prop_handler (& xmlreader_prop_handlers , "localName" , NULL , xmlTextReaderConstLocalName , IS_STRING );
1200
- xmlreader_register_prop_handler (& xmlreader_prop_handlers , "name" , NULL , xmlTextReaderConstName , IS_STRING );
1201
- xmlreader_register_prop_handler (& xmlreader_prop_handlers , "namespaceURI" , NULL , xmlTextReaderConstNamespaceUri , IS_STRING );
1202
- xmlreader_register_prop_handler (& xmlreader_prop_handlers , "nodeType" , xmlTextReaderNodeType , NULL , IS_LONG );
1203
- xmlreader_register_prop_handler (& xmlreader_prop_handlers , "prefix" , NULL , xmlTextReaderConstPrefix , IS_STRING );
1204
- xmlreader_register_prop_handler (& xmlreader_prop_handlers , "value" , NULL , xmlTextReaderConstValue , IS_STRING );
1205
- xmlreader_register_prop_handler (& xmlreader_prop_handlers , "xmlLang" , NULL , xmlTextReaderConstXmlLang , IS_STRING );
1184
+ zend_hash_init (& xmlreader_prop_handlers , 0 , NULL , NULL , true );
1185
+ XMLREADER_REGISTER_PROP_HANDLER (& xmlreader_prop_handlers , "attributeCount" , xmlTextReaderAttributeCount , NULL , IS_LONG );
1186
+ XMLREADER_REGISTER_PROP_HANDLER (& xmlreader_prop_handlers , "baseURI" , NULL , xmlTextReaderConstBaseUri , IS_STRING );
1187
+ XMLREADER_REGISTER_PROP_HANDLER (& xmlreader_prop_handlers , "depth" , xmlTextReaderDepth , NULL , IS_LONG );
1188
+ XMLREADER_REGISTER_PROP_HANDLER (& xmlreader_prop_handlers , "hasAttributes" , xmlTextReaderHasAttributes , NULL , _IS_BOOL );
1189
+ XMLREADER_REGISTER_PROP_HANDLER (& xmlreader_prop_handlers , "hasValue" , xmlTextReaderHasValue , NULL , _IS_BOOL );
1190
+ XMLREADER_REGISTER_PROP_HANDLER (& xmlreader_prop_handlers , "isDefault" , xmlTextReaderIsDefault , NULL , _IS_BOOL );
1191
+ XMLREADER_REGISTER_PROP_HANDLER (& xmlreader_prop_handlers , "isEmptyElement" , xmlTextReaderIsEmptyElement , NULL , _IS_BOOL );
1192
+ XMLREADER_REGISTER_PROP_HANDLER (& xmlreader_prop_handlers , "localName" , NULL , xmlTextReaderConstLocalName , IS_STRING );
1193
+ XMLREADER_REGISTER_PROP_HANDLER (& xmlreader_prop_handlers , "name" , NULL , xmlTextReaderConstName , IS_STRING );
1194
+ XMLREADER_REGISTER_PROP_HANDLER (& xmlreader_prop_handlers , "namespaceURI" , NULL , xmlTextReaderConstNamespaceUri , IS_STRING );
1195
+ XMLREADER_REGISTER_PROP_HANDLER (& xmlreader_prop_handlers , "nodeType" , xmlTextReaderNodeType , NULL , IS_LONG );
1196
+ XMLREADER_REGISTER_PROP_HANDLER (& xmlreader_prop_handlers , "prefix" , NULL , xmlTextReaderConstPrefix , IS_STRING );
1197
+ XMLREADER_REGISTER_PROP_HANDLER (& xmlreader_prop_handlers , "value" , NULL , xmlTextReaderConstValue , IS_STRING );
1198
+ XMLREADER_REGISTER_PROP_HANDLER (& xmlreader_prop_handlers , "xmlLang" , NULL , xmlTextReaderConstXmlLang , IS_STRING );
1206
1199
1207
1200
return SUCCESS ;
1208
1201
}
0 commit comments