Thank you. That makes sense. I attached the ".txt" version this time. Hopefully that works.
2011/5/13 Johannes Schlüter <johan...@schlueters.de> > On Fri, 2011-05-13 at 19:43 -0400, Andrew Curioso wrote: > > I attached a diff of my changes. > > This didn|T come through. Make sure it is send as text&plain *for > isntance name it .txt( > > johannes > > > > -- > PHP Internals - PHP Runtime Development Mailing List > To unsubscribe, visit: http://www.php.net/unsub.php > > -- Andrew Curioso
Index: ext/simplexml/tests/bug51615.phpt =================================================================== --- ext/simplexml/tests/bug51615.phpt (revision 310976) +++ ext/simplexml/tests/bug51615.phpt (working copy) @@ -20,7 +20,7 @@ Warning: DOMDocument::loadHTML(): error parsing attribute name in Entity, line: 1 in %s on line %d Warning: DOMDocument::loadHTML(): error parsing attribute name in Entity, line: 1 in %s on line %d -object(SimpleXMLElement)#%d (2) { +object(SimpleXMLElement)#%d (3) { ["@attributes"]=> array(2) { ["title"]=> @@ -30,6 +30,8 @@ } [0]=> string(1) "x" + [1]=> + string(1) "x" } string(0) "" string(0) "" Index: ext/simplexml/tests/034.phpt =================================================================== --- ext/simplexml/tests/034.phpt (revision 310976) +++ ext/simplexml/tests/034.phpt (working copy) @@ -1,7 +1,7 @@ --TEST-- -SimpleXML: array casting bug ---XFAIL-- -Does anyone know why? +SimpleXML: cast to array +--FAIL-- +Length of cast array does not match expected length --SKIPIF-- <?php if (!extension_loaded("simplexml")) print "skip"; ?> --FILE-- Index: ext/simplexml/simplexml.c =================================================================== --- ext/simplexml/simplexml.c (revision 310976) +++ ext/simplexml/simplexml.c (working copy) @@ -1069,7 +1069,11 @@ xmlAttrPtr attr; int namelen; int test; + char use_iter; + zval *iter_data; + use_iter = 0; + sxe = php_sxe_fetch_object(object TSRMLS_CC); if (is_debug) { @@ -1122,6 +1126,7 @@ GET_NODE(sxe, node); node = php_sxe_get_first_node(sxe, node TSRMLS_CC); + if (node && sxe->iter.type != SXE_ITER_ATTRLIST) { if (node->type == XML_ATTRIBUTE_NODE) { MAKE_STD_ZVAL(value); @@ -1129,7 +1134,17 @@ zend_hash_next_index_insert(rv, &value, sizeof(zval *), NULL); node = NULL; } else if (sxe->iter.type != SXE_ITER_CHILD) { - node = node->children; + + if ( !node->children || !node->parent || node->children->next || node->children->children || node->parent->children == node->parent->last ) { + node = node->children; + } else { + iter_data = sxe->iter.data; + sxe->iter.data = NULL; + + node = php_sxe_reset_iterator(sxe, 0 TSRMLS_CC); + + use_iter = 1; + } } while (node) { @@ -1161,12 +1176,27 @@ _get_base_node_value(sxe, node, &value, sxe->iter.nsprefix, sxe->iter.isprefix TSRMLS_CC); - sxe_properties_add(rv, name, namelen, value TSRMLS_CC); + if ( use_iter ) { + zend_hash_next_index_insert(rv, &value, sizeof(zval *), NULL); + } else { + sxe_properties_add(rv, name, namelen, value TSRMLS_CC); + } next_iter: - node = node->next; + if ( use_iter ) { + node = php_sxe_iterator_fetch(sxe, node->next, 0 TSRMLS_CC); + } else { + node = node->next; + } } } + if ( use_iter ) { + if (sxe->iter.data) { + zval_ptr_dtor(&sxe->iter.data); + } + sxe->iter.data = iter_data; + } + return rv; } /* }}} */
-- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php