Diff for /embedaddon/php/ext/dom/document.c between versions 1.1.1.1 and 1.1.1.4

version 1.1.1.1, 2012/02/21 23:47:54 version 1.1.1.4, 2014/06/15 20:03:42
Line 2 Line 2
    +----------------------------------------------------------------------+     +----------------------------------------------------------------------+
    | PHP Version 5                                                        |     | PHP Version 5                                                        |
    +----------------------------------------------------------------------+     +----------------------------------------------------------------------+
   | Copyright (c) 1997-2012 The PHP Group                                |   | Copyright (c) 1997-2014 The PHP Group                                |
    +----------------------------------------------------------------------+     +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |     | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |     | that is bundled with this package in the file LICENSE, and is        |
Line 149  ZEND_END_ARG_INFO(); Line 149  ZEND_END_ARG_INFO();
   
 ZEND_BEGIN_ARG_INFO_EX(arginfo_dom_document_loadhtml, 0, 0, 1)  ZEND_BEGIN_ARG_INFO_EX(arginfo_dom_document_loadhtml, 0, 0, 1)
         ZEND_ARG_INFO(0, source)          ZEND_ARG_INFO(0, source)
           ZEND_ARG_INFO(0, options)
 ZEND_END_ARG_INFO();  ZEND_END_ARG_INFO();
   
 ZEND_BEGIN_ARG_INFO_EX(arginfo_dom_document_loadhtmlfile, 0, 0, 1)  ZEND_BEGIN_ARG_INFO_EX(arginfo_dom_document_loadhtmlfile, 0, 0, 1)
         ZEND_ARG_INFO(0, source)          ZEND_ARG_INFO(0, source)
           ZEND_ARG_INFO(0, options)
 ZEND_END_ARG_INFO();  ZEND_END_ARG_INFO();
   
 ZEND_BEGIN_ARG_INFO_EX(arginfo_dom_document_savehtml, 0, 0, 0)  ZEND_BEGIN_ARG_INFO_EX(arginfo_dom_document_savehtml, 0, 0, 0)
Line 259  int dom_document_doctype_read(dom_object *obj, zval ** Line 261  int dom_document_doctype_read(dom_object *obj, zval **
                 return SUCCESS;                  return SUCCESS;
         }          }
   
        if (NULL == (*retval = php_dom_create_object((xmlNodePtr) dtdptr, &ret, NULL, *retval, obj TSRMLS_CC))) {        if (NULL == (*retval = php_dom_create_object((xmlNodePtr) dtdptr, &ret, *retval, obj TSRMLS_CC))) {
                 php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot create required DOM object");                  php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot create required DOM object");
                 return FAILURE;                  return FAILURE;
         }          }
Line 309  int dom_document_document_element_read(dom_object *obj Line 311  int dom_document_document_element_read(dom_object *obj
                 return SUCCESS;                  return SUCCESS;
         }          }
   
        if (NULL == (*retval = php_dom_create_object(root, &ret, NULL, *retval, obj TSRMLS_CC))) {        if (NULL == (*retval = php_dom_create_object(root, &ret, *retval, obj TSRMLS_CC))) {
                 php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot create required DOM object");                  php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot create required DOM object");
                 return FAILURE;                  return FAILURE;
         }          }
Line 899  Since:  Line 901  Since: 
 */  */
 PHP_FUNCTION(dom_document_create_element)  PHP_FUNCTION(dom_document_create_element)
 {  {
        zval *id, *rv = NULL;        zval *id;
         xmlNode *node;          xmlNode *node;
         xmlDocPtr docp;          xmlDocPtr docp;
         dom_object *intern;          dom_object *intern;
Line 922  PHP_FUNCTION(dom_document_create_element) Line 924  PHP_FUNCTION(dom_document_create_element)
                 RETURN_FALSE;                  RETURN_FALSE;
         }          }
   
        DOM_RET_OBJ(rv, node, &ret, intern);        DOM_RET_OBJ(node, &ret, intern);
 }  }
 /* }}} end dom_document_create_element */  /* }}} end dom_document_create_element */
   
