Re: cvs: php4 /ext/xml php_xml.h xml.c
| From: | Andi Gutmans | Date: | Wed, 23 Aug 2000 04:03:01 +0000 |
| Subject: | Re: cvs: php4 /ext/xml php_xml.h xml.c | ||
| References: | 1 | Groups: | php.cvs |
| Request: | Send a blank email to php-cvs+get-1333@lists.php.net to get a copy of this message | ||
Andrei,
Let's try and keep down the amount of feature patches being introduced. We should only submit serious bug-fixes at this stage IMO.
Andi
At 07:32 PM 8/22/00 +0000, Andrei Zmievski wrote:
--- Andi Gutmans <andi@zend.com> http://www.zend.com/andrei Tue Aug 22 12:32:07 2000 EDTModified files:/php4/ext/xml php_xml.h xml.cLog: @- Added ability for each xml_set_*_handler() function to take the @ array($obj, 'method') syntax for the handler argument as well @ as the normal function name. (Andrei) Index: php4/ext/xml/php_xml.h diff -u php4/ext/xml/php_xml.h:1.12 php4/ext/xml/php_xml.h:1.13 --- php4/ext/xml/php_xml.h:1.12 Sun Jul 2 16:46:49 2000+++ php4/ext/xml/php_xml.h Tue Aug 22 12:32:07 2000@@ -17,7 +17,7 @@+----------------------------------------------------------------------+*/ -/* $Id: php_xml.h,v 1.12 2000/07/02 23:46:49 sas Exp $ */ +/* $Id: php_xml.h,v 1.13 2000/08/22 19:32:07 andrei Exp $ */ #ifndef PHP_XML_H #define PHP_XML_H @@ -58,15 +58,15 @@int case_folding; XML_Parser parser; XML_Char *target_encoding; - char *startElementHandler; - char *endElementHandler; - char *characterDataHandler; - char *processingInstructionHandler; - char *defaultHandler; - char *unparsedEntityDeclHandler; - char *notationDeclHandler; - char *externalEntityRefHandler; - char *unknownEncodingHandler; + zval *startElementHandler; + zval *endElementHandler; + zval *characterDataHandler; + zval *processingInstructionHandler; + zval *defaultHandler; + zval *unparsedEntityDeclHandler; + zval *notationDeclHandler; + zval *externalEntityRefHandler; + zval *unknownEncodingHandler;zval *object;Index: php4/ext/xml/xml.c diff -u php4/ext/xml/xml.c:1.59 php4/ext/xml/xml.c:1.60--- php4/ext/xml/xml.c:1.59 Sun Aug 20 08:59:54 2000+++ php4/ext/xml/xml.c Tue Aug 22 12:32:07 2000 @@ -17,7 +17,7 @@+----------------------------------------------------------------------+*/ -/* $Id: xml.c,v 1.59 2000/08/20 15:59:54 stas Exp $ */ +/* $Id: xml.c,v 1.60 2000/08/22 19:32:07 andrei Exp $ */ #define IS_EXT_MODULE #include "php.h" @@ -70,13 +70,13 @@ PHP_MINFO_FUNCTION(xml); static void xml_parser_dtor(xml_parser *); -static void xml_set_handler(char **, zval **); +static void xml_set_handler(zval **, zval **); 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); inline static char xml_decode_us_ascii(unsigned short); static XML_Char *xml_utf8_encode(const char *, int, int *, const XML_Char *); -static zval *xml_call_handler(xml_parser *, char *, int, zval **); +static zval *xml_call_handler(xml_parser *, zval *, int, zval **); static zval *_xml_xmlchar_zval(const XML_Char *, int, const XML_Char *); static int _xml_xmlcharlen(const XML_Char *); static void _xml_add_to_info(xml_parser *parser,char *name); @@ -295,31 +295,31 @@efree(parser->ltags); } if (parser->startElementHandler) { - efree(parser->startElementHandler); + zval_del_ref(&parser->startElementHandler); } if (parser->endElementHandler) { - efree(parser->endElementHandler); + zval_del_ref(&parser->endElementHandler); } if (parser->characterDataHandler) { - efree(parser->characterDataHandler); + zval_del_ref(&parser->characterDataHandler); } if (parser->processingInstructionHandler) { - efree(parser->processingInstructionHandler); + zval_del_ref(&parser->processingInstructionHandler); } if (parser->defaultHandler) { - efree(parser->defaultHandler); + zval_del_ref(&parser->defaultHandler); } if (parser->unparsedEntityDeclHandler) { - efree(parser->unparsedEntityDeclHandler); + zval_del_ref(&parser->unparsedEntityDeclHandler); } if (parser->notationDeclHandler) { - efree(parser->notationDeclHandler); + zval_del_ref(&parser->notationDeclHandler); } if (parser->externalEntityRefHandler) { - efree(parser->externalEntityRefHandler); + zval_del_ref(&parser->externalEntityRefHandler); } if (parser->unknownEncodingHandler) { - efree(parser->unknownEncodingHandler); + zval_del_ref(&parser->unknownEncodingHandler); } if (parser->baseURI) { efree(parser->baseURI);@@ -332,52 +332,53 @@/* {{{ xml_set_handler() */static void -xml_set_handler(char **nameBufp, zval **data) +xml_set_handler(zval **handler, zval **data) {- convert_to_string_ex(data);-- if ((*data)->value.str.len > 0) { - if (*nameBufp != NULL) { - efree(*nameBufp); - } - *nameBufp = estrndup((*data)->value.str.val, (*data)->value.str.len); - } else { - if (*nameBufp != NULL) { - efree(*nameBufp); - } - *nameBufp = NULL; + /* IS_ARRAY might indicate that we're using array($obj, 'method') syntax */ + if (Z_TYPE_PP(data) != IS_ARRAY) { + convert_to_string_ex(data); }++ zval_add_ref(data); + *handler = *data;} /* }}} *//* {{{ xml_call_handler() */static zval * -xml_call_handler(xml_parser *parser, char *funcName, int argc, zval **argv) +xml_call_handler(xml_parser *parser, zval *handler, int argc, zval **argv) {ELS_FETCH();- if (parser && funcName) { - zval *retval, *func; + if (parser && handler) { + zval *retval; int i; int result;- func = _xml_string_zval(funcName);-MAKE_STD_ZVAL(retval); retval->type = IS_BOOL; retval->value.lval = 0;- result = call_user_function(EG(function_table), parser->object, func, retval, argc, argv); + result = call_user_function(EG(function_table), parser->object, handler, retval, argc, argv);if (result == FAILURE) { - php_error(E_WARNING, "Unable to call %s()",funcName); + zval **method; + zval **obj;++ if (Z_TYPE_P(handler) == IS_STRING) { + php_error(E_WARNING, "Unable to call handler %s()", Z_STRVAL_P(handler)); + } else if (zend_hash_index_find(handler->value.ht, 0, (void **) &obj) == SUCCESS && + zend_hash_index_find(handler->value.ht, 1, (void **) &method) == SUCCESS && + Z_TYPE_PP(obj) == IS_OBJECT && + Z_TYPE_PP(method) == IS_STRING) { + php_error(E_WARNING, "Unable to call handler %s::%s()", (*obj)->value.obj.ce->name, Z_STRVAL_PP(method)); + } else + php_error(E_WARNING, "Unable to call handler");zval_dtor(retval); efree(retval); }-- zval_del_ref(&func);for (i = 0; i < argc; i++) { zval_del_ref(&(argv[i]));-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, e-mail: php-cvs-unsubscribe@lists.php.net For additional commands, e-mail: php-cvs-help@lists.php.net To contact the list administrators, e-mail: php-list-admin@lists.php.net