Skip to content

Commit e52b96a

Browse files
author
Rob Richards
committed
add xsl_xsltprocessor_transform_to_uri functionality
fix a few unhandled error conditions fix compiler warnings
1 parent 44401fa commit e52b96a

File tree

1 file changed

+48
-9
lines changed

1 file changed

+48
-9
lines changed

ext/xsl/xsltprocessor.c

Lines changed: 48 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#
124124
PHP_FUNCTION(xsl_xsltprocessor_import_stylesheet)
125125
{
126126
zval *id, *docp = NULL;
127-
xmlDoc *doc;
127+
xmlDoc *doc = NULL;
128128
xsltStylesheetPtr sheetp, oldsheetp;
129129
xmlDocPtr newdocp;
130130
xsl_object *intern;
@@ -170,7 +170,7 @@ URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#
170170
PHP_FUNCTION(xsl_xsltprocessor_transform_to_doc)
171171
{
172172
zval *id, *rv = NULL, *docp = NULL;
173-
xmlDoc *doc;
173+
xmlDoc *doc = NULL;
174174
xmlDoc *newdocp;
175175
xsltStylesheetPtr sheetp;
176176
int ret;
@@ -210,7 +210,41 @@ PHP_FUNCTION(xsl_xsltprocessor_transform_to_doc)
210210
*/
211211
PHP_FUNCTION(xsl_xsltprocessor_transform_to_uri)
212212
{
213-
DOM_NOT_IMPLEMENTED();
213+
zval *id, *docp = NULL;
214+
xmlDoc *doc = NULL;
215+
xmlDoc *newdocp;
216+
xsltStylesheetPtr sheetp;
217+
int ret, uri_len;
218+
char **params = NULL, *uri;
219+
xsl_object *intern;
220+
node_object *docobj;
221+
222+
id = getThis();
223+
intern = (xsl_object *)zend_object_store_get_object(id TSRMLS_CC);
224+
sheetp = (xsltStylesheetPtr) intern->ptr;
225+
226+
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "os", &docp, &uri, &uri_len) == FAILURE) {
227+
RETURN_FALSE;
228+
}
229+
230+
DOC_GET_OBJ(doc, docp, xmlDocPtr, docobj);
231+
232+
if (intern->parameter) {
233+
params = php_xsl_xslt_make_params(intern->parameter, 0 TSRMLS_CC);
234+
}
235+
newdocp = xsltApplyStylesheet(sheetp, doc, (const char**)params);
236+
237+
if (params) {
238+
efree(params);
239+
}
240+
241+
ret = -1;
242+
if (newdocp) {
243+
ret = xsltSaveResultToFilename(uri, newdocp, sheetp, 0);
244+
xmlFreeDoc(newdocp);
245+
}
246+
247+
RETVAL_LONG(ret);
214248
}
215249
/* }}} end xsl_xsltprocessor_transform_to_uri */
216250

@@ -220,7 +254,7 @@ PHP_FUNCTION(xsl_xsltprocessor_transform_to_uri)
220254
PHP_FUNCTION(xsl_xsltprocessor_transform_to_xml)
221255
{
222256
zval *id, *docp = NULL;
223-
xmlDoc *doc;
257+
xmlDoc *doc = NULL;
224258
xmlDoc *newdocp;
225259
xsltStylesheetPtr sheetp;
226260
int ret;
@@ -247,15 +281,20 @@ PHP_FUNCTION(xsl_xsltprocessor_transform_to_xml)
247281
if (params) {
248282
efree(params);
249283
}
250-
ret = xsltSaveResultToString(&doc_txt_ptr, &doc_txt_len, newdocp, sheetp);
284+
285+
ret = -1;
286+
if (newdocp) {
287+
ret = xsltSaveResultToString(&doc_txt_ptr, &doc_txt_len, newdocp, sheetp);
288+
if (doc_txt_ptr) {
289+
RETVAL_STRINGL(doc_txt_ptr, doc_txt_len, 1);
290+
xmlFree(doc_txt_ptr);
291+
}
292+
xmlFreeDoc(newdocp);
293+
}
251294

252295
if (ret < 0) {
253296
RETURN_FALSE;
254297
}
255-
256-
RETVAL_STRINGL(doc_txt_ptr, doc_txt_len, 1);
257-
xmlFree(doc_txt_ptr);
258-
xmlFreeDoc(newdocp);
259298
}
260299
/* }}} end xsl_xsltprocessor_transform_to_xml */
261300

0 commit comments

Comments
 (0)