Line 932  Since:  Line 934  Since: 
 */  */
 PHP_FUNCTION(dom_document_create_document_fragment)  PHP_FUNCTION(dom_document_create_document_fragment)
 {  {
        zval *id, *rv = NULL;        zval *id;
         xmlNode *node;          xmlNode *node;
         xmlDocPtr docp;          xmlDocPtr docp;
         dom_object *intern;          dom_object *intern;
Line 949  PHP_FUNCTION(dom_document_create_document_fragment) Line 951  PHP_FUNCTION(dom_document_create_document_fragment)
                 RETURN_FALSE;                  RETURN_FALSE;
         }          }
   
        DOM_RET_OBJ(rv, node, &ret, intern);        DOM_RET_OBJ(node, &ret, intern);
 }  }
 /* }}} end dom_document_create_document_fragment */  /* }}} end dom_document_create_document_fragment */
   
Line 959  Since:  Line 961  Since: 
 */  */
 PHP_FUNCTION(dom_document_create_text_node)  PHP_FUNCTION(dom_document_create_text_node)
 {  {
        zval *id, *rv = NULL;        zval *id;
         xmlNode *node;          xmlNode *node;
         xmlDocPtr docp;          xmlDocPtr docp;
         int ret, value_len;          int ret, value_len;
Line 977  PHP_FUNCTION(dom_document_create_text_node) Line 979  PHP_FUNCTION(dom_document_create_text_node)
                 RETURN_FALSE;                  RETURN_FALSE;
         }          }
   
        DOM_RET_OBJ(rv, node, &ret, intern);        DOM_RET_OBJ(node, &ret, intern);
 }  }
 /* }}} end dom_document_create_text_node */  /* }}} end dom_document_create_text_node */
   
Line 987  Since:  Line 989  Since: 
 */  */
 PHP_FUNCTION(dom_document_create_comment)  PHP_FUNCTION(dom_document_create_comment)
 {  {
        zval *id, *rv = NULL;        zval *id;
         xmlNode *node;          xmlNode *node;
         xmlDocPtr docp;          xmlDocPtr docp;
         int ret, value_len;          int ret, value_len;
Line 1005  PHP_FUNCTION(dom_document_create_comment) Line 1007  PHP_FUNCTION(dom_document_create_comment)
                 RETURN_FALSE;                  RETURN_FALSE;
         }          }
   
        DOM_RET_OBJ(rv, node, &ret, intern);        DOM_RET_OBJ(node, &ret, intern);
 }  }
 /* }}} end dom_document_create_comment */  /* }}} end dom_document_create_comment */
   
Line 1015  Since:  Line 1017  Since: 
 */  */
 PHP_FUNCTION(dom_document_create_cdatasection)  PHP_FUNCTION(dom_document_create_cdatasection)
 {  {
        zval *id, *rv = NULL;        zval *id;
         xmlNode *node;          xmlNode *node;
         xmlDocPtr docp;          xmlDocPtr docp;
         int ret, value_len;          int ret, value_len;
Line 1033  PHP_FUNCTION(dom_document_create_cdatasection) Line 1035  PHP_FUNCTION(dom_document_create_cdatasection)
                 RETURN_FALSE;                  RETURN_FALSE;
         }          }
   
        DOM_RET_OBJ(rv, node, &ret, intern);        DOM_RET_OBJ(node, &ret, intern);
 }  }
 /* }}} end dom_document_create_cdatasection */  /* }}} end dom_document_create_cdatasection */
   
Line 1043  Since:  Line 1045  Since: 
 */  */
 PHP_FUNCTION(dom_document_create_processing_instruction)  PHP_FUNCTION(dom_document_create_processing_instruction)
 {  {
        zval *id, *rv = NULL;        zval *id;
         xmlNode *node;          xmlNode *node;
         xmlDocPtr docp;          xmlDocPtr docp;
         int ret, value_len, name_len = 0;          int ret, value_len, name_len = 0;
Line 1068  PHP_FUNCTION(dom_document_create_processing_instructio Line 1070  PHP_FUNCTION(dom_document_create_processing_instructio
   
         node->doc = docp;          node->doc = docp;
   
        DOM_RET_OBJ(rv, node, &ret, intern);        DOM_RET_OBJ(node, &ret, intern);
 }  }
 /* }}} end dom_document_create_processing_instruction */  /* }}} end dom_document_create_processing_instruction */
   
Line 1078  Since:  Line 1080  Since: 
 */  */
 PHP_FUNCTION(dom_document_create_attribute)  PHP_FUNCTION(dom_document_create_attribute)
 {  {
        zval *id, *rv = NULL;        zval *id;
         xmlAttrPtr node;          xmlAttrPtr node;
         xmlDocPtr docp;          xmlDocPtr docp;
         int ret, name_len;          int ret, name_len;
Line 1101  PHP_FUNCTION(dom_document_create_attribute) Line 1103  PHP_FUNCTION(dom_document_create_attribute)
                 RETURN_FALSE;                  RETURN_FALSE;
         }          }
   
        DOM_RET_OBJ(rv, (xmlNodePtr) node, &ret, intern);        DOM_RET_OBJ((xmlNodePtr) node, &ret, intern);
   
 }  }
 /* }}} end dom_document_create_attribute */  /* }}} end dom_document_create_attribute */
