@@ -37,6 +37,9 @@ static zend_object_handlers xmlreader_object_handlers;
37
37
38
38
static HashTable xmlreader_prop_handlers ;
39
39
40
+ static zend_internal_function xmlreader_open_fn ;
41
+ static zend_internal_function xmlreader_xml_fn ;
42
+
40
43
typedef int (* xmlreader_read_int_t )(xmlTextReaderPtr reader );
41
44
typedef unsigned char * (* xmlreader_read_char_t )(xmlTextReaderPtr reader );
42
45
typedef const unsigned char * (* xmlreader_read_const_char_t )(xmlTextReaderPtr reader );
@@ -181,6 +184,25 @@ zval *xmlreader_write_property(zend_object *object, zend_string *name, zval *val
181
184
}
182
185
/* }}} */
183
186
187
+ /* {{{ */
188
+ static zend_function * xmlreader_get_method (zend_object * * obj , zend_string * name , const zval * key )
189
+ {
190
+ if (ZSTR_LEN (name ) == sizeof ("open" ) - 1
191
+ && (ZSTR_VAL (name )[0 ] == 'o' || ZSTR_VAL (name )[0 ] == 'O' )
192
+ && (ZSTR_VAL (name )[1 ] == 'p' || ZSTR_VAL (name )[1 ] == 'P' )
193
+ && (ZSTR_VAL (name )[2 ] == 'e' || ZSTR_VAL (name )[2 ] == 'E' )
194
+ && (ZSTR_VAL (name )[3 ] == 'n' || ZSTR_VAL (name )[3 ] == 'N' )) {
195
+ return (zend_function * )& xmlreader_open_fn ;
196
+ } else if (ZSTR_LEN (name ) == sizeof ("xml" ) - 1
197
+ && (ZSTR_VAL (name )[0 ] == 'x' || ZSTR_VAL (name )[0 ] == 'X' )
198
+ && (ZSTR_VAL (name )[1 ] == 'm' || ZSTR_VAL (name )[1 ] == 'M' )
199
+ && (ZSTR_VAL (name )[2 ] == 'l' || ZSTR_VAL (name )[2 ] == 'L' )) {
200
+ return (zend_function * )& xmlreader_xml_fn ;
201
+ }
202
+ return zend_std_get_method (obj , name , key );;
203
+ }
204
+ /* }}} */
205
+
184
206
/* {{{ _xmlreader_get_valid_file_path */
185
207
/* _xmlreader_get_valid_file_path and _xmlreader_get_relaxNG should be made a
186
208
common function in libxml extension as code is common to a few xml extensions */
@@ -1145,7 +1167,7 @@ static const zend_function_entry xmlreader_functions[] /* {{{ */ = {
1145
1167
PHP_ME (xmlreader , moveToElement , arginfo_class_XMLReader_moveToElement , ZEND_ACC_PUBLIC )
1146
1168
PHP_ME (xmlreader , moveToFirstAttribute , arginfo_class_XMLReader_moveToFirstAttribute , ZEND_ACC_PUBLIC )
1147
1169
PHP_ME (xmlreader , moveToNextAttribute , arginfo_class_XMLReader_moveToNextAttribute , ZEND_ACC_PUBLIC )
1148
- PHP_ME (xmlreader , open , arginfo_class_XMLReader_open , ZEND_ACC_PUBLIC )
1170
+ PHP_ME (xmlreader , open , arginfo_class_XMLReader_open , ZEND_ACC_PUBLIC | ZEND_ACC_STATIC )
1149
1171
PHP_ME (xmlreader , read , arginfo_class_XMLReader_read , ZEND_ACC_PUBLIC )
1150
1172
PHP_ME (xmlreader , next , arginfo_class_XMLReader_next , ZEND_ACC_PUBLIC )
1151
1173
PHP_ME (xmlreader , readInnerXml , arginfo_class_XMLReader_readInnerXml , ZEND_ACC_PUBLIC )
@@ -1158,7 +1180,7 @@ static const zend_function_entry xmlreader_functions[] /* {{{ */ = {
1158
1180
PHP_ME (xmlreader , setParserProperty , arginfo_class_XMLReader_setParserProperty , ZEND_ACC_PUBLIC )
1159
1181
PHP_ME (xmlreader , setRelaxNGSchema , arginfo_class_XMLReader_setRelaxNGSchema , ZEND_ACC_PUBLIC )
1160
1182
PHP_ME (xmlreader , setRelaxNGSchemaSource , arginfo_class_XMLReader_setRelaxNGSchemaSource , ZEND_ACC_PUBLIC )
1161
- PHP_ME (xmlreader , XML , arginfo_class_XMLReader_XML , ZEND_ACC_PUBLIC )
1183
+ PHP_ME (xmlreader , XML , arginfo_class_XMLReader_XML , ZEND_ACC_PUBLIC | ZEND_ACC_STATIC )
1162
1184
PHP_ME (xmlreader , expand , arginfo_class_XMLReader_expand , ZEND_ACC_PUBLIC )
1163
1185
PHP_FE_END
1164
1186
}; /* }}} */
@@ -1177,12 +1199,18 @@ PHP_MINIT_FUNCTION(xmlreader)
1177
1199
xmlreader_object_handlers .read_property = xmlreader_read_property ;
1178
1200
xmlreader_object_handlers .write_property = xmlreader_write_property ;
1179
1201
xmlreader_object_handlers .get_property_ptr_ptr = xmlreader_get_property_ptr_ptr ;
1202
+ xmlreader_object_handlers .get_method = xmlreader_get_method ;
1180
1203
xmlreader_object_handlers .clone_obj = NULL ;
1181
1204
1182
1205
INIT_CLASS_ENTRY (ce , "XMLReader" , xmlreader_functions );
1183
1206
ce .create_object = xmlreader_objects_new ;
1184
1207
xmlreader_class_entry = zend_register_internal_class (& ce );
1185
1208
1209
+ memcpy (& xmlreader_open_fn , zend_hash_str_find_ptr (& xmlreader_class_entry -> function_table , "open" , sizeof ("open" )- 1 ), sizeof (zend_internal_function ));
1210
+ xmlreader_open_fn .fn_flags &= ~ZEND_ACC_STATIC ;
1211
+ memcpy (& xmlreader_xml_fn , zend_hash_str_find_ptr (& xmlreader_class_entry -> function_table , "xml" , sizeof ("xml" )- 1 ), sizeof (zend_internal_function ));
1212
+ xmlreader_xml_fn .fn_flags &= ~ZEND_ACC_STATIC ;
1213
+
1186
1214
zend_hash_init (& xmlreader_prop_handlers , 0 , NULL , php_xmlreader_free_prop_handler , 1 );
1187
1215
xmlreader_register_prop_handler (& xmlreader_prop_handlers , "attributeCount" , xmlTextReaderAttributeCount , NULL , IS_LONG );
1188
1216
xmlreader_register_prop_handler (& xmlreader_prop_handlers , "baseURI" , NULL , xmlTextReaderConstBaseUri , IS_STRING );
0 commit comments