rrichards Thu Jun 19 11:00:28 2003 EDT Modified files: /php4/ext/xsl xsltprocessor.c Log: add xsl_xsltprocessor_transform_to_uri functionality fix a few unhandled error conditions fix compiler warnings Index: php4/ext/xsl/xsltprocessor.c diff -u php4/ext/xsl/xsltprocessor.c:1.5 php4/ext/xsl/xsltprocessor.c:1.6 --- php4/ext/xsl/xsltprocessor.c:1.5 Sat Jun 14 11:28:13 2003 +++ php4/ext/xsl/xsltprocessor.c Thu Jun 19 11:00:28 2003 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: xsltprocessor.c,v 1.5 2003/06/14 15:28:13 rrichards Exp $ */ +/* $Id: xsltprocessor.c,v 1.6 2003/06/19 15:00:28 rrichards Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -124,7 +124,7 @@ 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 @@ 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_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_xml) { zval *id, *docp = NULL; - xmlDoc *doc; + xmlDoc *doc = NULL; xmlDoc *newdocp; xsltStylesheetPtr sheetp; int ret; @@ -247,15 +281,20 @@ 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 */
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php