Line 1112  Since:  Line 1114  Since: 
 */  */
 PHP_FUNCTION(dom_document_create_entity_reference)  PHP_FUNCTION(dom_document_create_entity_reference)
 {  {
        zval *id, *rv = NULL;        zval *id;
         xmlNode *node;          xmlNode *node;
         xmlDocPtr docp = NULL;          xmlDocPtr docp = NULL;
         dom_object *intern;          dom_object *intern;
Line 1135  PHP_FUNCTION(dom_document_create_entity_reference) Line 1137  PHP_FUNCTION(dom_document_create_entity_reference)
                 RETURN_FALSE;                  RETURN_FALSE;
         }          }
   
        DOM_RET_OBJ(rv, (xmlNodePtr) node, &ret, intern);        DOM_RET_OBJ((xmlNodePtr) node, &ret, intern);
 }  }
 /* }}} end dom_document_create_entity_reference */  /* }}} end dom_document_create_entity_reference */
   
Line 1171  Since: DOM Level 2 Line 1173  Since: DOM Level 2
 */  */
 PHP_FUNCTION(dom_document_import_node)  PHP_FUNCTION(dom_document_import_node)
 {  {
         zval *rv = NULL;  
         zval *id, *node;          zval *id, *node;
         xmlDocPtr docp;          xmlDocPtr docp;
         xmlNodePtr nodep, retnodep;          xmlNodePtr nodep, retnodep;
Line 1211  PHP_FUNCTION(dom_document_import_node) Line 1212  PHP_FUNCTION(dom_document_import_node)
                         nsptr = xmlSearchNsByHref (nodep->doc, root, nodep->ns->href);                          nsptr = xmlSearchNsByHref (nodep->doc, root, nodep->ns->href);
                         if (nsptr == NULL) {                          if (nsptr == NULL) {
                                 int errorcode;                                  int errorcode;
                                nsptr = dom_get_ns(root, nodep->ns->href, &errorcode, nodep->ns->prefix);                                nsptr = dom_get_ns(root, (char *) nodep->ns->href, &errorcode, (char *) nodep->ns->prefix);
                         }                          }
                         xmlSetNs(retnodep, nsptr);                          xmlSetNs(retnodep, nsptr);
                 }                  }
         }          }
   
        DOM_RET_OBJ(rv, (xmlNodePtr) retnodep, &ret, intern);        DOM_RET_OBJ((xmlNodePtr) retnodep, &ret, intern);
 }  }
 /* }}} end dom_document_import_node */  /* }}} end dom_document_import_node */
   
Line 1227  Since: DOM Level 2 Line 1228  Since: DOM Level 2
 */  */
 PHP_FUNCTION(dom_document_create_element_ns)  PHP_FUNCTION(dom_document_create_element_ns)
 {  {
        zval *id, *rv = NULL;        zval *id;
         xmlDocPtr docp;          xmlDocPtr docp;
         xmlNodePtr nodep = NULL;          xmlNodePtr nodep = NULL;
         xmlNsPtr nsptr = NULL;          xmlNsPtr nsptr = NULL;
Line 1280  PHP_FUNCTION(dom_document_create_element_ns) Line 1281  PHP_FUNCTION(dom_document_create_element_ns)
                   
         nodep->ns = nsptr;          nodep->ns = nsptr;
   
        DOM_RET_OBJ(rv, nodep, &ret, intern);        DOM_RET_OBJ(nodep, &ret, intern);
 }  }
 /* }}} end dom_document_create_element_ns */  /* }}} end dom_document_create_element_ns */
   
