]> granicus.if.org Git - php/commitdiff
add xsl_xsltprocessor_transform_to_uri functionality
authorRob Richards <rrichards@php.net>
Thu, 19 Jun 2003 15:00:28 +0000 (15:00 +0000)
committerRob Richards <rrichards@php.net>
Thu, 19 Jun 2003 15:00:28 +0000 (15:00 +0000)
fix a few unhandled error conditions
fix compiler warnings

ext/xsl/xsltprocessor.c

index ce4538a56f400d4ae896dfe5db3db3883fd26d93..cfe4fa3dc3142cbd516b52b2ca74a95e1cae6dc4 100644 (file)
@@ -124,7 +124,7 @@ Since:
 PHP_FUNCTION(xsl_xsltprocessor_import_stylesheet)
 {
        zval *id, *docp = NULL;
-       xmlDoc *doc;
+       xmlDoc *doc = NULL;
        xsltStylesheetPtr sheetp, oldsheetp;
        xmlDocPtr newdocp;
        xsl_object *intern;
@@ -170,7 +170,7 @@ Since:
 PHP_FUNCTION(xsl_xsltprocessor_transform_to_doc)
 {
        zval *id, *rv = NULL, *docp = NULL;
-       xmlDoc *doc;
+       xmlDoc *doc = NULL;
        xmlDoc *newdocp;
        xsltStylesheetPtr sheetp;
        int ret;
@@ -210,7 +210,41 @@ PHP_FUNCTION(xsl_xsltprocessor_transform_to_doc)
 */
 PHP_FUNCTION(xsl_xsltprocessor_transform_to_uri)
 {
- DOM_NOT_IMPLEMENTED();
+       zval *id, *docp = NULL;
+       xmlDoc *doc = NULL;
+       xmlDoc *newdocp;
+       xsltStylesheetPtr sheetp;
+       int ret, uri_len;
+       char **params = NULL, *uri;
+       xsl_object *intern;
+       node_object *docobj;
+       
+       id = getThis();
+       intern = (xsl_object *)zend_object_store_get_object(id TSRMLS_CC);
+       sheetp = (xsltStylesheetPtr) intern->ptr;
+
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "os", &docp, &uri, &uri_len) == FAILURE) {
+               RETURN_FALSE;
+       }
+
+       DOC_GET_OBJ(doc, docp, xmlDocPtr, docobj);
+
+       if (intern->parameter) {
+               params = php_xsl_xslt_make_params(intern->parameter, 0 TSRMLS_CC);
+       }
+       newdocp = xsltApplyStylesheet(sheetp, doc, (const char**)params);
+
+       if (params) {
+               efree(params);
+       }
+
+       ret = -1;
+       if (newdocp) {
+               ret = xsltSaveResultToFilename(uri, newdocp, sheetp, 0);
+               xmlFreeDoc(newdocp);
+       }
+
+       RETVAL_LONG(ret);
 }
 /* }}} end xsl_xsltprocessor_transform_to_uri */
 
@@ -220,7 +254,7 @@ PHP_FUNCTION(xsl_xsltprocessor_transform_to_uri)
 PHP_FUNCTION(xsl_xsltprocessor_transform_to_xml)
 {
        zval *id, *docp = NULL;
-       xmlDoc *doc;
+       xmlDoc *doc = NULL;
        xmlDoc *newdocp;
        xsltStylesheetPtr sheetp;
        int ret;
@@ -247,15 +281,20 @@ PHP_FUNCTION(xsl_xsltprocessor_transform_to_xml)
        if (params) {
                efree(params);
        }
-       ret = xsltSaveResultToString(&doc_txt_ptr, &doc_txt_len, newdocp, sheetp);
+
+       ret = -1;
+       if (newdocp) {
+               ret = xsltSaveResultToString(&doc_txt_ptr, &doc_txt_len, newdocp, sheetp);
+               if (doc_txt_ptr) {
+                       RETVAL_STRINGL(doc_txt_ptr, doc_txt_len, 1);
+                       xmlFree(doc_txt_ptr);
+               }
+               xmlFreeDoc(newdocp);
+       }
 
        if (ret < 0) {
                RETURN_FALSE;
        }
-
-       RETVAL_STRINGL(doc_txt_ptr, doc_txt_len, 1);
-       xmlFree(doc_txt_ptr);
-       xmlFreeDoc(newdocp);
 }
 /* }}} end xsl_xsltprocessor_transform_to_xml */