summaryrefslogtreecommitdiff
path: root/ext/domxml
diff options
context:
space:
mode:
authorJoey Smith <joey@php.net>2001-08-09 12:35:09 +0000
committerJoey Smith <joey@php.net>2001-08-09 12:35:09 +0000
commitf8d73072709bb26dba3b160f4ac549bbc2bcbf70 (patch)
tree0301c95b2af22a71d02e1fcce98ee2564b2a0687 /ext/domxml
parent00418457d3cb37ede25f146e31b29f66799d410c (diff)
downloadphp-git-f8d73072709bb26dba3b160f4ac549bbc2bcbf70.tar.gz
Commit acutal code only, will do ws on another pass.
Diffstat (limited to 'ext/domxml')
-rw-r--r--ext/domxml/php_domxml.c48
1 files changed, 39 insertions, 9 deletions
diff --git a/ext/domxml/php_domxml.c b/ext/domxml/php_domxml.c
index 41cbfb6df6..db27310d5f 100644
--- a/ext/domxml/php_domxml.c
+++ b/ext/domxml/php_domxml.c
@@ -102,13 +102,13 @@ static zend_function_entry domxml_functions[] = {
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}
};
@@ -2477,20 +2477,49 @@ PHP_FUNCTION(xptr_new_context)
}
/* }}} */
+/* {{{ */
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 @@ static void php_xpathptr_eval(INTERNAL_FUNCTION_PARAMETERS, int mode, int expr)
#if defined(LIBXML_XPTR_ENABLED)
}
#endif
-
+
+ ctxp->node = NULL;
if (!xpathobjp) {
RETURN_FALSE;
}