mirror of
https://github.com/php/php-src.git
synced 2024-09-22 02:17:32 +00:00
updated XML (only partly tested)
This commit is contained in:
parent
79e729d6b2
commit
c626d9e47b
@ -2,6 +2,7 @@ PHP 4.0 CHANGE LOG ChangeLog
|
||||
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||
|
||||
?? ?? 1999, Version 4.0 Beta 3
|
||||
- Updated XML to use the new high-performance Zend function API. (Thies)
|
||||
- Updated Oracle to use the new high-performance Zend function API. (Thies)
|
||||
- Improved the performance of the MySQL module significantly by using the new
|
||||
high-performance Zend function API.
|
||||
|
@ -352,7 +352,7 @@ void php_print_credits(int flag)
|
||||
CREDIT_LINE("System V Shared Memory", "Christian Cartus");
|
||||
CREDIT_LINE("System V Semaphores", "Tom May");
|
||||
CREDIT_LINE("WDDX", "Andrey Zmievski");
|
||||
CREDIT_LINE("XML", "Stig Bakken");
|
||||
CREDIT_LINE("XML", "Stig Bakken, Thies C. Arntzen");
|
||||
CREDIT_LINE("Yellow Pages", "Stephanie Wehner");
|
||||
CREDIT_LINE("Zlib", "Rasmus Lerdorf, Stefan Roehrich");
|
||||
PUTS("</table>\n");
|
||||
|
240
ext/xml/xml.c
240
ext/xml/xml.c
@ -13,6 +13,7 @@
|
||||
| license@php.net so we can mail you a copy immediately. |
|
||||
+----------------------------------------------------------------------+
|
||||
| Authors: Stig Sæther Bakken <ssb@fast.no> |
|
||||
| Thies C. Arntzen <thies@digicol.de> |
|
||||
+----------------------------------------------------------------------+
|
||||
*/
|
||||
|
||||
@ -119,7 +120,7 @@ PHP_RSHUTDOWN_FUNCTION(xml);
|
||||
PHP_MINFO_FUNCTION(xml);
|
||||
|
||||
static void xml_destroy_parser(xml_parser *);
|
||||
static void xml_set_handler(char **, pval *);
|
||||
static void xml_set_handler(char **, pval **);
|
||||
inline static unsigned short xml_encode_iso_8859_1(unsigned char);
|
||||
inline static char xml_decode_iso_8859_1(unsigned short);
|
||||
inline static unsigned short xml_encode_us_ascii(unsigned char);
|
||||
@ -335,14 +336,14 @@ xml_destroy_parser(xml_parser *parser)
|
||||
/* {{{ xml_set_handler() */
|
||||
|
||||
static void
|
||||
xml_set_handler(char **nameBufp, pval *data)
|
||||
xml_set_handler(char **nameBufp, pval **data)
|
||||
{
|
||||
if (data->value.str.len > 0) {
|
||||
if ((*data)->value.str.len > 0) {
|
||||
if (*nameBufp != NULL) {
|
||||
efree(*nameBufp);
|
||||
}
|
||||
convert_to_string(data);
|
||||
*nameBufp = estrndup(data->value.str.val, data->value.str.len);
|
||||
convert_to_string_ex(data);
|
||||
*nameBufp = estrndup((*data)->value.str.val, (*data)->value.str.len);
|
||||
} else {
|
||||
if (*nameBufp != NULL) {
|
||||
efree(*nameBufp);
|
||||
@ -361,17 +362,26 @@ xml_call_handler(xml_parser *parser, char *funcName, int argc, pval **argv)
|
||||
|
||||
if (parser && funcName) {
|
||||
pval *retval, *func;
|
||||
int i;
|
||||
int i;
|
||||
int result;
|
||||
|
||||
func = php3i_string_pval(funcName);
|
||||
retval = emalloc(sizeof(pval));
|
||||
|
||||
MAKE_STD_ZVAL(retval);
|
||||
retval->type = IS_BOOL;
|
||||
retval->value.lval = IS_BOOL;
|
||||
|
||||
/* We cannot call internal variables from a function module as
|
||||
it breaks any chance of compiling it as a module on windows.
|
||||
Instead, we create a callback function. */
|
||||
if (call_user_function(EG(function_table), NULL, func, retval, argc, argv) == FAILURE) {
|
||||
|
||||
result = call_user_function(EG(function_table), NULL, func, retval, argc, argv);
|
||||
|
||||
if (result == FAILURE) {
|
||||
php_error(E_WARNING, "Unable to call %s()",funcName);
|
||||
|
||||
zval_dtor(retval);
|
||||
efree(retval);
|
||||
return NULL;
|
||||
}
|
||||
zval_dtor(func);
|
||||
efree(func);
|
||||
@ -379,7 +389,11 @@ xml_call_handler(xml_parser *parser, char *funcName, int argc, pval **argv)
|
||||
zval_dtor(argv[i]);
|
||||
efree(argv[i]);
|
||||
}
|
||||
return retval;
|
||||
if (result == FAILURE) {
|
||||
return NULL;
|
||||
} else {
|
||||
return retval;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
@ -987,34 +1001,34 @@ PHP_FUNCTION(xml_parser_create)
|
||||
{
|
||||
xml_parser *parser;
|
||||
int argc;
|
||||
pval *encodingArg = NULL;
|
||||
pval **encodingArg;
|
||||
XML_Char *encoding;
|
||||
char thisfunc[] = "xml_parser_create";
|
||||
XMLLS_FETCH();
|
||||
|
||||
argc = ARG_COUNT(ht);
|
||||
|
||||
if (argc > 1 || getParameters(ht, argc, &encodingArg) == FAILURE) {
|
||||
if (argc > 1 || getParametersEx(argc, &encodingArg) == FAILURE) {
|
||||
WRONG_PARAM_COUNT;
|
||||
}
|
||||
|
||||
if (argc == 1) {
|
||||
convert_to_string(encodingArg);
|
||||
convert_to_string_ex(encodingArg);
|
||||
/* The supported encoding types are hardcoded here because
|
||||
* we are limited to the encodings supported by expat/xmltok.
|
||||
*/
|
||||
if (strncasecmp(encodingArg->value.str.val, "ISO-8859-1",
|
||||
encodingArg->value.str.len) == 0) {
|
||||
if (strncasecmp((*encodingArg)->value.str.val, "ISO-8859-1",
|
||||
(*encodingArg)->value.str.len) == 0) {
|
||||
encoding = "ISO-8859-1";
|
||||
} else if (strncasecmp(encodingArg->value.str.val, "UTF-8",
|
||||
encodingArg->value.str.len) == 0) {
|
||||
} else if (strncasecmp((*encodingArg)->value.str.val, "UTF-8",
|
||||
(*encodingArg)->value.str.len) == 0) {
|
||||
encoding = "UTF-8";
|
||||
} else if (strncasecmp(encodingArg->value.str.val, "US-ASCII",
|
||||
encodingArg->value.str.len) == 0) {
|
||||
} else if (strncasecmp((*encodingArg)->value.str.val, "US-ASCII",
|
||||
(*encodingArg)->value.str.len) == 0) {
|
||||
encoding = "US-ASCII";
|
||||
} else { /* UTF-16 not supported */
|
||||
php_error(E_WARNING, "%s: unsupported source encoding \"%s\"",
|
||||
thisfunc, encodingArg->value.str.val);
|
||||
thisfunc, (*encodingArg)->value.str.val);
|
||||
RETURN_FALSE;
|
||||
}
|
||||
} else {
|
||||
@ -1037,17 +1051,14 @@ PHP_FUNCTION(xml_parser_create)
|
||||
PHP_FUNCTION(xml_set_element_handler)
|
||||
{
|
||||
xml_parser *parser;
|
||||
pval *pind, *shdl, *ehdl;
|
||||
pval **pind, **shdl, **ehdl;
|
||||
|
||||
if (ARG_COUNT(ht) != 3 ||
|
||||
getParameters(ht, 3, &pind, &shdl, &ehdl) == FAILURE) {
|
||||
getParametersEx(3, &pind, &shdl, &ehdl) == FAILURE) {
|
||||
WRONG_PARAM_COUNT;
|
||||
}
|
||||
|
||||
ZEND_FETCH_RESOURCE(parser,xml_parser *, &pind, -1, "XML Parser", le_xml_parser);
|
||||
|
||||
convert_to_string(shdl);
|
||||
convert_to_string(ehdl);
|
||||
ZEND_FETCH_RESOURCE(parser,xml_parser *,pind, -1, "XML Parser", le_xml_parser);
|
||||
|
||||
xml_set_handler(&parser->startElementHandler, shdl);
|
||||
xml_set_handler(&parser->endElementHandler, ehdl);
|
||||
@ -1061,15 +1072,13 @@ PHP_FUNCTION(xml_set_element_handler)
|
||||
PHP_FUNCTION(xml_set_character_data_handler)
|
||||
{
|
||||
xml_parser *parser;
|
||||
pval *pind, *hdl;
|
||||
pval **pind, **hdl;
|
||||
|
||||
if (ARG_COUNT(ht) != 2 || getParameters(ht, 2, &pind, &hdl) == FAILURE) {
|
||||
if (ARG_COUNT(ht) != 2 || getParametersEx(2, &pind, &hdl) == FAILURE) {
|
||||
WRONG_PARAM_COUNT;
|
||||
}
|
||||
|
||||
ZEND_FETCH_RESOURCE(parser,xml_parser *, &pind, -1, "XML Parser", le_xml_parser);
|
||||
|
||||
convert_to_string(hdl);
|
||||
ZEND_FETCH_RESOURCE(parser,xml_parser *, pind, -1, "XML Parser", le_xml_parser);
|
||||
|
||||
xml_set_handler(&parser->characterDataHandler, hdl);
|
||||
XML_SetCharacterDataHandler(parser->parser, php3i_xml_characterDataHandler);
|
||||
@ -1082,15 +1091,13 @@ PHP_FUNCTION(xml_set_character_data_handler)
|
||||
PHP_FUNCTION(xml_set_processing_instruction_handler)
|
||||
{
|
||||
xml_parser *parser;
|
||||
pval *pind, *hdl;
|
||||
pval **pind, **hdl;
|
||||
|
||||
if (ARG_COUNT(ht) != 2 || getParameters(ht, 2, &pind, &hdl) == FAILURE) {
|
||||
if (ARG_COUNT(ht) != 2 || getParametersEx(2, &pind, &hdl) == FAILURE) {
|
||||
WRONG_PARAM_COUNT;
|
||||
}
|
||||
|
||||
ZEND_FETCH_RESOURCE(parser,xml_parser *, &pind, -1, "XML Parser", le_xml_parser);
|
||||
|
||||
convert_to_string(hdl);
|
||||
ZEND_FETCH_RESOURCE(parser,xml_parser *, pind, -1, "XML Parser", le_xml_parser);
|
||||
|
||||
xml_set_handler(&parser->processingInstructionHandler, hdl);
|
||||
XML_SetProcessingInstructionHandler(parser->parser, php3i_xml_processingInstructionHandler);
|
||||
@ -1103,14 +1110,12 @@ PHP_FUNCTION(xml_set_processing_instruction_handler)
|
||||
PHP_FUNCTION(xml_set_default_handler)
|
||||
{
|
||||
xml_parser *parser;
|
||||
pval *pind, *hdl;
|
||||
pval **pind, **hdl;
|
||||
|
||||
if (ARG_COUNT(ht) != 2 || getParameters(ht, 2, &pind, &hdl) == FAILURE) {
|
||||
if (ARG_COUNT(ht) != 2 || getParametersEx(2, &pind, &hdl) == FAILURE) {
|
||||
WRONG_PARAM_COUNT;
|
||||
}
|
||||
ZEND_FETCH_RESOURCE(parser,xml_parser *, &pind, -1, "XML Parser", le_xml_parser);
|
||||
|
||||
convert_to_string(hdl);
|
||||
ZEND_FETCH_RESOURCE(parser,xml_parser *, pind, -1, "XML Parser", le_xml_parser);
|
||||
|
||||
xml_set_handler(&parser->defaultHandler, hdl);
|
||||
XML_SetDefaultHandler(parser->parser, php3i_xml_defaultHandler);
|
||||
@ -1123,15 +1128,13 @@ PHP_FUNCTION(xml_set_default_handler)
|
||||
PHP_FUNCTION(xml_set_unparsed_entity_decl_handler)
|
||||
{
|
||||
xml_parser *parser;
|
||||
pval *pind, *hdl;
|
||||
pval **pind, **hdl;
|
||||
|
||||
if (ARG_COUNT(ht) != 2 || getParameters(ht, 2, &pind, &hdl) == FAILURE) {
|
||||
if (ARG_COUNT(ht) != 2 || getParametersEx(2, &pind, &hdl) == FAILURE) {
|
||||
WRONG_PARAM_COUNT;
|
||||
}
|
||||
|
||||
ZEND_FETCH_RESOURCE(parser,xml_parser *, &pind, -1, "XML Parser", le_xml_parser);
|
||||
|
||||
convert_to_string(hdl);
|
||||
ZEND_FETCH_RESOURCE(parser,xml_parser *, pind, -1, "XML Parser", le_xml_parser);
|
||||
|
||||
xml_set_handler(&parser->unparsedEntityDeclHandler, hdl);
|
||||
XML_SetUnparsedEntityDeclHandler(parser->parser, php3i_xml_unparsedEntityDeclHandler);
|
||||
@ -1144,14 +1147,12 @@ PHP_FUNCTION(xml_set_unparsed_entity_decl_handler)
|
||||
PHP_FUNCTION(xml_set_notation_decl_handler)
|
||||
{
|
||||
xml_parser *parser;
|
||||
pval *pind, *hdl;
|
||||
pval **pind, **hdl;
|
||||
|
||||
if (ARG_COUNT(ht) != 2 || getParameters(ht, 2, &pind, &hdl) == FAILURE) {
|
||||
if (ARG_COUNT(ht) != 2 || getParametersEx(2, &pind, &hdl) == FAILURE) {
|
||||
WRONG_PARAM_COUNT;
|
||||
}
|
||||
ZEND_FETCH_RESOURCE(parser,xml_parser *, &pind, -1, "XML Parser", le_xml_parser);
|
||||
|
||||
convert_to_string(hdl);
|
||||
ZEND_FETCH_RESOURCE(parser,xml_parser *, pind, -1, "XML Parser", le_xml_parser);
|
||||
|
||||
xml_set_handler(&parser->notationDeclHandler, hdl);
|
||||
XML_SetNotationDeclHandler(parser->parser, php3i_xml_notationDeclHandler);
|
||||
@ -1164,14 +1165,12 @@ PHP_FUNCTION(xml_set_notation_decl_handler)
|
||||
PHP_FUNCTION(xml_set_external_entity_ref_handler)
|
||||
{
|
||||
xml_parser *parser;
|
||||
pval *pind, *hdl;
|
||||
pval **pind, **hdl;
|
||||
|
||||
if (ARG_COUNT(ht) != 2 || getParameters(ht, 2, &pind, &hdl) == FAILURE) {
|
||||
if (ARG_COUNT(ht) != 2 || getParametersEx(2, &pind, &hdl) == FAILURE) {
|
||||
WRONG_PARAM_COUNT;
|
||||
}
|
||||
ZEND_FETCH_RESOURCE(parser,xml_parser *, &pind, -1, "XML Parser", le_xml_parser);
|
||||
|
||||
convert_to_string(hdl);
|
||||
ZEND_FETCH_RESOURCE(parser,xml_parser *, pind, -1, "XML Parser", le_xml_parser);
|
||||
|
||||
xml_set_handler(&parser->externalEntityRefHandler, hdl);
|
||||
XML_SetExternalEntityRefHandler(parser->parser, php3i_xml_externalEntityRefHandler);
|
||||
@ -1184,25 +1183,25 @@ PHP_FUNCTION(xml_set_external_entity_ref_handler)
|
||||
PHP_FUNCTION(xml_parse)
|
||||
{
|
||||
xml_parser *parser;
|
||||
pval *pind, *data, *final;
|
||||
pval **pind, **data, **final;
|
||||
int argc, isFinal, ret;
|
||||
|
||||
argc = ARG_COUNT(ht);
|
||||
if (argc < 2 || argc > 3 || getParameters(ht, argc, &pind, &data, &final) == FAILURE) {
|
||||
if (argc < 2 || argc > 3 || getParametersEx(argc, &pind, &data, &final) == FAILURE) {
|
||||
WRONG_PARAM_COUNT;
|
||||
}
|
||||
ZEND_FETCH_RESOURCE(parser,xml_parser *, &pind, -1, "XML Parser", le_xml_parser);
|
||||
ZEND_FETCH_RESOURCE(parser,xml_parser *, pind, -1, "XML Parser", le_xml_parser);
|
||||
|
||||
convert_to_string(data);
|
||||
convert_to_string_ex(data);
|
||||
|
||||
if (argc == 3) {
|
||||
convert_to_long(final);
|
||||
isFinal = final->value.lval;
|
||||
convert_to_long_ex(final);
|
||||
isFinal = (*final)->value.lval;
|
||||
} else {
|
||||
isFinal = 0;
|
||||
}
|
||||
|
||||
ret = XML_Parse(parser->parser, data->value.str.val, data->value.str.len, isFinal);
|
||||
ret = XML_Parse(parser->parser, (*data)->value.str.val, (*data)->value.str.len, isFinal);
|
||||
RETVAL_LONG(ret);
|
||||
}
|
||||
|
||||
@ -1213,17 +1212,18 @@ PHP_FUNCTION(xml_parse)
|
||||
PHP_FUNCTION(xml_parse_into_struct)
|
||||
{
|
||||
xml_parser *parser;
|
||||
pval *pind, *data, *xdata,*info = 0;
|
||||
pval **pind, **data, **xdata, **info = 0;
|
||||
int argc, ret;
|
||||
|
||||
argc = ARG_COUNT(ht);
|
||||
if (getParameters(ht, 4, &pind, &data, &xdata,&info) == SUCCESS) {
|
||||
if (getParametersEx(4, &pind, &data, &xdata,&info) == SUCCESS) {
|
||||
if (!ParameterPassedByReference(ht, 4)) {
|
||||
php_error(E_WARNING, "Array to be filled with values must be passed by reference.");
|
||||
RETURN_FALSE;
|
||||
}
|
||||
array_init(info);
|
||||
} else if (getParameters(ht, 3, &pind, &data, &xdata) == FAILURE) {
|
||||
pval_destructor(*info);
|
||||
array_init(*info);
|
||||
} else if (getParametersEx(3, &pind, &data, &xdata) == FAILURE) {
|
||||
WRONG_PARAM_COUNT;
|
||||
}
|
||||
|
||||
@ -1232,13 +1232,15 @@ PHP_FUNCTION(xml_parse_into_struct)
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
ZEND_FETCH_RESOURCE(parser,xml_parser *, &pind, -1, "XML Parser", le_xml_parser);
|
||||
ZEND_FETCH_RESOURCE(parser,xml_parser *, pind, -1, "XML Parser", le_xml_parser);
|
||||
|
||||
convert_to_string(data);
|
||||
array_init(xdata);
|
||||
convert_to_string_ex(data);
|
||||
pval_destructor(*xdata);
|
||||
array_init(*xdata);
|
||||
|
||||
parser->data = xdata;
|
||||
parser->info = info;
|
||||
parser->data = *xdata;
|
||||
if (info)
|
||||
parser->info = *info;
|
||||
parser->level = 0;
|
||||
parser->ltags = emalloc(XML_MAXLEVEL * sizeof(char *));
|
||||
|
||||
@ -1246,7 +1248,7 @@ PHP_FUNCTION(xml_parse_into_struct)
|
||||
XML_SetElementHandler(parser->parser, php3i_xml_startElementHandler, php3i_xml_endElementHandler);
|
||||
XML_SetCharacterDataHandler(parser->parser, php3i_xml_characterDataHandler);
|
||||
|
||||
ret = XML_Parse(parser->parser, data->value.str.val, data->value.str.len, 1);
|
||||
ret = XML_Parse(parser->parser, (*data)->value.str.val, (*data)->value.str.len, 1);
|
||||
|
||||
RETVAL_LONG(ret);
|
||||
}
|
||||
@ -1257,12 +1259,12 @@ PHP_FUNCTION(xml_parse_into_struct)
|
||||
PHP_FUNCTION(xml_get_error_code)
|
||||
{
|
||||
xml_parser *parser;
|
||||
pval *pind;
|
||||
pval **pind;
|
||||
|
||||
if (ARG_COUNT(ht) != 1 || getParameters(ht, 1, &pind) == FAILURE) {
|
||||
if (ARG_COUNT(ht) != 1 || getParametersEx(1, &pind) == FAILURE) {
|
||||
WRONG_PARAM_COUNT;
|
||||
}
|
||||
ZEND_FETCH_RESOURCE(parser,xml_parser *, &pind, -1, "XML Parser", le_xml_parser);
|
||||
ZEND_FETCH_RESOURCE(parser,xml_parser *, pind, -1, "XML Parser", le_xml_parser);
|
||||
|
||||
RETVAL_LONG((long)XML_GetErrorCode(parser->parser));
|
||||
}
|
||||
@ -1272,14 +1274,14 @@ PHP_FUNCTION(xml_get_error_code)
|
||||
Get XML parser error string */
|
||||
PHP_FUNCTION(xml_error_string)
|
||||
{
|
||||
pval *code;
|
||||
pval **code;
|
||||
char *str;
|
||||
|
||||
if (ARG_COUNT(ht) != 1 || getParameters(ht, 1, &code) == FAILURE) {
|
||||
if (ARG_COUNT(ht) != 1 || getParametersEx(1, &code) == FAILURE) {
|
||||
WRONG_PARAM_COUNT;
|
||||
}
|
||||
convert_to_long(code);
|
||||
str = (char *)XML_ErrorString((int)code->value.lval);
|
||||
convert_to_long_ex(code);
|
||||
str = (char *)XML_ErrorString((int)(*code)->value.lval);
|
||||
if (str) {
|
||||
RETVAL_STRING(str, 1);
|
||||
}
|
||||
@ -1291,12 +1293,12 @@ PHP_FUNCTION(xml_error_string)
|
||||
PHP_FUNCTION(xml_get_current_line_number)
|
||||
{
|
||||
xml_parser *parser;
|
||||
pval *pind;
|
||||
pval **pind;
|
||||
|
||||
if (ARG_COUNT(ht) != 1 || getParameters(ht, 1, &pind) == FAILURE) {
|
||||
if (ARG_COUNT(ht) != 1 || getParametersEx(1, &pind) == FAILURE) {
|
||||
WRONG_PARAM_COUNT;
|
||||
}
|
||||
ZEND_FETCH_RESOURCE(parser,xml_parser *, &pind, -1, "XML Parser", le_xml_parser);
|
||||
ZEND_FETCH_RESOURCE(parser,xml_parser *, pind, -1, "XML Parser", le_xml_parser);
|
||||
|
||||
RETVAL_LONG(XML_GetCurrentLineNumber(parser->parser));
|
||||
}
|
||||
@ -1308,12 +1310,12 @@ PHP_FUNCTION(xml_get_current_line_number)
|
||||
PHP_FUNCTION(xml_get_current_column_number)
|
||||
{
|
||||
xml_parser *parser;
|
||||
pval *pind;
|
||||
pval **pind;
|
||||
|
||||
if (ARG_COUNT(ht) != 1 || getParameters(ht, 1, &pind) == FAILURE) {
|
||||
if (ARG_COUNT(ht) != 1 || getParametersEx(1, &pind) == FAILURE) {
|
||||
WRONG_PARAM_COUNT;
|
||||
}
|
||||
ZEND_FETCH_RESOURCE(parser,xml_parser *, &pind, -1, "XML Parser", le_xml_parser);
|
||||
ZEND_FETCH_RESOURCE(parser,xml_parser *, pind, -1, "XML Parser", le_xml_parser);
|
||||
|
||||
RETVAL_LONG(XML_GetCurrentColumnNumber(parser->parser));
|
||||
}
|
||||
@ -1324,12 +1326,12 @@ PHP_FUNCTION(xml_get_current_column_number)
|
||||
PHP_FUNCTION(xml_get_current_byte_index)
|
||||
{
|
||||
xml_parser *parser;
|
||||
pval *pind;
|
||||
pval **pind;
|
||||
|
||||
if (ARG_COUNT(ht) != 1 || getParameters(ht, 1, &pind) == FAILURE) {
|
||||
if (ARG_COUNT(ht) != 1 || getParametersEx(1, &pind) == FAILURE) {
|
||||
WRONG_PARAM_COUNT;
|
||||
}
|
||||
ZEND_FETCH_RESOURCE(parser,xml_parser *, &pind, -1, "XML Parser", le_xml_parser);
|
||||
ZEND_FETCH_RESOURCE(parser,xml_parser *, pind, -1, "XML Parser", le_xml_parser);
|
||||
|
||||
RETVAL_LONG(XML_GetCurrentByteIndex(parser->parser));
|
||||
}
|
||||
@ -1339,14 +1341,14 @@ PHP_FUNCTION(xml_get_current_byte_index)
|
||||
Free an XML parser */
|
||||
PHP_FUNCTION(xml_parser_free)
|
||||
{
|
||||
pval *pind;
|
||||
pval **pind;
|
||||
xml_parser *parser;
|
||||
|
||||
if (ARG_COUNT(ht) != 1 || getParameters(ht, 1, &pind) == FAILURE) {
|
||||
if (ARG_COUNT(ht) != 1 || getParametersEx(1, &pind) == FAILURE) {
|
||||
WRONG_PARAM_COUNT;
|
||||
}
|
||||
|
||||
ZEND_FETCH_RESOURCE(parser,xml_parser *, &pind, -1, "XML Parser", le_xml_parser);
|
||||
ZEND_FETCH_RESOURCE(parser,xml_parser *, pind, -1, "XML Parser", le_xml_parser);
|
||||
|
||||
if (php3_list_delete(parser->index) == FAILURE) {
|
||||
RETURN_FALSE;
|
||||
@ -1361,34 +1363,36 @@ PHP_FUNCTION(xml_parser_free)
|
||||
PHP_FUNCTION(xml_parser_set_option)
|
||||
{
|
||||
xml_parser *parser;
|
||||
pval *pind, *opt, *val;
|
||||
pval **pind, **opt, **val;
|
||||
char thisfunc[] = "xml_parser_set_option";
|
||||
|
||||
if (ARG_COUNT(ht) != 3 || getParameters(ht, 3, &pind, &opt, &val) == FAILURE) {
|
||||
if (ARG_COUNT(ht) != 3 || getParametersEx(3, &pind, &opt, &val) == FAILURE) {
|
||||
WRONG_PARAM_COUNT;
|
||||
}
|
||||
ZEND_FETCH_RESOURCE(parser,xml_parser *, &pind, -1, "XML Parser", le_xml_parser);
|
||||
ZEND_FETCH_RESOURCE(parser,xml_parser *, pind, -1, "XML Parser", le_xml_parser);
|
||||
|
||||
convert_to_long(opt);
|
||||
convert_to_long_ex(opt);
|
||||
|
||||
switch (opt->value.lval) {
|
||||
switch ((*opt)->value.lval) {
|
||||
case PHP3_XML_OPTION_CASE_FOLDING:
|
||||
convert_to_long(val);
|
||||
parser->case_folding = val->value.lval;
|
||||
convert_to_long_ex(val);
|
||||
parser->case_folding = (*val)->value.lval;
|
||||
break;
|
||||
case PHP3_XML_OPTION_SKIP_TAGSTART:
|
||||
convert_to_long(val);
|
||||
parser->toffset = val->value.lval;
|
||||
convert_to_long_ex(val);
|
||||
parser->toffset = (*val)->value.lval;
|
||||
break;
|
||||
case PHP3_XML_OPTION_SKIP_WHITE:
|
||||
convert_to_long(val);
|
||||
parser->skipwhite = val->value.lval;
|
||||
convert_to_long_ex(val);
|
||||
parser->skipwhite = (*val)->value.lval;
|
||||
break;
|
||||
case PHP3_XML_OPTION_TARGET_ENCODING: {
|
||||
xml_encoding *enc = xml_get_encoding(val->value.str.val);
|
||||
xml_encoding *enc;
|
||||
convert_to_string_ex(val);
|
||||
enc = xml_get_encoding((*val)->value.str.val);
|
||||
if (enc == NULL) {
|
||||
php_error(E_WARNING, "%s: unsupported target encoding \"%s\"",
|
||||
thisfunc, val->value.str.val);
|
||||
thisfunc, (*val)->value.str.val);
|
||||
RETURN_FALSE;
|
||||
}
|
||||
parser->target_encoding = enc->name;
|
||||
@ -1408,17 +1412,17 @@ PHP_FUNCTION(xml_parser_set_option)
|
||||
PHP_FUNCTION(xml_parser_get_option)
|
||||
{
|
||||
xml_parser *parser;
|
||||
pval *pind, *opt;
|
||||
pval **pind, **opt;
|
||||
char thisfunc[] = "xml_parser_get_option";
|
||||
|
||||
if (ARG_COUNT(ht) != 2 || getParameters(ht, 2, &pind, &opt) == FAILURE) {
|
||||
if (ARG_COUNT(ht) != 2 || getParametersEx(2, &pind, &opt) == FAILURE) {
|
||||
WRONG_PARAM_COUNT;
|
||||
}
|
||||
ZEND_FETCH_RESOURCE(parser,xml_parser *, &pind, -1, "XML Parser", le_xml_parser);
|
||||
ZEND_FETCH_RESOURCE(parser,xml_parser *, pind, -1, "XML Parser", le_xml_parser);
|
||||
|
||||
convert_to_long(opt);
|
||||
convert_to_long_ex(opt);
|
||||
|
||||
switch (opt->value.lval) {
|
||||
switch ((*opt)->value.lval) {
|
||||
case PHP3_XML_OPTION_CASE_FOLDING:
|
||||
RETURN_LONG(parser->case_folding);
|
||||
break;
|
||||
@ -1438,15 +1442,15 @@ PHP_FUNCTION(xml_parser_get_option)
|
||||
Encodes an ISO-8859-1 string to UTF-8 */
|
||||
PHP_FUNCTION(utf8_encode)
|
||||
{
|
||||
pval *arg;
|
||||
pval **arg;
|
||||
XML_Char *encoded;
|
||||
int len;
|
||||
|
||||
if (ARG_COUNT(ht) != 1 || getParameters(ht, 1, &arg) == FAILURE) {
|
||||
if (ARG_COUNT(ht) != 1 || getParametersEx(1, &arg) == FAILURE) {
|
||||
WRONG_PARAM_COUNT;
|
||||
}
|
||||
convert_to_string(arg);
|
||||
encoded = xml_utf8_encode(arg->value.str.val, arg->value.str.len, &len, "ISO-8859-1");
|
||||
convert_to_string_ex(arg);
|
||||
encoded = xml_utf8_encode((*arg)->value.str.val, (*arg)->value.str.len, &len, "ISO-8859-1");
|
||||
if (encoded == NULL) {
|
||||
RETURN_FALSE;
|
||||
}
|
||||
@ -1458,15 +1462,15 @@ PHP_FUNCTION(utf8_encode)
|
||||
Converts a UTF-8 encoded string to ISO-8859-1 */
|
||||
PHP_FUNCTION(utf8_decode)
|
||||
{
|
||||
pval *arg;
|
||||
pval **arg;
|
||||
XML_Char *decoded;
|
||||
int len;
|
||||
|
||||
if (ARG_COUNT(ht) != 1 || getParameters(ht, 1, &arg) == FAILURE) {
|
||||
if (ARG_COUNT(ht) != 1 || getParametersEx(1, &arg) == FAILURE) {
|
||||
WRONG_PARAM_COUNT;
|
||||
}
|
||||
convert_to_string(arg);
|
||||
decoded = xml_utf8_decode(arg->value.str.val, arg->value.str.len, &len, "ISO-8859-1");
|
||||
convert_to_string_ex(arg);
|
||||
decoded = xml_utf8_decode((*arg)->value.str.val, (*arg)->value.str.len, &len, "ISO-8859-1");
|
||||
if (decoded == NULL) {
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user