Line 1290  Since: DOM Level 2 Line 1291  Since: DOM Level 2
 */  */
 PHP_FUNCTION(dom_document_create_attribute_ns)  PHP_FUNCTION(dom_document_create_attribute_ns)
 {  {
        zval *id, *rv = NULL;        zval *id;
         xmlDocPtr docp;          xmlDocPtr docp;
         xmlNodePtr nodep = NULL, root;          xmlNodePtr nodep = NULL, root;
         xmlNsPtr nsptr;          xmlNsPtr nsptr;
Line 1345  PHP_FUNCTION(dom_document_create_attribute_ns) Line 1346  PHP_FUNCTION(dom_document_create_attribute_ns)
                 RETURN_FALSE;                  RETURN_FALSE;
         }          }
   
        DOM_RET_OBJ(rv, nodep, &ret, intern);        DOM_RET_OBJ(nodep, &ret, intern);
 }  }
 /* }}} end dom_document_create_attribute_ns */  /* }}} end dom_document_create_attribute_ns */
   
Line 1382  Since: DOM Level 2 Line 1383  Since: DOM Level 2
 */  */
 PHP_FUNCTION(dom_document_get_element_by_id)  PHP_FUNCTION(dom_document_get_element_by_id)
 {  {
        zval *id, *rv = NULL;        zval *id;
         xmlDocPtr docp;          xmlDocPtr docp;
         xmlAttrPtr  attrp;          xmlAttrPtr  attrp;
         int ret, idname_len;          int ret, idname_len;
Line 1398  PHP_FUNCTION(dom_document_get_element_by_id) Line 1399  PHP_FUNCTION(dom_document_get_element_by_id)
         attrp = xmlGetID(docp, (xmlChar *) idname);          attrp = xmlGetID(docp, (xmlChar *) idname);
   
         if (attrp && attrp->parent) {          if (attrp && attrp->parent) {
                DOM_RET_OBJ(rv, (xmlNodePtr) attrp->parent, &ret, intern);                DOM_RET_OBJ((xmlNodePtr) attrp->parent, &ret, intern);
         } else {          } else {
                 RETVAL_NULL();                  RETVAL_NULL();
         }          }
Line 1508  char *_dom_get_valid_file_path(char *source, char *res Line 1509  char *_dom_get_valid_file_path(char *source, char *res
   
         if (uri->scheme != NULL) {          if (uri->scheme != NULL) {
                 /* absolute file uris - libxml only supports localhost or empty host */                  /* absolute file uris - libxml only supports localhost or empty host */
   #ifdef PHP_WIN32
                   if (strncasecmp(source, "file://",7) == 0 && ':' == source[8]) {
                           isFileUri = 1;
                           source += 7;
                   } else
   #endif
                 if (strncasecmp(source, "file:///",8) == 0) {                  if (strncasecmp(source, "file:///",8) == 0) {
                         isFileUri = 1;                          isFileUri = 1;
 #ifdef PHP_WIN32  #ifdef PHP_WIN32
Line 1660  static xmlDocPtr dom_document_parser(zval *id, int mod Line 1667  static xmlDocPtr dom_document_parser(zval *id, int mod
   
 /* {{{ static void dom_parse_document(INTERNAL_FUNCTION_PARAMETERS, int mode) */  /* {{{ static void dom_parse_document(INTERNAL_FUNCTION_PARAMETERS, int mode) */
 static void dom_parse_document(INTERNAL_FUNCTION_PARAMETERS, int mode) {  static void dom_parse_document(INTERNAL_FUNCTION_PARAMETERS, int mode) {
        zval *id, *rv = NULL;        zval *id;
         xmlDoc *docp = NULL, *newdoc;          xmlDoc *docp = NULL, *newdoc;
         dom_doc_propsptr doc_prop;          dom_doc_propsptr doc_prop;
         dom_object *intern;          dom_object *intern;
Line 1712  static void dom_parse_document(INTERNAL_FUNCTION_PARAM Line 1719  static void dom_parse_document(INTERNAL_FUNCTION_PARAM
   
                 RETURN_TRUE;                  RETURN_TRUE;
         } else {          } else {
                DOM_RET_OBJ(rv, (xmlNodePtr) newdoc, &ret, NULL);                DOM_RET_OBJ((xmlNodePtr) newdoc, &ret, NULL);
         }          }
 }  }
 /* }}} end dom_parser_document */  /* }}} end dom_parser_document */
Line 1979  static void _dom_document_schema_validate(INTERNAL_FUN Line 1986  static void _dom_document_schema_validate(INTERNAL_FUN
         int                     is_valid;          int                     is_valid;
         char resolved_path[MAXPATHLEN + 1];          char resolved_path[MAXPATHLEN + 1];
   
        if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &id, dom_document_class_entry, &source, &source_len) == FAILURE) {        if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Op", &id, dom_document_class_entry, &source, &source_len) == FAILURE) {
                 return;                  return;
         }          }
   
Line 2068  static void _dom_document_relaxNG_validate(INTERNAL_FU Line 2075  static void _dom_document_relaxNG_validate(INTERNAL_FU
         int                     is_valid;          int                     is_valid;
         char resolved_path[MAXPATHLEN + 1];          char resolved_path[MAXPATHLEN + 1];
   
        if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &id, dom_document_class_entry, &source, &source_len) == FAILURE) {        if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Op", &id, dom_document_class_entry, &source, &source_len) == FAILURE) {
                 return;                  return;
         }          }
   
Line 2150  PHP_FUNCTION(dom_document_relaxNG_validate_xml) Line 2157  PHP_FUNCTION(dom_document_relaxNG_validate_xml)
   
 static void dom_load_html(INTERNAL_FUNCTION_PARAMETERS, int mode) /* {{{ */  static void dom_load_html(INTERNAL_FUNCTION_PARAMETERS, int mode) /* {{{ */
 {  {
        zval *id, *rv = NULL;        zval *id;
         xmlDoc *docp = NULL, *newdoc;          xmlDoc *docp = NULL, *newdoc;
         dom_object *intern;          dom_object *intern;
         dom_doc_propsptr doc_prop;          dom_doc_propsptr doc_prop;
         char *source;          char *source;
         int source_len, refcount, ret;          int source_len, refcount, ret;
           long options = 0;
         htmlParserCtxtPtr ctxt;          htmlParserCtxtPtr ctxt;
                   
         id = getThis();          id = getThis();
   
        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &source, &source_len) == FAILURE) {        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &source, &source_len, &options) == FAILURE) {
                 return;                  return;
         }          }
   
Line 2180  static void dom_load_html(INTERNAL_FUNCTION_PARAMETERS Line 2188  static void dom_load_html(INTERNAL_FUNCTION_PARAMETERS
                 RETURN_FALSE;                  RETURN_FALSE;
         }          }
   
           if (options) {
                   htmlCtxtUseOptions(ctxt, options);
           }
   
         ctxt->vctxt.error = php_libxml_ctx_error;          ctxt->vctxt.error = php_libxml_ctx_error;
         ctxt->vctxt.warning = php_libxml_ctx_warning;          ctxt->vctxt.warning = php_libxml_ctx_warning;
         if (ctxt->sax != NULL) {          if (ctxt->sax != NULL) {
Line 2218  static void dom_load_html(INTERNAL_FUNCTION_PARAMETERS Line 2230  static void dom_load_html(INTERNAL_FUNCTION_PARAMETERS
   
                 RETURN_TRUE;                  RETURN_TRUE;
         } else {          } else {
                DOM_RET_OBJ(rv, (xmlNodePtr) newdoc, &ret, NULL);                DOM_RET_OBJ((xmlNodePtr) newdoc, &ret, NULL);
         }          }
 }  }
 /* }}} */  /* }}} */
Line 2290  PHP_FUNCTION(dom_document_save_html) Line 2302  PHP_FUNCTION(dom_document_save_html)
         xmlBufferPtr buf;          xmlBufferPtr buf;
         dom_object *intern, *nodeobj;          dom_object *intern, *nodeobj;
         xmlChar *mem = NULL;          xmlChar *mem = NULL;
        int size, format;        int size = 0, format;
         dom_doc_propsptr doc_props;          dom_doc_propsptr doc_props;
   
         if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(),          if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(),
Line 2318  PHP_FUNCTION(dom_document_save_html) Line 2330  PHP_FUNCTION(dom_document_save_html)
                         RETURN_FALSE;                          RETURN_FALSE;
                 }                  }
                                   
                size = htmlNodeDump(buf, docp, node);                if (node->type == XML_DOCUMENT_FRAG_NODE) {
                         int one_size;
 
                         for (node = node->children; node; node = node->next) {
                                 one_size = htmlNodeDump(buf, docp, node);
 
                                 if (one_size >= 0) {
                                         size += one_size;
                                 } else {
                                         size = -1;
                                         break;
                                 }
                         }
                 } else {
                         size = htmlNodeDump(buf, docp, node);
                 }
                 if (size >= 0) {                  if (size >= 0) {
                         mem = (xmlChar*) xmlBufferContent(buf);                          mem = (xmlChar*) xmlBufferContent(buf);
                         if (!mem) {                          if (!mem) {

Removed from v.1.1.1.1  
changed lines
  Added in v.1.1.1.4


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>