Browse Source

Provide a common handler for "close".

Macro the name validation.
migration/RELEASE_1_0_0
Ilia Alshanetsky 21 years ago
parent
commit
e7ad6720fa
  1. 444
      ext/xmlwriter/php_xmlwriter.c

444
ext/xmlwriter/php_xmlwriter.c

@ -82,6 +82,7 @@ static void xmlwriter_object_free_storage(void *object TSRMLS_DC)
}
/* }}} */
/* {{{ xmlwriter_object_new */
PHP_XMLWRITER_API zend_object_value xmlwriter_object_new(zend_class_entry *class_type TSRMLS_DC)
{
@ -112,6 +113,12 @@ PHP_XMLWRITER_API zend_object_value xmlwriter_object_new(zend_class_entry *class
/* }}} */
#endif
#define XMLW_NAME_CHK(__err) \
if (xmlValidateName((xmlChar *) name, 0) != 0) { \
php_error_docref(NULL TSRMLS_CC, E_WARNING, #__err); \
RETURN_FALSE; \
} \
/* {{{ xmlwriter_functions */
static zend_function_entry xmlwriter_functions[] = {
PHP_FE(xmlwriter_open_uri, NULL)
@ -439,11 +446,7 @@ PHP_FUNCTION(xmlwriter_start_attribute)
}
retval = xmlValidateName((xmlChar *) name, 0);
if (retval != 0) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid Attribute Name");
RETURN_FALSE;
}
XMLW_NAME_CHK("Invalid Element Name");
ptr = intern->ptr;
@ -458,9 +461,7 @@ PHP_FUNCTION(xmlwriter_start_attribute)
}
/* }}} */
/* {{{ proto bool xmlwriter_end_attribute(resource xmlwriter)
End attribute - returns FALSE on error */
PHP_FUNCTION(xmlwriter_end_attribute)
static void php_xmlwriter_end(INTERNAL_FUNCTION_PARAMETERS, int type)
{
zval *pind;
xmlwriter_object *intern;
@ -483,7 +484,41 @@ PHP_FUNCTION(xmlwriter_end_attribute)
ptr = intern->ptr;
if (ptr) {
retval = xmlTextWriterEndAttribute(ptr);
switch (type) {
case 0:
retval = xmlTextWriterEndAttribute(ptr);
break;
case 1:
retval = xmlTextWriterEndElement(ptr);
break;
case 2:
retval = xmlTextWriterEndPI(ptr);
break;
case 3:
retval = xmlTextWriterEndCDATA(ptr);
break;
case 4:
retval = xmlTextWriterEndComment(ptr);
break;
case 5:
retval = xmlTextWriterEndDocument(ptr);
break;
case 6:
retval = xmlTextWriterEndDTD(ptr);
break;
case 7:
retval = xmlTextWriterEndDTDElement(ptr);
break;
case 8:
retval = xmlTextWriterEndDTDAttlist(ptr);
break;
case 9:
retval = xmlTextWriterEndDTDEntity(ptr);
break;
default:
retval = -1;
break;
}
if (retval != -1) {
RETURN_TRUE;
}
@ -491,6 +526,14 @@ PHP_FUNCTION(xmlwriter_end_attribute)
RETURN_FALSE;
}
/* {{{ proto bool xmlwriter_end_attribute(resource xmlwriter)
End attribute - returns FALSE on error */
PHP_FUNCTION(xmlwriter_end_attribute)
{
php_xmlwriter_end(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
}
/* }}} */
#if LIBXML_VERSION > 20617
@ -522,12 +565,7 @@ PHP_FUNCTION(xmlwriter_start_attribute_ns)
ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
}
retval = xmlValidateName((xmlChar *) name, 0);
if (retval != 0) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid Attribute Name");
RETURN_FALSE;
}
XMLW_NAME_CHK("Invalid Attribute Name");
ptr = intern->ptr;
@ -572,11 +610,7 @@ PHP_FUNCTION(xmlwriter_write_attribute)
ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
}
retval = xmlValidateName((xmlChar *) name, 0);
if (retval != 0) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid Attribute Name");
RETURN_FALSE;
}
XMLW_NAME_CHK("Invalid Attribute Name");
ptr = intern->ptr;
@ -620,11 +654,7 @@ PHP_FUNCTION(xmlwriter_write_attribute_ns)
ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
}
retval = xmlValidateName((xmlChar *) name, 0);
if (retval != 0) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid Attribute Name");
RETURN_FALSE;
}
XMLW_NAME_CHK("Invalid Attribute Name");
ptr = intern->ptr;
@ -665,11 +695,7 @@ PHP_FUNCTION(xmlwriter_start_element)
ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
}
retval = xmlValidateName((xmlChar *) name, 0);
if (retval != 0) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid Element Name");
RETURN_FALSE;
}
XMLW_NAME_CHK("Invalid Element Name");
ptr = intern->ptr;
@ -684,6 +710,7 @@ PHP_FUNCTION(xmlwriter_start_element)
}
/* }}} */
/* {{{ proto bool xmlwriter_start_element_ns(resource xmlwriter, string prefix, string name, string uri)
Create start namespaced element tag - returns FALSE on error */
PHP_FUNCTION(xmlwriter_start_element_ns)
@ -712,12 +739,7 @@ PHP_FUNCTION(xmlwriter_start_element_ns)
ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
}
retval = xmlValidateName((xmlChar *) name, 0);
if (retval != 0) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid Element Name");
RETURN_FALSE;
}
XMLW_NAME_CHK("Invalid Element Name");
ptr = intern->ptr;
@ -726,6 +748,7 @@ PHP_FUNCTION(xmlwriter_start_element_ns)
if (retval != -1) {
RETURN_TRUE;
}
}
RETURN_FALSE;
@ -736,34 +759,7 @@ PHP_FUNCTION(xmlwriter_start_element_ns)
End current element - returns FALSE on error */
PHP_FUNCTION(xmlwriter_end_element)
{
zval *pind;
xmlwriter_object *intern;
xmlTextWriterPtr ptr;
int retval;
#ifdef ZEND_ENGINE_2
zval *this = getThis();
if (this) {
XMLWRITER_FROM_OBJECT(intern, this);
} else
#endif
{
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &pind) == FAILURE) {
return;
}
ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
}
ptr = intern->ptr;
if (ptr) {
retval = xmlTextWriterEndElement(ptr);
if (retval != -1) {
RETURN_TRUE;
}
}
RETURN_FALSE;
php_xmlwriter_end(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
}
/* }}} */
@ -795,11 +791,7 @@ PHP_FUNCTION(xmlwriter_write_element)
ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
}
retval = xmlValidateName((xmlChar *) name, 0);
if (retval != 0) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid Element Name");
RETURN_FALSE;
}
XMLW_NAME_CHK("Invalid Element Name");
ptr = intern->ptr;
@ -843,11 +835,7 @@ PHP_FUNCTION(xmlwriter_write_element_ns)
ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
}
retval = xmlValidateName((xmlChar *) name, 0);
if (retval != 0) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid Element Name");
RETURN_FALSE;
}
XMLW_NAME_CHK("Invalid Element Name");
ptr = intern->ptr;
@ -869,36 +857,32 @@ PHP_FUNCTION(xmlwriter_start_pi)
zval *pind;
xmlwriter_object *intern;
xmlTextWriterPtr ptr;
char *target;
int target_len, retval;
char *name;
int name_len, retval;
#ifdef ZEND_ENGINE_2
zval *this = getThis();
if (this) {
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &target, &target_len) == FAILURE) {
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &name, &name_len) == FAILURE) {
return;
}
XMLWRITER_FROM_OBJECT(intern, this);
} else
#endif
{
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &pind, &target, &target_len) == FAILURE) {
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &pind, &name, &name_len) == FAILURE) {
return;
}
ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
}
retval = xmlValidateName((xmlChar *) target, 0);
if (retval != 0) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid PI Target");
RETURN_FALSE;
}
XMLW_NAME_CHK("Invalid PI Target");
ptr = intern->ptr;
if (ptr) {
retval = xmlTextWriterStartPI(ptr, target);
retval = xmlTextWriterStartPI(ptr, name);
if (retval != -1) {
RETURN_TRUE;
}
@ -912,35 +896,7 @@ PHP_FUNCTION(xmlwriter_start_pi)
End current PI - returns FALSE on error */
PHP_FUNCTION(xmlwriter_end_pi)
{
zval *pind;
xmlwriter_object *intern;
xmlTextWriterPtr ptr;
int retval;
#ifdef ZEND_ENGINE_2
zval *this = getThis();
if (this) {
XMLWRITER_FROM_OBJECT(intern, this);
} else
#endif
{
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &pind) == FAILURE) {
return;
}
ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
}
ptr = intern->ptr;
if (ptr) {
retval = xmlTextWriterEndPI(ptr);
if (retval != -1) {
RETURN_TRUE;
}
}
RETURN_FALSE;
php_xmlwriter_end(INTERNAL_FUNCTION_PARAM_PASSTHRU, 2);
}
/* }}} */
@ -951,15 +907,15 @@ PHP_FUNCTION(xmlwriter_write_pi)
zval *pind;
xmlwriter_object *intern;
xmlTextWriterPtr ptr;
char *target, *content;
int target_len, content_len, retval;
char *name, *content;
int name_len, content_len, retval;
#ifdef ZEND_ENGINE_2
zval *this = getThis();
if (this) {
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss",
&target, &target_len, &content, &content_len) == FAILURE) {
&name, &name_len, &content, &content_len) == FAILURE) {
return;
}
XMLWRITER_FROM_OBJECT(intern, this);
@ -967,22 +923,18 @@ PHP_FUNCTION(xmlwriter_write_pi)
#endif
{
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rss", &pind,
&target, &target_len, &content, &content_len) == FAILURE) {
&name, &name_len, &content, &content_len) == FAILURE) {
return;
}
ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
}
retval = xmlValidateName((xmlChar *) target, 0);
if (retval != 0) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid PI Target");
RETURN_FALSE;
}
XMLW_NAME_CHK("Invalid PI Target");
ptr = intern->ptr;
if (ptr) {
retval = xmlTextWriterWritePI(ptr, target, content);
retval = xmlTextWriterWritePI(ptr, name, content);
if (retval != -1) {
RETURN_TRUE;
}
@ -1031,35 +983,7 @@ PHP_FUNCTION(xmlwriter_start_cdata)
End current CDATA - returns FALSE on error */
PHP_FUNCTION(xmlwriter_end_cdata)
{
zval *pind;
xmlwriter_object *intern;
xmlTextWriterPtr ptr;
int retval;
#ifdef ZEND_ENGINE_2
zval *this = getThis();
if (this) {
XMLWRITER_FROM_OBJECT(intern, this);
} else
#endif
{
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &pind) == FAILURE) {
return;
}
ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
}
ptr = intern->ptr;
if (ptr) {
retval = xmlTextWriterEndCDATA(ptr);
if (retval != -1) {
RETURN_TRUE;
}
}
RETURN_FALSE;
php_xmlwriter_end(INTERNAL_FUNCTION_PARAM_PASSTHRU, 3);
}
/* }}} */
@ -1136,7 +1060,7 @@ PHP_FUNCTION(xmlwriter_text)
if (ptr) {
retval = xmlTextWriterWriteString(ptr, content);
if (retval != -1) {
if (retval) {
RETURN_TRUE;
}
}
@ -1185,35 +1109,7 @@ PHP_FUNCTION(xmlwriter_start_comment)
Create end comment - returns FALSE on error */
PHP_FUNCTION(xmlwriter_end_comment)
{
zval *pind;
xmlwriter_object *intern;
xmlTextWriterPtr ptr;
int retval;
#ifdef ZEND_ENGINE_2
zval *this = getThis();
if (this) {
XMLWRITER_FROM_OBJECT(intern, this);
} else
#endif
{
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &pind) == FAILURE) {
return;
}
ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
}
ptr = intern->ptr;
if (ptr) {
retval = xmlTextWriterEndComment(ptr);
if (retval != -1) {
RETURN_TRUE;
}
}
RETURN_FALSE;
php_xmlwriter_end(INTERNAL_FUNCTION_PARAM_PASSTHRU, 4);
}
/* }}} */
#endif /* LIBXML_VERSION >= 20607 */
@ -1306,34 +1202,7 @@ PHP_FUNCTION(xmlwriter_start_document)
End current document - returns FALSE on error */
PHP_FUNCTION(xmlwriter_end_document)
{
zval *pind;
xmlwriter_object *intern;
xmlTextWriterPtr ptr;
int retval;
#ifdef ZEND_ENGINE_2
zval *this = getThis();
if (this) {
XMLWRITER_FROM_OBJECT(intern, this);
} else
#endif
{
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &pind) == FAILURE) {
return;
}
ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
}
ptr = intern->ptr;
if (ptr) {
retval = xmlTextWriterEndDocument(ptr);
if (retval != -1) {
RETURN_TRUE;
}
}
RETURN_FALSE;
php_xmlwriter_end(INTERNAL_FUNCTION_PARAM_PASSTHRU, 5);
}
/* }}} */
@ -1382,34 +1251,7 @@ PHP_FUNCTION(xmlwriter_start_dtd)
End current DTD - returns FALSE on error */
PHP_FUNCTION(xmlwriter_end_dtd)
{
zval *pind;
xmlwriter_object *intern;
xmlTextWriterPtr ptr;
int retval;
#ifdef ZEND_ENGINE_2
zval *this = getThis();
if (this) {
XMLWRITER_FROM_OBJECT(intern, this);
} else
#endif
{
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &pind) == FAILURE) {
return;
}
ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
}
ptr = intern->ptr;
if (ptr) {
retval = xmlTextWriterEndDTD(ptr);
if (retval != -1) {
RETURN_TRUE;
}
}
RETURN_FALSE;
php_xmlwriter_end(INTERNAL_FUNCTION_PARAM_PASSTHRU, 6);
}
/* }}} */
@ -1482,11 +1324,7 @@ PHP_FUNCTION(xmlwriter_start_dtd_element)
ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
}
retval = xmlValidateName((xmlChar *) name, 0);
if (retval != 0) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid Attribute Name");
RETURN_FALSE;
}
XMLW_NAME_CHK("Invalid Attribute Name");
ptr = intern->ptr;
@ -1505,35 +1343,7 @@ PHP_FUNCTION(xmlwriter_start_dtd_element)
End current DTD element - returns FALSE on error */
PHP_FUNCTION(xmlwriter_end_dtd_element)
{
zval *pind;
xmlwriter_object *intern;
xmlTextWriterPtr ptr;
int retval;
#ifdef ZEND_ENGINE_2
zval *this = getThis();
if (this) {
XMLWRITER_FROM_OBJECT(intern, this);
} else
#endif
{
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &pind) == FAILURE) {
return;
}
ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
}
ptr = intern->ptr;
if (ptr) {
retval = xmlTextWriterEndDTDElement(ptr);
if (retval != -1) {
RETURN_TRUE;
}
}
RETURN_FALSE;
php_xmlwriter_end(INTERNAL_FUNCTION_PARAM_PASSTHRU, 7);
}
/* }}} */
@ -1565,11 +1375,7 @@ PHP_FUNCTION(xmlwriter_write_dtd_element)
ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
}
retval = xmlValidateName((xmlChar *) name, 0);
if (retval != 0) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid Element Name");
RETURN_FALSE;
}
XMLW_NAME_CHK("Invalid Element Name");
ptr = intern->ptr;
@ -1611,11 +1417,7 @@ PHP_FUNCTION(xmlwriter_start_dtd_attlist)
ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
}
retval = xmlValidateName((xmlChar *) name, 0);
if (retval != 0) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid Attribute Name");
RETURN_FALSE;
}
XMLW_NAME_CHK("Invalid Attribute Name");
ptr = intern->ptr;
@ -1634,35 +1436,7 @@ PHP_FUNCTION(xmlwriter_start_dtd_attlist)
End current DTD AttList - returns FALSE on error */
PHP_FUNCTION(xmlwriter_end_dtd_attlist)
{
zval *pind;
xmlwriter_object *intern;
xmlTextWriterPtr ptr;
int retval;
#ifdef ZEND_ENGINE_2
zval *this = getThis();
if (this) {
XMLWRITER_FROM_OBJECT(intern, this);
} else
#endif
{
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &pind) == FAILURE) {
return;
}
ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
}
ptr = intern->ptr;
if (ptr) {
retval = xmlTextWriterEndDTDAttlist(ptr);
if (retval != -1) {
RETURN_TRUE;
}
}
RETURN_FALSE;
php_xmlwriter_end(INTERNAL_FUNCTION_PARAM_PASSTHRU, 8);
}
/* }}} */
@ -1696,12 +1470,7 @@ PHP_FUNCTION(xmlwriter_write_dtd_attlist)
ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
}
retval = xmlValidateName((xmlChar *) name, 0);
if (retval != 0) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid Element Name");
RETURN_FALSE;
}
XMLW_NAME_CHK("Invalid Element Name");
ptr = intern->ptr;
@ -1745,11 +1514,7 @@ PHP_FUNCTION(xmlwriter_start_dtd_entity)
ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
}
retval = xmlValidateName((xmlChar *) name, 0);
if (retval != 0) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid Attribute Name");
RETURN_FALSE;
}
XMLW_NAME_CHK("Invalid Attribute Name");
ptr = intern->ptr;
@ -1768,34 +1533,7 @@ PHP_FUNCTION(xmlwriter_start_dtd_entity)
End current DTD Entity - returns FALSE on error */
PHP_FUNCTION(xmlwriter_end_dtd_entity)
{
zval *pind;
xmlwriter_object *intern;
xmlTextWriterPtr ptr;
int retval;
#ifdef ZEND_ENGINE_2
zval *this = getThis();
if (this) {
XMLWRITER_FROM_OBJECT(intern, this);
} else
#endif
{
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &pind) == FAILURE) {
return;
}
ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
}
ptr = intern->ptr;
if (ptr) {
retval = xmlTextWriterEndDTDEntity(ptr);
if (retval != -1) {
RETURN_TRUE;
}
}
RETURN_FALSE;
php_xmlwriter_end(INTERNAL_FUNCTION_PARAM_PASSTHRU, 9);
}
/* }}} */
@ -1828,11 +1566,7 @@ PHP_FUNCTION(xmlwriter_write_dtd_entity)
ZEND_FETCH_RESOURCE(intern,xmlwriter_object *, &pind, -1, "XMLWriter", le_xmlwriter);
}
retval = xmlValidateName((xmlChar *) name, 0);
if (retval != 0) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid Element Name");
RETURN_FALSE;
}
XMLW_NAME_CHK("Invalid Element Name");
ptr = intern->ptr;

Loading…
Cancel
Save