]> granicus.if.org Git - php/commitdiff
updated XML (only partly tested)
authorThies C. Arntzen <thies@php.net>
Fri, 24 Sep 1999 18:02:58 +0000 (18:02 +0000)
committerThies C. Arntzen <thies@php.net>
Fri, 24 Sep 1999 18:02:58 +0000 (18:02 +0000)
ChangeLog
ext/standard/info.c
ext/xml/xml.c

index edcc2e895d8a84308323cb70524ad79736d4bb61..7dfdc3e019eb7fbc34e7c85b742fb42f2d5506ab 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -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.
index e2f4a8d20f3a5d839cb46e1a318cf3787186db82..28fa26813f7eba3ef2e373039e1bcbf8991549ed 100644 (file)
@@ -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");
index b26b97c842a9647a2510c66ed46aebd17f2df12a..532530978994e8bb2c45451f748d196e4ab154af 100644 (file)
@@ -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;
        }