cvs: php4 /ext/domxml php_domxml.c

From: Date: Thu, 09 Aug 2001 12:15:58 +0000
Subject: cvs: php4 /ext/domxml php_domxml.c
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-6671@lists.php.net to get a copy of this message
joey Thu Aug 9 08:15:58 2001 EDT Modified files: /php4/ext/domxml php_domxml.c Log: Restore xpath_eval() and the underlying php_xpathptr_eval(). It still leaks like crazy, but does not appear to crash, and seems to work correctly. Anyone who can possibly test this, please do. @- Restore xpath_eval() and php_xpathptr_eval() for 4.0.7. There @ are still some known leaks. Index: php4/ext/domxml/php_domxml.c diff -u php4/ext/domxml/php_domxml.c:1.48 php4/ext/domxml/php_domxml.c:1.49 --- php4/ext/domxml/php_domxml.c:1.48 Tue Aug 7 13:17:39 2001 +++ php4/ext/domxml/php_domxml.c Thu Aug 9 08:15:58 2001 @@ -1,22 +1,22 @@ /* +----------------------------------------------------------------------+ - | PHP version 4.0 | + | PHP version 4.0 | +----------------------------------------------------------------------+ - | Copyright (c) 1997-2001 The PHP Group | + | Copyright (c) 1997-2001 The PHP Group | +----------------------------------------------------------------------+ - | This source file is subject to version 2.02 of the PHP license, | - | that is bundled with this package in the file LICENSE, and is | - | available at through the world-wide-web at | - | http://www.php.net/license/2_02.txt. | + | This source file is subject to version 2.02 of the PHP license, | + | that is bundled with this package in the file LICENSE, and is | + | available at through the world-wide-web at | + | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | + | obtain it through the world-wide-web, please send a note to | + | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ - | Authors: Uwe Steinmann <steinm@php.net> | + | Authors: Uwe Steinmann <steinm@php.net> | +----------------------------------------------------------------------+ */ -/* $Id: php_domxml.c,v 1.48 2001/08/07 17:17:39 sniper Exp $ */ +/* $Id: php_domxml.c,v 1.49 2001/08/09 12:15:58 joey Exp $ */ #ifdef HAVE_CONFIG_H @@ -102,13 +102,13 @@ PHP_FE(domxml_new_xmldoc, NULL) PHP_FALIAS(new_xmldoc, domxml_new_xmldoc, NULL) #if defined(LIBXML_XPATH_ENABLED) -/* PHP_FE(xpath_new_context, NULL) + PHP_FE(xpath_new_context, NULL) PHP_FE(xpath_eval, NULL) - PHP_FE(xpath_eval_expression, NULL) */ + PHP_FE(xpath_eval_expression, NULL) #endif #if defined(LIBXML_XPTR_ENABLED) -/* PHP_FE(xptr_new_context, NULL) - PHP_FE(xptr_eval, NULL) */ + PHP_FE(xptr_new_context, NULL) + PHP_FE(xptr_eval, NULL) #endif {NULL, NULL, NULL} }; @@ -1012,35 +1012,35 @@ n = php_dom_get_object(id, le_domxmlnodep, 0 TSRMLS_CC); switch (n->type) - { - case XML_ELEMENT_NODE: - str = n->name; - break; - case XML_TEXT_NODE: - str = "#text"; - break; - case XML_CDATA_SECTION_NODE: - str = "#cdata-section"; - break; - case XML_ENTITY_REF_NODE: - str = n->name; - break; - case XML_ENTITY_NODE: - str = NULL; - break; - case XML_PI_NODE: - str = n->name; - break; - case XML_COMMENT_NODE: - str = "#comment"; - break; - case XML_DOCUMENT_FRAG_NODE: - str = "#document-fragment"; - break; - default: - str = NULL; - break; - } + { + case XML_ELEMENT_NODE: + str = n->name; + break; + case XML_TEXT_NODE: + str = "#text"; + break; + case XML_CDATA_SECTION_NODE: + str = "#cdata-section"; + break; + case XML_ENTITY_REF_NODE: + str = n->name; + break; + case XML_ENTITY_NODE: + str = NULL; + break; + case XML_PI_NODE: + str = n->name; + break; + case XML_COMMENT_NODE: + str = "#comment"; + break; + case XML_DOCUMENT_FRAG_NODE: + str = "#document-fragment"; + break; + default: + str = NULL; + break; + } RETURN_STRING((char *) str, 1); } /* }}} */ @@ -1060,17 +1060,17 @@ RETURN_FALSE; } switch (n->type) - { - case XML_TEXT_NODE: - case XML_COMMENT_NODE: - case XML_CDATA_SECTION_NODE: - case XML_PI_NODE: - str = n->content; - break; - default: - str = NULL; - break; - } + { + case XML_TEXT_NODE: + case XML_COMMENT_NODE: + case XML_CDATA_SECTION_NODE: + case XML_PI_NODE: + str = n->content; + break; + default: + str = NULL; + break; + } RETURN_STRING(str, 1); } /* }}} */ @@ -2477,20 +2477,49 @@ } /* }}} */ +/* {{{ */ static void php_xpathptr_eval(INTERNAL_FUNCTION_PARAMETERS, int mode, int expr) { - zval *id, *str, *rv; + zval *id, *str, *rv, *contextnode; xmlXPathContextPtr ctxp; xmlXPathObjectPtr xpathobjp; + xmlNode *contextnodep; int ret; - if (ZEND_NUM_ARGS() != 1 || getParameters(ht, 1, &str) == FAILURE) { - WRONG_PARAM_COUNT; - } + contextnode = NULL; + contextnodep = NULL; id = getThis(); + + if (! id) { + switch(ZEND_NUM_ARGS()) { + case 2: + if ((getParameters(ht, 2, &id, &str)) == FAILURE) + { + WRONG_PARAM_COUNT; + } + break; + + case 3: + if ((getParameters(ht, 3, &id, &str, &contextnode)) == FAILURE) + { + WRONG_PARAM_COUNT; + } + break; + + default: + WRONG_PARAM_COUNT; + } + } + + ctxp = php_xpath_get_context(id, le_xpathctxp, 0 TSRMLS_CC); convert_to_string(str); + + if (contextnode) { + contextnodep = php_dom_get_object(contextnode, le_domxmlnodep, 0); + } + ctxp->node = contextnodep; #if defined(LIBXML_XPTR_ENABLED) if(mode == PHP_XPTR) { @@ -2504,7 +2533,8 @@ #if defined(LIBXML_XPTR_ENABLED) } #endif - + + ctxp->node = NULL; if (!xpathobjp) { RETURN_FALSE; }

« previous php.cvs (#6671) next »