summaryrefslogtreecommitdiff
path: root/ext/xsl/xsltprocessor.c
diff options
context:
space:
mode:
authorRob Richards <rrichards@php.net>2003-06-19 15:00:28 +0000
committerRob Richards <rrichards@php.net>2003-06-19 15:00:28 +0000
commite52b96a29632eb2b13ded11bde6e4cc41c91500d (patch)
tree2de42a450e89511383bc135aa4edede548d5234b /ext/xsl/xsltprocessor.c
parent44401fa0e782c2f347d5f03ea09c576af6561064 (diff)
downloadphp-git-e52b96a29632eb2b13ded11bde6e4cc41c91500d.tar.gz
add xsl_xsltprocessor_transform_to_uri functionality
fix a few unhandled error conditions fix compiler warnings
Diffstat (limited to 'ext/xsl/xsltprocessor.c')
-rw-r--r--ext/xsl/xsltprocessor.c57
1 files changed, 48 insertions, 9 deletions
diff --git a/ext/xsl/xsltprocessor.c b/ext/xsl/xsltprocessor.c
index ce4538a56f..cfe4fa3dc3 100644
--- a/ext/xsl/xsltprocessor.c
+++ b/ext/xsl/xsltprocessor.c
@@ -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 */