Skip to content

Commit 5b5a3d7

Browse files
committedJul 17, 2023
Split off some methods so they can be reused in different places
1 parent a73f38f commit 5b5a3d7

File tree

1 file changed

+34
-24
lines changed

1 file changed

+34
-24
lines changed
 

‎ext/dom/element.c

+34-24
Original file line numberDiff line numberDiff line change
@@ -355,6 +355,15 @@ PHP_METHOD(DOMElement, getAttributeNames)
355355
}
356356
/* }}} end DOMElement::getAttributeNames() */
357357

358+
static xmlNodePtr dom_create_attribute(xmlNodePtr nodep, const char *name, const char* value)
359+
{
360+
if (xmlStrEqual((xmlChar *)name, (xmlChar *)"xmlns")) {
361+
return (xmlNodePtr) xmlNewNs(nodep, (xmlChar *)value, NULL);
362+
} else {
363+
return (xmlNodePtr) xmlSetProp(nodep, (xmlChar *) name, (xmlChar *)value);
364+
}
365+
}
366+
358367
/* {{{ URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-F68F082
359368
Since:
360369
*/
@@ -405,23 +414,40 @@ PHP_METHOD(DOMElement, setAttribute)
405414

406415
}
407416

408-
if (xmlStrEqual((xmlChar *)name, (xmlChar *)"xmlns")) {
409-
if (xmlNewNs(nodep, (xmlChar *)value, NULL)) {
410-
RETURN_TRUE;
411-
}
412-
} else {
413-
attr = (xmlNodePtr)xmlSetProp(nodep, (xmlChar *) name, (xmlChar *)value);
414-
}
417+
attr = dom_create_attribute(nodep, name, value);
415418
if (!attr) {
416419
zend_argument_value_error(1, "must be a valid XML attribute");
417420
RETURN_THROWS();
418421
}
422+
if (attr->type == XML_NAMESPACE_DECL) {
423+
RETURN_TRUE;
424+
}
419425

420426
DOM_RET_OBJ(attr, &ret, intern);
421427

422428
}
423429
/* }}} end dom_element_set_attribute */
424430

431+
static bool dom_remove_attribute(xmlNodePtr attrp)
432+
{
433+
ZEND_ASSERT(attrp != NULL);
434+
switch (attrp->type) {
435+
case XML_ATTRIBUTE_NODE:
436+
if (php_dom_object_get_data(attrp) == NULL) {
437+
node_list_unlink(attrp->children);
438+
xmlUnlinkNode(attrp);
439+
xmlFreeProp((xmlAttrPtr)attrp);
440+
} else {
441+
xmlUnlinkNode(attrp);
442+
}
443+
break;
444+
case XML_NAMESPACE_DECL:
445+
return false;
446+
EMPTY_SWITCH_DEFAULT_CASE();
447+
}
448+
return true;
449+
}
450+
425451
/* {{{ URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-6D6AC0F9
426452
Since:
427453
*/
@@ -450,23 +476,7 @@ PHP_METHOD(DOMElement, removeAttribute)
450476
RETURN_FALSE;
451477
}
452478

453-
switch (attrp->type) {
454-
case XML_ATTRIBUTE_NODE:
455-
if (php_dom_object_get_data(attrp) == NULL) {
456-
node_list_unlink(attrp->children);
457-
xmlUnlinkNode(attrp);
458-
xmlFreeProp((xmlAttrPtr)attrp);
459-
} else {
460-
xmlUnlinkNode(attrp);
461-
}
462-
break;
463-
case XML_NAMESPACE_DECL:
464-
RETURN_FALSE;
465-
default:
466-
break;
467-
}
468-
469-
RETURN_TRUE;
479+
RETURN_BOOL(dom_remove_attribute(attrp));
470480
}
471481
/* }}} end dom_element_remove_attribute */
472482

0 commit comments

Comments
 (0)
Please sign in to comment.