PHP  
 PHP: Test and Code Coverage Analysis
downloads | QA | documentation | faq | getting help | mailing lists | reporting bugs | php.net sites | links | my php.net 
 

LCOV - code coverage report
Current view: top level - ext/dom - namednodemap.c (source / functions) Hit Total Coverage
Test: PHP Code Coverage Lines: 67 113 59.3 %
Date: 2019-05-06 Functions: 4 9 44.4 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*
       2             :    +----------------------------------------------------------------------+
       3             :    | PHP Version 7                                                        |
       4             :    +----------------------------------------------------------------------+
       5             :    | Copyright (c) The PHP Group                                          |
       6             :    +----------------------------------------------------------------------+
       7             :    | This source file is subject to version 3.01 of the PHP license,      |
       8             :    | that is bundled with this package in the file LICENSE, and is        |
       9             :    | available through the world-wide-web at the following url:           |
      10             :    | http://www.php.net/license/3_01.txt                                  |
      11             :    | If you did not receive a copy of the PHP license and are unable to   |
      12             :    | obtain it through the world-wide-web, please send a note to          |
      13             :    | license@php.net so we can mail you a copy immediately.               |
      14             :    +----------------------------------------------------------------------+
      15             :    | Authors: Christian Stocker <chregu@php.net>                          |
      16             :    |          Rob Richards <rrichards@php.net>                            |
      17             :    +----------------------------------------------------------------------+
      18             : */
      19             : 
      20             : #ifdef HAVE_CONFIG_H
      21             : #include "config.h"
      22             : #endif
      23             : 
      24             : #include "php.h"
      25             : #if HAVE_LIBXML && HAVE_DOM
      26             : #include "php_dom.h"
      27             : 
      28             : /* {{{ arginfo */
      29             : ZEND_BEGIN_ARG_INFO_EX(arginfo_dom_namednodemap_get_named_item, 0, 0, 1)
      30             :         ZEND_ARG_INFO(0, name)
      31             : ZEND_END_ARG_INFO();
      32             : 
      33             : ZEND_BEGIN_ARG_INFO_EX(arginfo_dom_namednodemap_set_named_item, 0, 0, 1)
      34             :         ZEND_ARG_OBJ_INFO(0, arg, DOMNode, 0)
      35             : ZEND_END_ARG_INFO();
      36             : 
      37             : ZEND_BEGIN_ARG_INFO_EX(arginfo_dom_namednodemap_remove_named_item, 0, 0, 0)
      38             :         ZEND_ARG_INFO(0, name)
      39             : ZEND_END_ARG_INFO();
      40             : 
      41             : ZEND_BEGIN_ARG_INFO_EX(arginfo_dom_namednodemap_item, 0, 0, 0)
      42             :         ZEND_ARG_INFO(0, index)
      43             : ZEND_END_ARG_INFO();
      44             : 
      45             : ZEND_BEGIN_ARG_INFO_EX(arginfo_dom_namednodemap_get_named_item_ns, 0, 0, 0)
      46             :         ZEND_ARG_INFO(0, namespaceURI)
      47             :         ZEND_ARG_INFO(0, localName)
      48             : ZEND_END_ARG_INFO();
      49             : 
      50             : ZEND_BEGIN_ARG_INFO_EX(arginfo_dom_namednodemap_set_named_item_ns, 0, 0, 0)
      51             :         ZEND_ARG_OBJ_INFO(0, arg, DOMNode, 0)
      52             : ZEND_END_ARG_INFO();
      53             : 
      54             : ZEND_BEGIN_ARG_INFO_EX(arginfo_dom_namednodemap_remove_named_item_ns, 0, 0, 0)
      55             :         ZEND_ARG_INFO(0, namespaceURI)
      56             :         ZEND_ARG_INFO(0, localName)
      57             : ZEND_END_ARG_INFO();
      58             : 
      59             : ZEND_BEGIN_ARG_INFO_EX(arginfo_dom_namednodemap_count, 0, 0, 0)
      60             : ZEND_END_ARG_INFO();
      61             : /* }}} */
      62             : 
      63             : /*
      64             : * class DOMNamedNodeMap
      65             : *
      66             : * URL: https://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1780488922
      67             : * Since:
      68             : */
      69             : 
      70             : const zend_function_entry php_dom_namednodemap_class_functions[] = { /* {{{ */
      71             :         PHP_FALIAS(getNamedItem, dom_namednodemap_get_named_item, arginfo_dom_namednodemap_get_named_item)
      72             :         PHP_FALIAS(setNamedItem, dom_namednodemap_set_named_item, arginfo_dom_namednodemap_set_named_item)
      73             :         PHP_FALIAS(removeNamedItem, dom_namednodemap_remove_named_item, arginfo_dom_namednodemap_remove_named_item)
      74             :         PHP_FALIAS(item, dom_namednodemap_item, arginfo_dom_namednodemap_item)
      75             :         PHP_FALIAS(getNamedItemNS, dom_namednodemap_get_named_item_ns, arginfo_dom_namednodemap_get_named_item_ns)
      76             :         PHP_FALIAS(setNamedItemNS, dom_namednodemap_set_named_item_ns, arginfo_dom_namednodemap_set_named_item_ns)
      77             :         PHP_FALIAS(removeNamedItemNS, dom_namednodemap_remove_named_item_ns, arginfo_dom_namednodemap_remove_named_item_ns)
      78             :         PHP_FALIAS(count, dom_namednodemap_count, arginfo_dom_namednodemap_count)
      79             :         PHP_FE_END
      80             : };
      81             : /* }}} */
      82             : 
      83             : /* {{{ length   int
      84             : readonly=yes
      85             : URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-6D0FB19E
      86             : Since:
      87             : */
      88           5 : int dom_namednodemap_length_read(dom_object *obj, zval *retval)
      89             : {
      90             :         dom_nnodemap_object *objmap;
      91             :         xmlAttrPtr curnode;
      92             :         xmlNodePtr nodep;
      93           5 :         int count = 0;
      94             : 
      95           5 :         objmap = (dom_nnodemap_object *)obj->ptr;
      96             : 
      97           5 :         if (objmap != NULL) {
      98           9 :                 if ((objmap->nodetype == XML_NOTATION_NODE) ||
      99           4 :                         objmap->nodetype == XML_ENTITY_NODE) {
     100           4 :                         if (objmap->ht) {
     101           2 :                                 count = xmlHashSize(objmap->ht);
     102             :                         }
     103             :                 } else {
     104           3 :                         nodep = dom_object_get_node(objmap->baseobj);
     105           3 :                         if (nodep) {
     106           3 :                                 curnode = nodep->properties;
     107           3 :                                 if (curnode) {
     108           3 :                                         count++;
     109          18 :                                         while (curnode->next != NULL) {
     110          12 :                                                 count++;
     111          12 :                                                 curnode = curnode->next;
     112             :                                         }
     113             :                                 }
     114             :                         }
     115             :                 }
     116             :         }
     117             : 
     118           5 :         ZVAL_LONG(retval, count);
     119           5 :         return SUCCESS;
     120             : }
     121             : 
     122             : /* }}} */
     123             : 
     124             : /* {{{ proto DOMNode dom_namednodemap_get_named_item(string name);
     125             : URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1074577549
     126             : Since:
     127             : */
     128           2 : PHP_FUNCTION(dom_namednodemap_get_named_item)
     129             : {
     130             :         zval *id;
     131             :         int ret;
     132           2 :         size_t namedlen=0;
     133             :         dom_object *intern;
     134           2 :         xmlNodePtr itemnode = NULL;
     135             :         char *named;
     136             : 
     137             :         dom_nnodemap_object *objmap;
     138             :         xmlNodePtr nodep;
     139           2 :         xmlNotation *notep = NULL;
     140             : 
     141           2 :         id = ZEND_THIS;
     142           2 :         if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &named, &namedlen) == FAILURE) {
     143           0 :                 return;
     144             :         }
     145             : 
     146           2 :         intern = Z_DOMOBJ_P(id);
     147             : 
     148           2 :         objmap = (dom_nnodemap_object *)intern->ptr;
     149             : 
     150           2 :         if (objmap != NULL) {
     151           3 :                 if ((objmap->nodetype == XML_NOTATION_NODE) ||
     152           1 :                         objmap->nodetype == XML_ENTITY_NODE) {
     153           4 :                         if (objmap->ht) {
     154           2 :                                 if (objmap->nodetype == XML_ENTITY_NODE) {
     155           1 :                                         itemnode = (xmlNodePtr)xmlHashLookup(objmap->ht, (xmlChar *) named);
     156             :                                 } else {
     157           1 :                                         notep = (xmlNotation *)xmlHashLookup(objmap->ht, (xmlChar *) named);
     158           1 :                                         if (notep) {
     159           0 :                                                 itemnode = create_notation(notep->name, notep->PublicID, notep->SystemID);
     160             :                                         }
     161             :                                 }
     162             :                         }
     163             :                 } else {
     164           0 :                         nodep = dom_object_get_node(objmap->baseobj);
     165           0 :                         if (nodep) {
     166           0 :                                 itemnode = (xmlNodePtr)xmlHasProp(nodep, (xmlChar *) named);
     167             :                         }
     168             :                 }
     169             :         }
     170             : 
     171           2 :         if (itemnode) {
     172           0 :                 DOM_RET_OBJ(itemnode, &ret, objmap->baseobj);
     173           0 :                 return;
     174             :         } else {
     175           2 :                 RETVAL_NULL();
     176             :         }
     177             : }
     178             : /* }}} end dom_namednodemap_get_named_item */
     179             : 
     180             : /* {{{ proto DOMNode dom_namednodemap_set_named_item(DOMNode arg);
     181             : URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1025163788
     182             : Since:
     183             : */
     184           0 : PHP_FUNCTION(dom_namednodemap_set_named_item)
     185             : {
     186           0 :  DOM_NOT_IMPLEMENTED();
     187             : }
     188             : /* }}} end dom_namednodemap_set_named_item */
     189             : 
     190             : /* {{{ proto DOMNode dom_namednodemap_remove_named_item(string name);
     191             : URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-D58B193
     192             : Since:
     193             : */
     194           0 : PHP_FUNCTION(dom_namednodemap_remove_named_item)
     195             : {
     196           0 :  DOM_NOT_IMPLEMENTED();
     197             : }
     198             : /* }}} end dom_namednodemap_remove_named_item */
     199             : 
     200             : /* {{{ proto DOMNode dom_namednodemap_item(int index);
     201             : URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-349467F9
     202             : Since:
     203             : */
     204          12 : PHP_FUNCTION(dom_namednodemap_item)
     205             : {
     206             :         zval *id;
     207             :         zend_long index;
     208             :         int ret;
     209             :         dom_object *intern;
     210          12 :         xmlNodePtr itemnode = NULL;
     211             : 
     212             :         dom_nnodemap_object *objmap;
     213             :         xmlNodePtr nodep, curnode;
     214             :         int count;
     215             : 
     216          12 :         id = ZEND_THIS;
     217          12 :         if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &index) == FAILURE) {
     218          11 :                 return;
     219             :         }
     220          12 :         if (index >= 0) {
     221          12 :                 if (ZEND_LONG_INT_OVFL(index)) {
     222           0 :                         php_error_docref(NULL, E_WARNING, "Invalid index");
     223           0 :                         RETURN_NULL();
     224             :                 }
     225             : 
     226          12 :                 intern = Z_DOMOBJ_P(id);
     227             : 
     228          12 :                 objmap = (dom_nnodemap_object *)intern->ptr;
     229             : 
     230          12 :                 if (objmap != NULL) {
     231          20 :                         if ((objmap->nodetype == XML_NOTATION_NODE) ||
     232           8 :                                 objmap->nodetype == XML_ENTITY_NODE) {
     233          18 :                                 if (objmap->ht) {
     234           9 :                                         if (objmap->nodetype == XML_ENTITY_NODE) {
     235           5 :                                                 itemnode = php_dom_libxml_hash_iter(objmap->ht, index);
     236             :                                         } else {
     237           4 :                                                 itemnode = php_dom_libxml_notation_iter(objmap->ht, index);
     238             :                                         }
     239             :                                 }
     240             :                         } else {
     241           3 :                                 nodep = dom_object_get_node(objmap->baseobj);
     242           3 :                                 if (nodep) {
     243           3 :                                         curnode = (xmlNodePtr)nodep->properties;
     244           3 :                                         count = 0;
     245           6 :                                         while (count < index && curnode != NULL) {
     246           0 :                                                 count++;
     247           0 :                                                 curnode = (xmlNodePtr)curnode->next;
     248             :                                         }
     249           3 :                                         itemnode = curnode;
     250             :                                 }
     251             :                         }
     252             :                 }
     253             : 
     254          12 :                 if (itemnode) {
     255          11 :                         DOM_RET_OBJ(itemnode, &ret, objmap->baseobj);
     256          11 :                         return;
     257             :                 }
     258             :         }
     259             : 
     260           1 :         RETVAL_NULL();
     261             : }
     262             : /* }}} end dom_namednodemap_item */
     263             : 
     264             : /* {{{ proto DOMNode dom_namednodemap_get_named_item_ns(string namespaceURI, string localName);
     265             : URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-getNamedItemNS
     266             : Since: DOM Level 2
     267             : */
     268           0 : PHP_FUNCTION(dom_namednodemap_get_named_item_ns)
     269             : {
     270             :         zval *id;
     271             :         int ret;
     272           0 :         size_t namedlen=0, urilen=0;
     273             :         dom_object *intern;
     274           0 :         xmlNodePtr itemnode = NULL;
     275             :         char *uri, *named;
     276             : 
     277             :         dom_nnodemap_object *objmap;
     278             :         xmlNodePtr nodep;
     279           0 :         xmlNotation *notep = NULL;
     280             : 
     281           0 :         id = ZEND_THIS;
     282           0 :         if (zend_parse_parameters(ZEND_NUM_ARGS(), "s!s", &uri, &urilen, &named, &namedlen) == FAILURE) {
     283           0 :                 return;
     284             :         }
     285             : 
     286           0 :         intern = Z_DOMOBJ_P(id);
     287             : 
     288           0 :         objmap = (dom_nnodemap_object *)intern->ptr;
     289             : 
     290           0 :         if (objmap != NULL) {
     291           0 :                 if ((objmap->nodetype == XML_NOTATION_NODE) ||
     292           0 :                         objmap->nodetype == XML_ENTITY_NODE) {
     293           0 :                         if (objmap->ht) {
     294           0 :                                 if (objmap->nodetype == XML_ENTITY_NODE) {
     295           0 :                                         itemnode = (xmlNodePtr)xmlHashLookup(objmap->ht, (xmlChar *) named);
     296             :                                 } else {
     297           0 :                                         notep = (xmlNotation *)xmlHashLookup(objmap->ht, (xmlChar *) named);
     298           0 :                                         if (notep) {
     299           0 :                                                 itemnode = create_notation(notep->name, notep->PublicID, notep->SystemID);
     300             :                                         }
     301             :                                 }
     302             :                         }
     303             :                 } else {
     304           0 :                         nodep = dom_object_get_node(objmap->baseobj);
     305           0 :                         if (nodep) {
     306           0 :                                 itemnode = (xmlNodePtr)xmlHasNsProp(nodep, (xmlChar *) named, (xmlChar *) uri);
     307             :                         }
     308             :                 }
     309             :         }
     310             : 
     311           0 :         if (itemnode) {
     312           0 :                 DOM_RET_OBJ(itemnode, &ret, objmap->baseobj);
     313           0 :                 return;
     314             :         } else {
     315           0 :                 RETVAL_NULL();
     316             :         }
     317             : }
     318             : /* }}} end dom_namednodemap_get_named_item_ns */
     319             : 
     320             : /* {{{ proto DOMNode dom_namednodemap_set_named_item_ns(DOMNode arg);
     321             : URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-setNamedItemNS
     322             : Since: DOM Level 2
     323             : */
     324           0 : PHP_FUNCTION(dom_namednodemap_set_named_item_ns)
     325             : {
     326           0 :  DOM_NOT_IMPLEMENTED();
     327             : }
     328             : /* }}} end dom_namednodemap_set_named_item_ns */
     329             : 
     330             : /* {{{ proto DOMNode dom_namednodemap_remove_named_item_ns(string namespaceURI, string localName);
     331             : URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-removeNamedItemNS
     332             : Since: DOM Level 2
     333             : */
     334           0 : PHP_FUNCTION(dom_namednodemap_remove_named_item_ns)
     335             : {
     336           0 :  DOM_NOT_IMPLEMENTED();
     337             : }
     338             : /* }}} end dom_namednodemap_remove_named_item_ns */
     339             : 
     340             : /* {{{ proto int|bool dom_namednodemap_count();
     341             : */
     342           2 : PHP_FUNCTION(dom_namednodemap_count)
     343             : {
     344             :         zval *id;
     345             :         dom_object *intern;
     346             : 
     347           2 :         id = ZEND_THIS;
     348           2 :         if (zend_parse_parameters_none() == FAILURE) {
     349           0 :                 return;
     350             :         }
     351             : 
     352           2 :         intern = Z_DOMOBJ_P(id);
     353           2 :         if(dom_namednodemap_length_read(intern, return_value) == FAILURE) {
     354           0 :                 RETURN_FALSE;
     355             :         }
     356             : }
     357             : /* }}} end dom_namednodemap_count */
     358             : 
     359             : #endif

Generated by: LCOV version 1.10

Generated at Mon, 06 May 2019 17:58:13 +0000 (998 days ago)

Copyright © 2005-2022 The PHP Group
All rights reserved.