]> granicus.if.org Git - php/commitdiff
Commit acutal code only, will do ws on another pass.
authorJoey Smith <joey@php.net>
Thu, 9 Aug 2001 12:35:09 +0000 (12:35 +0000)
committerJoey Smith <joey@php.net>
Thu, 9 Aug 2001 12:35:09 +0000 (12:35 +0000)
ext/domxml/php_domxml.c

index 41cbfb6df6069af709d2761e421f26702a7bc453..db27310d5f25f1d4503b85a2fc247dee0b716e83 100644 (file)
@@ -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;
        }