@@ -110,6 +110,40 @@ static int xmlreader_property_reader(xmlreader_object *obj, xmlreader_prop_handl
110
110
}
111
111
/* }}} */
112
112
113
+ /* {{{ xmlreader_get_property_ptr_ptr */
114
+ zval * * xmlreader_get_property_ptr_ptr (zval * object , zval * member TSRMLS_DC )
115
+ {
116
+ xmlreader_object * obj ;
117
+ zval tmp_member ;
118
+ zval * * retval = NULL ;
119
+ xmlreader_prop_handler * hnd ;
120
+ zend_object_handlers * std_hnd ;
121
+ int ret = FAILURE ;
122
+
123
+ if (member -> type != IS_STRING ) {
124
+ tmp_member = * member ;
125
+ zval_copy_ctor (& tmp_member );
126
+ convert_to_string (& tmp_member );
127
+ member = & tmp_member ;
128
+ }
129
+
130
+ obj = (xmlreader_object * )zend_objects_get_address (object TSRMLS_CC );
131
+
132
+ if (obj -> prop_handler != NULL ) {
133
+ ret = zend_hash_find (obj -> prop_handler , Z_STRVAL_P (member ), Z_STRLEN_P (member )+ 1 , (void * * ) & hnd );
134
+ }
135
+ if (ret == FAILURE ) {
136
+ std_hnd = zend_get_std_object_handlers ();
137
+ retval = std_hnd -> get_property_ptr_ptr (object , member TSRMLS_CC );
138
+ }
139
+
140
+ if (member == & tmp_member ) {
141
+ zval_dtor (member );
142
+ }
143
+ return retval ;
144
+ }
145
+ /* }}} */
146
+
113
147
/* {{{ xmlreader_read_property */
114
148
zval * xmlreader_read_property (zval * object , zval * member , int type TSRMLS_DC )
115
149
{
@@ -1098,7 +1132,7 @@ PHP_MINIT_FUNCTION(xmlreader)
1098
1132
memcpy (& xmlreader_object_handlers , zend_get_std_object_handlers (), sizeof (zend_object_handlers ));
1099
1133
xmlreader_object_handlers .read_property = xmlreader_read_property ;
1100
1134
xmlreader_object_handlers .write_property = xmlreader_write_property ;
1101
- xmlreader_object_handlers .get_property_ptr_ptr = NULL ;
1135
+ xmlreader_object_handlers .get_property_ptr_ptr = xmlreader_get_property_ptr_ptr ;
1102
1136
1103
1137
INIT_CLASS_ENTRY (ce , "XMLReader" , xmlreader_functions );
1104
1138
ce .create_object = xmlreader_objects_new ;
0 commit comments