[PHP-DEV] CVS update: php3/functions From: ssb (php-dev <email protected>)
Date: 10/21/98

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 <email protected>
For help: php-dev-help <email protected>