CVS update: php3/functions

From: Date: Wed, 21 Oct 1998 12:27:08 +0000
Subject: CVS update: php3/functions
Groups: php.dev 
Request: Send a blank email to php-dev+get-1932@lists.php.net to get a copy of this message
Date: Wednesday October 21, 1998 @ 8:27 Author: ssb Update of /repository/php3/functions In directory asf:/u2/tmp/cvs-serv2816 Modified Files: xml.c Log Message: * added error constants * rewrote the handler calling code a bit Index: php3/functions/xml.c diff -c php3/functions/xml.c:1.2 php3/functions/xml.c:1.3 *** php3/functions/xml.c:1.2 Wed Oct 21 07:03:09 1998 --- php3/functions/xml.c Wed Oct 21 08:27:08 1998 *************** *** 27,33 **** +----------------------------------------------------------------------+ */ ! /* $Id: xml.c,v 1.2 1998/10/21 11:03:09 ssb Exp $ */ #include "php.h" #include "internal_functions.h" --- 27,33 ---- +----------------------------------------------------------------------+ */ ! /* $Id: xml.c,v 1.3 1998/10/21 12:27:08 ssb Exp $ */ #include "php.h" #include "internal_functions.h" *************** *** 122,128 **** static char *php3i_pvalstrcpy(pval *); static void xml_destroy_parser(xml_parser *); static void xml_set_handler(char **, pval *); ! static void xml_call_handler(xml_parser *, char *, pval *, pval *); static pval *php3i_longpval(long); static pval *php3i_stringpval(const char *); static pval *php3i_xmlcharpval(const XML_Char *, int); --- 122,128 ---- static char *php3i_pvalstrcpy(pval *); static void xml_destroy_parser(xml_parser *); static void xml_set_handler(char **, pval *); ! static pval *xml_call_handler(xml_parser *, char *, int, pval **); static pval *php3i_longpval(long); static pval *php3i_stringpval(const char *); static pval *php3i_xmlcharpval(const XML_Char *, int); *************** *** 135,141 **** void php3i_xml_defaultHandler(void *, const XML_Char *, int); void php3i_xml_unparsedEntityDeclHandler(void *, const XML_Char *, const XML_Char *, const XML_Char *, const XML_Char *, const XML_Char *); void php3i_xml_notationDeclHandler(void *, const XML_Char *, const XML_Char *, const XML_Char *, const XML_Char *); ! int php3i_xml_externalEntityRefHandler(XML_Parser, const XML_Char *, const XML_Char *, const XML_Char *, const XML_Char *); /* }}} */ /* {{{ extension definition structures */ --- 135,141 ---- void php3i_xml_defaultHandler(void *, const XML_Char *, int); void php3i_xml_unparsedEntityDeclHandler(void *, const XML_Char *, const XML_Char *, const XML_Char *, const XML_Char *, const XML_Char *); void php3i_xml_notationDeclHandler(void *, const XML_Char *, const XML_Char *, const XML_Char *, const XML_Char *); ! int php3i_xml_externalEntityRefHandler(XML_Parser, const XML_Char *, const XML_Char *, const XML_Char *, const XML_Char *); /* }}} */ /* {{{ extension definition structures */ *************** *** 201,206 **** --- 201,229 ---- XML_GLOBAL(php3_xml_module).le_xml_parser = register_list_destructors(xml_destroy_parser, NULL); + REGISTER_LONG_CONSTANT("XML_ERROR_NONE", XML_ERROR_NONE, CONST_CS|CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("XML_ERROR_NO_MEMORY", XML_ERROR_NO_MEMORY, CONST_CS|CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("XML_ERROR_SYNTAX", XML_ERROR_SYNTAX, CONST_CS|CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("XML_ERROR_NO_ELEMENTS", XML_ERROR_NO_ELEMENTS, CONST_CS|CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("XML_ERROR_INVALID_TOKEN", XML_ERROR_INVALID_TOKEN, CONST_CS|CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("XML_ERROR_UNCLOSED_TOKEN", XML_ERROR_UNCLOSED_TOKEN, CONST_CS|CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("XML_ERROR_PARTIAL_CHAR", XML_ERROR_PARTIAL_CHAR, CONST_CS|CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("XML_ERROR_TAG_MISMATCH", XML_ERROR_TAG_MISMATCH, CONST_CS|CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("XML_ERROR_DUPLICATE_ATTRIBUTE", XML_ERROR_DUPLICATE_ATTRIBUTE, CONST_CS|CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("XML_ERROR_JUNK_AFTER_DOC_ELEMENT", XML_ERROR_JUNK_AFTER_DOC_ELEMENT, CONST_CS|CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("XML_ERROR_PARAM_ENTITY_REF", XML_ERROR_PARAM_ENTITY_REF, CONST_CS|CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("XML_ERROR_UNDEFINED_ENTITY", XML_ERROR_UNDEFINED_ENTITY, CONST_CS|CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("XML_ERROR_RECURSIVE_ENTITY_REF", XML_ERROR_RECURSIVE_ENTITY_REF, CONST_CS|CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("XML_ERROR_ASYNC_ENTITY", XML_ERROR_ASYNC_ENTITY, CONST_CS|CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("XML_ERROR_BAD_CHAR_REF", XML_ERROR_BAD_CHAR_REF, CONST_CS|CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("XML_ERROR_BINARY_ENTITY_REF", XML_ERROR_BINARY_ENTITY_REF, CONST_CS|CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF", XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF, CONST_CS|CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("XML_ERROR_MISPLACED_XML_PI", XML_ERROR_MISPLACED_XML_PI, CONST_CS|CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("XML_ERROR_UNKNOWN_ENCODING", XML_ERROR_UNKNOWN_ENCODING, CONST_CS|CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("XML_ERROR_INCORRECT_ENCODING", XML_ERROR_INCORRECT_ENCODING, CONST_CS|CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("XML_ERROR_UNCLOSED_CDATA_SECTION", XML_ERROR_UNCLOSED_CDATA_SECTION, CONST_CS|CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("XML_ERROR_EXTERNAL_ENTITY_HANDLING", XML_ERROR_EXTERNAL_ENTITY_HANDLING, CONST_CS|CONST_PERSISTENT); + return SUCCESS; } *************** *** 292,297 **** --- 315,323 ---- if (parser->endElementHandler) { efree(parser->endElementHandler); } + if (parser->characterDataHandler) { + efree(parser->characterDataHandler); + } if (parser->processingInstructionHandler) { efree(parser->processingInstructionHandler); } *************** *** 336,373 **** /* }}} */ /* {{{ xml_call_handler() */ ! static void ! xml_call_handler(xml_parser *parser, char *nameBuf, pval *data, pval *arg3) { ! XML_TLS_VARS; ! ! if (nameBuf) { ! pval retval, *args[3], func; ! int argc; ! ! if (arg3) { ! args[3] = arg3; ! argc = 3; ! } else { ! argc = 2; ! } ! func.type = IS_STRING; ! func.value.str.val = nameBuf; ! func.value.str.len = strlen(nameBuf); ! args[0] = php3i_longpval(parser->index); ! args[1] = data; ! if (call_user_function(&GLOBAL(function_table), NULL, &func, &retval, argc, args) == SUCCESS) { ! pval_destructor(&retval); ! } ! pval_destructor(args[0]); ! pval_destructor(args[1]); ! efree(args[0]); ! efree(args[1]); ! if (arg3) { ! pval_destructor(args[2]); ! efree(args[2]); } } } /* }}} */ --- 362,390 ---- /* }}} */ /* {{{ xml_call_handler() */ ! static pval * ! xml_call_handler(xml_parser *parser, char *funcName, int argc, pval **argv) { ! if (parser && funcName) { ! pval *retval, *func; ! int i; ! ! func = php3i_stringpval(funcName); ! retval = emalloc(sizeof(pval)); ! if (call_user_function(&GLOBAL(function_table), NULL, func, retval, argc, argv) == FAILURE) { ! pval_destructor(retval); ! efree(retval); ! return NULL; ! } ! pval_destructor(func); ! efree(func); ! for (i = 0; i < argc; i++) { ! pval_destructor(argv[i]); ! efree(argv[i]); } + return retval; } + return NULL; } /* }}} */ *************** *** 401,413 **** static pval *php3i_xmlcharpval(const XML_Char *s, int len) { ! pval *ret = NULL; if (len == 0) { len = php3i_xmlcharlen(s); } ! if (sizeof(XML_Char) == 1) { ! ret = emalloc(len); ret->type = IS_STRING; ret->value.str.len = len; ret->value.str.val = emalloc(len); --- 418,431 ---- static pval *php3i_xmlcharpval(const XML_Char *s, int len) { ! pval *ret = emalloc(sizeof(pval)); if (len == 0) { len = php3i_xmlcharlen(s); } ! if (s == NULL) { ! var_reset(ret); ! } else if (sizeof(XML_Char) == 1) { ret->type = IS_STRING; ret->value.str.len = len; ret->value.str.val = emalloc(len); *************** *** 467,497 **** XML_TLS_VARS; if (parser && parser->startElementHandler) { ! pval retval, func, *args[3]; ! char *key, *value; - func.type = IS_STRING; - func.value.str.val = parser->startElementHandler; - func.value.str.len = strlen(func.value.str.val); args[0] = php3i_longpval(parser->index); args[1] = php3i_stringpval(name); args[2] = emalloc(sizeof(pval)); array_init(args[2]); while (attributes && *attributes) { ! key = (char *)attributes[0]; ! value = (char *)attributes[1]; ! add_assoc_string(args[2], key, value, 1); attributes += 2; } ! if (call_user_function(&GLOBAL(function_table), NULL, &func, &retval, 3, args) == SUCCESS) { ! pval_destructor(&retval); } - pval_destructor(args[0]); - pval_destructor(args[1]); - pval_destructor(args[2]); - efree(args[0]); - efree(args[1]); - efree(args[2]); } } --- 485,504 ---- XML_TLS_VARS; if (parser && parser->startElementHandler) { ! pval *retval, *args[3]; args[0] = php3i_longpval(parser->index); args[1] = php3i_stringpval(name); args[2] = emalloc(sizeof(pval)); array_init(args[2]); while (attributes && *attributes) { ! add_assoc_string(args[2], (char *)attributes[0], (char *)attributes[1], 1); attributes += 2; } ! if ((retval = xml_call_handler(parser, parser->startElementHandler, 3, args))) { ! pval_destructor(retval); ! efree(retval); } } } *************** *** 504,523 **** XML_TLS_VARS; if (parser && parser->endElementHandler) { ! pval retval, func, *args[2]; - func.type = IS_STRING; - func.value.str.val = parser->endElementHandler; - func.value.str.len = strlen(func.value.str.val); args[0] = php3i_longpval(parser->index); args[1] = php3i_stringpval(name); ! if (call_user_function(&GLOBAL(function_table), NULL, &func, &retval, 2, args) == SUCCESS) { ! pval_destructor(&retval); } - pval_destructor(args[0]); - pval_destructor(args[1]); - efree(args[0]); - efree(args[1]); } } --- 511,524 ---- XML_TLS_VARS; if (parser && parser->endElementHandler) { ! pval *retval, *args[2]; args[0] = php3i_longpval(parser->index); args[1] = php3i_stringpval(name); ! if ((retval = xml_call_handler(parser, parser->endElementHandler, 2, args))) { ! pval_destructor(retval); ! efree(retval); } } } *************** *** 530,549 **** XML_TLS_VARS; if (parser && parser->characterDataHandler) { ! pval retval, func, *args[2]; - func.type = IS_STRING; - func.value.str.val = parser->characterDataHandler; - func.value.str.len = strlen(func.value.str.val); args[0] = php3i_longpval(parser->index); args[1] = php3i_xmlcharpval(s, len); ! if (call_user_function(&GLOBAL(function_table), NULL, &func, &retval, 2, args) == SUCCESS) { ! pval_destructor(&retval); } - pval_destructor(args[0]); - pval_destructor(args[1]); - efree(args[0]); - efree(args[1]); } } --- 531,544 ---- XML_TLS_VARS; if (parser && parser->characterDataHandler) { ! pval *retval, *args[2]; args[0] = php3i_longpval(parser->index); args[1] = php3i_xmlcharpval(s, len); ! if ((retval = xml_call_handler(parser, parser->characterDataHandler, 2, args))) { ! pval_destructor(retval); ! efree(retval); } } } *************** *** 558,580 **** XML_TLS_VARS; if (parser && parser->processingInstructionHandler) { ! pval retval, func, *args[3]; - func.type = IS_STRING; - func.value.str.val = parser->processingInstructionHandler; - func.value.str.len = strlen(func.value.str.val); args[0] = php3i_longpval(parser->index); args[1] = php3i_xmlcharpval(target, 0); args[2] = php3i_xmlcharpval(data, 0); ! if (call_user_function(&GLOBAL(function_table), NULL, &func, &retval, 3, args) == SUCCESS) { ! pval_destructor(&retval); } - pval_destructor(args[0]); - pval_destructor(args[1]); - pval_destructor(args[3]); - efree(args[0]); - efree(args[1]); - efree(args[2]); } } --- 553,567 ---- XML_TLS_VARS; if (parser && parser->processingInstructionHandler) { ! pval *retval, *args[3]; args[0] = php3i_longpval(parser->index); args[1] = php3i_xmlcharpval(target, 0); args[2] = php3i_xmlcharpval(data, 0); ! if ((retval = xml_call_handler(parser, parser->processingInstructionHandler, 3, args))) { ! pval_destructor(retval); ! efree(retval); } } } *************** *** 587,606 **** XML_TLS_VARS; if (parser && parser->defaultHandler) { ! pval retval, func, *args[2]; - func.type = IS_STRING; - func.value.str.val = parser->defaultHandler; - func.value.str.len = strlen(func.value.str.val); args[0] = php3i_longpval(parser->index); args[1] = php3i_xmlcharpval(s, len); ! if (call_user_function(&GLOBAL(function_table), NULL, &func, &retval, 2, args) == SUCCESS) { ! pval_destructor(&retval); } - pval_destructor(args[0]); - pval_destructor(args[1]); - efree(args[0]); - efree(args[1]); } } --- 574,587 ---- XML_TLS_VARS; if (parser && parser->defaultHandler) { ! pval *retval, *args[2]; args[0] = php3i_longpval(parser->index); args[1] = php3i_xmlcharpval(s, len); ! if ((retval = xml_call_handler(parser, parser->defaultHandler, 2, args))) { ! pval_destructor(retval); ! efree(retval); } } } *************** *** 618,646 **** XML_TLS_VARS; if (parser && parser->unparsedEntityDeclHandler) { ! pval retval, func, *args[5]; ! func.type = IS_STRING; ! func.value.str.val = parser->unparsedEntityDeclHandler; ! func.value.str.len = strlen(func.value.str.val); ! args[0] = php3i_xmlcharpval(entityName, 0); ! args[1] = php3i_xmlcharpval(base, 0); ! args[2] = php3i_xmlcharpval(systemId, 0); ! args[3] = php3i_xmlcharpval(publicId, 0); ! args[4] = php3i_xmlcharpval(notationName, 0); ! if (call_user_function(&GLOBAL(function_table), NULL, &func, &retval, 5, args) == SUCCESS) { ! pval_destructor(&retval); ! } ! pval_destructor(args[0]); ! pval_destructor(args[1]); ! pval_destructor(args[2]); ! pval_destructor(args[3]); ! pval_destructor(args[4]); ! efree(args[0]); ! efree(args[1]); ! efree(args[2]); ! efree(args[3]); ! efree(args[4]); } } --- 599,616 ---- XML_TLS_VARS; if (parser && parser->unparsedEntityDeclHandler) { ! pval *retval, *args[5]; ! args[0] = php3i_longpval(parser->index); ! args[1] = php3i_xmlcharpval(entityName, 0); ! args[2] = php3i_xmlcharpval(base, 0); ! args[3] = php3i_xmlcharpval(systemId, 0); ! args[4] = php3i_xmlcharpval(publicId, 0); ! args[5] = php3i_xmlcharpval(notationName, 0); ! if ((retval = xml_call_handler(parser, parser->unparsedEntityDeclHandler, 6, args))) { ! pval_destructor(retval); ! efree(retval); ! } } } *************** *** 658,683 **** XML_TLS_VARS; if (parser && parser->notationDeclHandler) { ! pval retval, func, *args[4]; ! func.type = IS_STRING; ! func.value.str.val = parser->notationDeclHandler; ! func.value.str.len = strlen(func.value.str.val); ! args[0] = php3i_xmlcharpval(notationName, 0); ! args[1] = php3i_xmlcharpval(base, 0); ! args[2] = php3i_xmlcharpval(systemId, 0); ! args[3] = php3i_xmlcharpval(publicId, 0); ! if (call_user_function(&GLOBAL(function_table), NULL, &func, &retval, 4, args) == SUCCESS) { ! pval_destructor(&retval); ! } ! pval_destructor(args[0]); ! pval_destructor(args[1]); ! pval_destructor(args[2]); ! pval_destructor(args[3]); ! efree(args[0]); ! efree(args[1]); ! efree(args[2]); ! efree(args[3]); } } --- 628,644 ---- XML_TLS_VARS; if (parser && parser->notationDeclHandler) { ! pval *retval, *args[5]; ! args[0] = php3i_longpval(parser->index); ! args[1] = php3i_xmlcharpval(notationName, 0); ! args[2] = php3i_xmlcharpval(base, 0); ! args[3] = php3i_xmlcharpval(systemId, 0); ! args[4] = php3i_xmlcharpval(publicId, 0); ! if ((retval = xml_call_handler(parser, parser->notationDeclHandler, 5, args))) { ! pval_destructor(retval); ! efree(retval); ! } } } *************** *** 692,722 **** const XML_Char *publicId) { xml_parser *parser = XML_GetUserData(parserPtr); ! int ret = 1; /* don't abort if no handler is set */ XML_TLS_VARS; if (parser && parser->externalEntityRefHandler) { ! pval retval, func, *args[4]; ! func.type = IS_STRING; ! func.value.str.val = parser->externalEntityRefHandler; ! func.value.str.len = strlen(func.value.str.val); ! args[0] = php3i_xmlcharpval(openEntityNames, 0); ! args[1] = php3i_xmlcharpval(base, 0); ! args[2] = php3i_xmlcharpval(systemId, 0); ! args[3] = php3i_xmlcharpval(publicId, 0); ! if (call_user_function(&GLOBAL(function_table), NULL, &func, &retval, 4, args) == SUCCESS) { ! convert_to_long(&retval); ! ret = (int)retval.value.lval; ! } ! pval_destructor(args[0]); ! pval_destructor(args[1]); ! pval_destructor(args[2]); ! pval_destructor(args[3]); ! efree(args[0]); ! efree(args[1]); ! efree(args[2]); ! efree(args[3]); } return ret; } --- 653,676 ---- const XML_Char *publicId) { xml_parser *parser = XML_GetUserData(parserPtr); ! int ret = 0; /* abort if no handler is set (should be configurable?) */ XML_TLS_VARS; if (parser && parser->externalEntityRefHandler) { ! pval *retval, *args[5]; ! args[0] = php3i_longpval(parser->index); ! args[1] = php3i_xmlcharpval(openEntityNames, 0); ! args[2] = php3i_xmlcharpval(base, 0); ! args[3] = php3i_xmlcharpval(systemId, 0); ! args[4] = php3i_xmlcharpval(publicId, 0); ! if ((retval = xml_call_handler(parser, parser->externalEntityRefHandler, 5, args))) { ! convert_to_long(retval); ! ret = retval->value.lval; ! efree(retval); ! } else { ! ret = 0; ! } } return ret; } -- PHP Development Mailing List http://www.php.net/ To unsubscribe send an empty message to php-dev-unsubscribe@lists.php.net For help: php-dev-help@lists.php.net

« previous php.dev (#1932) next »