add xsl_xsltprocessor_transform_to_uri functionality

fix a few unhandled error conditions
fix compiler warnings
This commit is contained in:
Rob Richards 2003-06-19 15:00:28 +00:00
parent 44401fa0e7
commit e52b96a296

View 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 */