Diff for /embedaddon/php/ext/dom/php_dom.c between versions 1.1.1.1 and 1.1.1.2

version 1.1.1.1, 2012/02/21 23:47:54 version 1.1.1.2, 2012/05/29 12:34:37
Line 303  static void dom_register_prop_handler(HashTable *prop_ Line 303  static void dom_register_prop_handler(HashTable *prop_
 }  }
 /* }}} */  /* }}} */
   
static zval **dom_get_property_ptr_ptr(zval *object, zval *member TSRMLS_DC) /* {{{ */static zval **dom_get_property_ptr_ptr(zval *object, zval *member, const zend_literal *key TSRMLS_DC) /* {{{ */
 {  {
         dom_object *obj;          dom_object *obj;
         zval tmp_member;          zval tmp_member;
Line 326  static zval **dom_get_property_ptr_ptr(zval *object, z Line 326  static zval **dom_get_property_ptr_ptr(zval *object, z
         }          }
         if (ret == FAILURE) {          if (ret == FAILURE) {
                 std_hnd = zend_get_std_object_handlers();                  std_hnd = zend_get_std_object_handlers();
                retval = std_hnd->get_property_ptr_ptr(object, member TSRMLS_CC);                retval = std_hnd->get_property_ptr_ptr(object, member, key TSRMLS_CC);
         }          }
   
         if (member == &tmp_member) {          if (member == &tmp_member) {
Line 337  static zval **dom_get_property_ptr_ptr(zval *object, z Line 337  static zval **dom_get_property_ptr_ptr(zval *object, z
 /* }}} */  /* }}} */
   
 /* {{{ dom_read_property */  /* {{{ dom_read_property */
zval *dom_read_property(zval *object, zval *member, int type TSRMLS_DC)zval *dom_read_property(zval *object, zval *member, int type, const zend_literal *key TSRMLS_DC)
 {  {
         dom_object *obj;          dom_object *obj;
         zval tmp_member;          zval tmp_member;
Line 372  zval *dom_read_property(zval *object, zval *member, in Line 372  zval *dom_read_property(zval *object, zval *member, in
                 }                  }
         } else {          } else {
                 std_hnd = zend_get_std_object_handlers();                  std_hnd = zend_get_std_object_handlers();
                retval = std_hnd->read_property(object, member, type TSRMLS_CC);                retval = std_hnd->read_property(object, member, type, key TSRMLS_CC);
         }          }
   
         if (member == &tmp_member) {          if (member == &tmp_member) {
Line 383  zval *dom_read_property(zval *object, zval *member, in Line 383  zval *dom_read_property(zval *object, zval *member, in
 /* }}} */  /* }}} */
   
 /* {{{ dom_write_property */  /* {{{ dom_write_property */
void dom_write_property(zval *object, zval *member, zval *value TSRMLS_DC)void dom_write_property(zval *object, zval *member, zval *value, const zend_literal *key TSRMLS_DC)
 {  {
         dom_object *obj;          dom_object *obj;
         zval tmp_member;          zval tmp_member;
Line 408  void dom_write_property(zval *object, zval *member, zv Line 408  void dom_write_property(zval *object, zval *member, zv
                 hnd->write_func(obj, value TSRMLS_CC);                  hnd->write_func(obj, value TSRMLS_CC);
         } else {          } else {
                 std_hnd = zend_get_std_object_handlers();                  std_hnd = zend_get_std_object_handlers();
                std_hnd->write_property(object, member, value TSRMLS_CC);                std_hnd->write_property(object, member, value, key TSRMLS_CC);
         }          }
   
         if (member == &tmp_member) {          if (member == &tmp_member) {
Line 418  void dom_write_property(zval *object, zval *member, zv Line 418  void dom_write_property(zval *object, zval *member, zv
 /* }}} */  /* }}} */
   
 /* {{{ dom_property_exists */  /* {{{ dom_property_exists */
static int dom_property_exists(zval *object, zval *member, int check_empty TSRMLS_DC)static int dom_property_exists(zval *object, zval *member, int check_empty, const zend_literal *key TSRMLS_DC)
 {  {
         dom_object *obj;          dom_object *obj;
         zval tmp_member;          zval tmp_member;
Line 456  static int dom_property_exists(zval *object, zval *mem Line 456  static int dom_property_exists(zval *object, zval *mem
                 }                  }
         } else {          } else {
                 std_hnd = zend_get_std_object_handlers();                  std_hnd = zend_get_std_object_handlers();
                retval = std_hnd->has_property(object, member, check_empty TSRMLS_CC);                retval = std_hnd->has_property(object, member, check_empty, key TSRMLS_CC);
         }          }
   
         if (member == &tmp_member) {          if (member == &tmp_member) {
Line 466  static int dom_property_exists(zval *object, zval *mem Line 466  static int dom_property_exists(zval *object, zval *mem
 }  }
 /* }}} */  /* }}} */
   
   static HashTable* dom_get_debug_info_helper(zval *object, int *is_temp TSRMLS_DC) /* {{{ */
   {
           dom_object                      *obj = zend_object_store_get_object(object TSRMLS_CC);
           HashTable                       *debug_info,
                                                   *prop_handlers = obj->prop_handler,
                                                   *std_props;
           HashPosition            pos;
           dom_prop_handler        *entry;
           zval                            *object_value,
                                                   *null_value;
   
           *is_temp = 1;
   
           ALLOC_HASHTABLE(debug_info);
           ZEND_INIT_SYMTABLE_EX(debug_info, 32, 0);
   
           std_props = zend_std_get_properties(object TSRMLS_CC);
           zend_hash_copy(debug_info, std_props, (copy_ctor_func_t)zval_add_ref,
                           NULL, sizeof(zval*));
   
           if (!prop_handlers) {
                   return debug_info;
           }
   
           ALLOC_INIT_ZVAL(object_value);
           ZVAL_STRING(object_value, "(object value omitted)", 1);
   
           ALLOC_INIT_ZVAL(null_value);
           ZVAL_NULL(null_value);
   
           for (zend_hash_internal_pointer_reset_ex(prop_handlers, &pos);
                           zend_hash_get_current_data_ex(prop_handlers, (void **)&entry, &pos)
                                           == SUCCESS;
                           zend_hash_move_forward_ex(prop_handlers, &pos)) {
                   zval    *value;
                   char    *string_key             = NULL;
                   uint    string_length   = 0;
                   ulong   num_key;
   
                   if (entry->read_func(obj, &value TSRMLS_CC) == FAILURE) {
                           continue;
                   }
   
                   if (zend_hash_get_current_key_ex(prop_handlers, &string_key,
                           &string_length, &num_key, 0, &pos) != HASH_KEY_IS_STRING) {
                           continue;
                   }
   
                   if (value == EG(uninitialized_zval_ptr)) {
                           value = null_value;
                   } else if (Z_TYPE_P(value) == IS_OBJECT) {
                           /* these are zvalues create on demand, with refcount and is_ref
                            * status left in an uninitalized stated */
                           zval_dtor(value);
                           efree(value);
   
                           value = object_value;
                   } else {
                           /* see comment above */
                           Z_SET_REFCOUNT_P(value, 0);
                           Z_UNSET_ISREF_P(value);
                   }
   
                   zval_add_ref(&value);
                   zend_hash_add(debug_info, string_key, string_length,
                                   &value, sizeof(zval *), NULL);
           }
   
           zval_ptr_dtor(&null_value);
           zval_ptr_dtor(&object_value);
   
           return debug_info;
   }
   /* }}} */
   
   static HashTable* dom_get_debug_info(zval *object, int *is_temp TSRMLS_DC) /* {{{ */
   {
          return dom_get_debug_info_helper(object, is_temp TSRMLS_CC);
   }
   /* }}} */
   
 void *php_dom_export_node(zval *object TSRMLS_DC) /* {{{ */  void *php_dom_export_node(zval *object TSRMLS_DC) /* {{{ */
 {  {
         php_libxml_node_object *intern;          php_libxml_node_object *intern;
Line 484  void *php_dom_export_node(zval *object TSRMLS_DC) /* { Line 565  void *php_dom_export_node(zval *object TSRMLS_DC) /* {
    Get a simplexml_element object from dom to allow for processing */     Get a simplexml_element object from dom to allow for processing */
 PHP_FUNCTION(dom_import_simplexml)  PHP_FUNCTION(dom_import_simplexml)
 {  {
         zval *rv = NULL;  
         zval *node;          zval *node;
         xmlNodePtr nodep = NULL;          xmlNodePtr nodep = NULL;
         php_libxml_node_object *nodeobj;          php_libxml_node_object *nodeobj;
Line 498  PHP_FUNCTION(dom_import_simplexml) Line 578  PHP_FUNCTION(dom_import_simplexml)
         nodep = php_libxml_import_node(node TSRMLS_CC);          nodep = php_libxml_import_node(node TSRMLS_CC);
   
         if (nodep && nodeobj && (nodep->type == XML_ELEMENT_NODE || nodep->type == XML_ATTRIBUTE_NODE)) {          if (nodep && nodeobj && (nodep->type == XML_ELEMENT_NODE || nodep->type == XML_ATTRIBUTE_NODE)) {
                DOM_RET_OBJ(rv, (xmlNodePtr) nodep, &ret, (dom_object *)nodeobj);                DOM_RET_OBJ((xmlNodePtr) nodep, &ret, (dom_object *)nodeobj);
         } else {          } else {
                 php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid Nodetype to import");                  php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid Nodetype to import");
                 RETURN_NULL();                  RETURN_NULL();
Line 586  PHP_MINIT_FUNCTION(dom) Line 666  PHP_MINIT_FUNCTION(dom)
         dom_object_handlers.get_property_ptr_ptr = dom_get_property_ptr_ptr;          dom_object_handlers.get_property_ptr_ptr = dom_get_property_ptr_ptr;
         dom_object_handlers.clone_obj = dom_objects_store_clone_obj;          dom_object_handlers.clone_obj = dom_objects_store_clone_obj;
         dom_object_handlers.has_property = dom_property_exists;          dom_object_handlers.has_property = dom_property_exists;
           dom_object_handlers.get_debug_info = dom_get_debug_info;
   
         zend_hash_init(&classes, 0, NULL, NULL, 1);          zend_hash_init(&classes, 0, NULL, NULL, 1);
   
Line 1053  void dom_namednode_iter(dom_object *basenode, int ntyp Line 1134  void dom_namednode_iter(dom_object *basenode, int ntyp
 static dom_object* dom_objects_set_class(zend_class_entry *class_type, zend_bool hash_copy TSRMLS_DC) /* {{{ */  static dom_object* dom_objects_set_class(zend_class_entry *class_type, zend_bool hash_copy TSRMLS_DC) /* {{{ */
 {  {
         zend_class_entry *base_class;          zend_class_entry *base_class;
         zval *tmp;  
         dom_object *intern;          dom_object *intern;
   
         if (instanceof_function(class_type, dom_xpath_class_entry TSRMLS_CC)) {          if (instanceof_function(class_type, dom_xpath_class_entry TSRMLS_CC)) {
Line 1075  static dom_object* dom_objects_set_class(zend_class_en Line 1155  static dom_object* dom_objects_set_class(zend_class_en
   
         zend_object_std_init(&intern->std, class_type TSRMLS_CC);          zend_object_std_init(&intern->std, class_type TSRMLS_CC);
         if (hash_copy) {          if (hash_copy) {
                zend_hash_copy(intern->std.properties, &class_type->default_properties, (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *));                object_properties_init(&intern->std, class_type);
         }          }
   
         return intern;          return intern;
Line 1234  void php_dom_create_interator(zval *return_value, int  Line 1314  void php_dom_create_interator(zval *return_value, int 
 /* }}} */  /* }}} */
   
 /* {{{ php_dom_create_object */  /* {{{ php_dom_create_object */
PHP_DOM_EXPORT zval *php_dom_create_object(xmlNodePtr obj, int *found, zval *wrapper_in, zval *return_value, dom_object *domobj TSRMLS_DC)PHP_DOM_EXPORT zval *php_dom_create_object(xmlNodePtr obj, int *found, zval *return_value, dom_object *domobj TSRMLS_DC)
 {  {
         zval *wrapper;          zval *wrapper;
         zend_class_entry *ce;          zend_class_entry *ce;

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


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