Merge branch 'refactoring2' of github.com:zendtech/php into refactoring2

This commit is contained in:
Dmitry Stogov 2014-04-15 22:44:21 +04:00
commit a4bda5b187
32 changed files with 839 additions and 1349 deletions

View File

@ -90,28 +90,16 @@ ZEND_METHOD(Closure, bind)
} else if (Z_TYPE_P(scope_arg) == IS_NULL) {
ce = NULL;
} else {
zend_string *class_name;
zval tmp_zval;
ZVAL_UNDEF(&tmp_zval);
if (Z_TYPE_P(scope_arg) == IS_STRING) {
class_name = Z_STR_P(scope_arg);
} else {
ZVAL_DUP(&tmp_zval, scope_arg);
convert_to_string(&tmp_zval);
class_name = Z_STR(tmp_zval);
}
zend_string *class_name = zval_get_string(scope_arg TSRMLS_CC);
if ((class_name->len == sizeof("static") - 1) &&
(memcmp("static", class_name->val, sizeof("static") - 1) == 0)) {
ce = closure->func.common.scope;
}
else if ((ce = zend_lookup_class_ex(class_name, NULL, 1 TSRMLS_CC)) == NULL) {
} else if ((ce = zend_lookup_class_ex(class_name, NULL, 1 TSRMLS_CC)) == NULL) {
zend_error(E_WARNING, "Class '%s' not found", class_name->val);
zval_dtor(&tmp_zval);
STR_RELEASE(class_name);
RETURN_NULL();
}
zval_dtor(&tmp_zval);
STR_RELEASE(class_name);
}
} else { /* scope argument not given; do not change the scope by default */
ce = closure->func.common.scope;

View File

@ -819,6 +819,137 @@ ZEND_API void multi_convert_to_string_ex(int argc, ...) /* {{{ */
}
/* }}} */
ZEND_API long zval_get_long(zval *op TSRMLS_DC) /* {{{ */
{
switch (Z_TYPE_P(op)) {
case IS_NULL:
return 0;
case IS_RESOURCE:
return Z_RES_HANDLE_P(op);
case IS_BOOL:
case IS_LONG:
return Z_LVAL_P(op);
case IS_DOUBLE:
return zend_dval_to_lval(Z_DVAL_P(op));
case IS_STRING:
return strtol(Z_STRVAL_P(op), NULL, 10);
case IS_ARRAY:
return zend_hash_num_elements(Z_ARRVAL_P(op)) ? 1 : 0;
case IS_OBJECT:
{
zval tmp;
ZVAL_DUP(&tmp, op);
convert_object_to_type(&tmp, IS_LONG, convert_to_long);
if (Z_TYPE(tmp) == IS_LONG) {
return Z_LVAL(tmp);
} else {
zend_error(E_NOTICE, "Object of class %s could not be converted to int", Z_OBJCE_P(op)->name->val);
zval_dtor(&tmp);
return 1;
}
}
default:
zend_error(E_WARNING, "Cannot convert to ordinal value");
return 0;
}
}
/* }}} */
ZEND_API double zval_get_double(zval *op TSRMLS_DC) /* {{{ */
{
switch (Z_TYPE_P(op)) {
case IS_NULL:
return 0.0;
case IS_RESOURCE:
return (double) Z_RES_HANDLE_P(op);
case IS_BOOL:
case IS_LONG:
return (double) Z_LVAL_P(op);
case IS_DOUBLE:
return Z_DVAL_P(op);
case IS_STRING:
return zend_strtod(Z_STRVAL_P(op), NULL);
case IS_ARRAY:
return zend_hash_num_elements(Z_ARRVAL_P(op)) ? 1.0 : 0.0;
case IS_OBJECT:
{
zval tmp;
ZVAL_DUP(&tmp, op);
convert_object_to_type(op, IS_DOUBLE, convert_to_double);
if (Z_TYPE(tmp) == IS_DOUBLE) {
return Z_DVAL(tmp);
} else {
zend_error(E_NOTICE, "Object of class %s could not be converted to double", Z_OBJCE_P(op)->name->val);
zval_dtor(&tmp);
return 1.0;
}
}
default:
zend_error(E_WARNING, "Cannot convert to real value (type=%d)", Z_TYPE_P(op));
return 0.0;
}
}
/* }}} */
ZEND_API zend_string *zval_get_string(zval *op TSRMLS_DC) /* {{{ */
{
switch (Z_TYPE_P(op)) {
case IS_NULL:
return STR_EMPTY_ALLOC();
case IS_STRING:
return STR_COPY(Z_STR_P(op));
case IS_BOOL:
if (Z_LVAL_P(op)) {
return STR_INIT("1", 1, 0);
} else {
return STR_EMPTY_ALLOC();
}
case IS_RESOURCE: {
char *str;
int len = zend_spprintf(&str, 0, "Resource id #%ld", Z_RES_HANDLE_P(op));
zend_string *retval = STR_INIT(str, len, 0);
efree(str);
return retval;
}
case IS_LONG: {
char *str;
int len = zend_spprintf(&str, 0, "%ld", Z_LVAL_P(op));
zend_string *retval = STR_INIT(str, len, 0);
efree(str);
return retval;
}
case IS_DOUBLE: {
char *str;
int len = zend_spprintf(&str, 0, "%.*G", (int) EG(precision), Z_DVAL_P(op));
zend_string *retval = STR_INIT(str, len, 0);
efree(str);
return retval;
}
case IS_ARRAY:
zend_error(E_NOTICE, "Array to string conversion");
return STR_INIT("Array", sizeof("Array")-1, 0);
case IS_OBJECT: {
zval tmp;
ZVAL_DUP(&tmp, op);
convert_object_to_type(op, IS_STRING, convert_to_string);
if (Z_TYPE(tmp) == IS_STRING) {
return Z_STR(tmp);
} else {
zend_error(E_NOTICE, "Object of class %s to string conversion", Z_OBJCE_P(op)->name->val);
zval_dtor(&tmp);
return STR_INIT("Object", sizeof("Object")-1, 0);
}
}
default:
//??? original code returns bool(0)
return STR_EMPTY_ALLOC();
}
}
/* }}} */
ZEND_API int add_function(zval *result, zval *op1, zval *op2 TSRMLS_DC) /* {{{ */
{
zval op1_copy, op2_copy;

View File

@ -336,6 +336,11 @@ ZEND_API void convert_to_object(zval *op);
ZEND_API void multi_convert_to_long_ex(int argc, ...);
ZEND_API void multi_convert_to_double_ex(int argc, ...);
ZEND_API void multi_convert_to_string_ex(int argc, ...);
ZEND_API long zval_get_long(zval *op TSRMLS_DC);
ZEND_API double zval_get_double(zval *op TSRMLS_DC);
ZEND_API zend_string *zval_get_string(zval *op TSRMLS_DC);
ZEND_API int add_char_to_string(zval *result, const zval *op1, const zval *op2);
ZEND_API int add_string_to_string(zval *result, const zval *op1, const zval *op2);
#define convert_to_cstring(op) if (Z_TYPE_P(op) != IS_STRING) { _convert_to_cstring((op) ZEND_FILE_LINE_CC); }

View File

@ -4038,16 +4038,7 @@ void date_interval_write_property(zval *object, zval *member, zval *value, const
#define SET_VALUE_FROM_STRUCT(n,m) \
if (strcmp(Z_STRVAL_P(member), m) == 0) { \
if (Z_TYPE_P(value) != IS_LONG) { \
tmp_value = *value; \
zval_copy_ctor(&tmp_value); \
convert_to_long(&tmp_value); \
value = &tmp_value; \
} \
obj->diff->n = Z_LVAL_P(value); \
if (value == &tmp_value) { \
zval_dtor(value); \
} \
obj->diff->n = zval_get_long(value TSRMLS_CC); \
break; \
}

View File

@ -55,7 +55,6 @@ const zend_function_entry php_dom_attr_class_functions[] = {
/* {{{ proto void DOMAttr::__construct(string name, [string value]); */
PHP_METHOD(domattr, __construct)
{
zval *id;
xmlAttrPtr nodep = NULL;
xmlNodePtr oldnode = NULL;
@ -71,7 +70,7 @@ PHP_METHOD(domattr, __construct)
}
zend_restore_error_handling(&error_handling TSRMLS_CC);
intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC);
intern = Z_DOMOBJ_P(id);
name_valid = xmlValidateName((xmlChar *) name, 0);
if (name_valid != 0) {
@ -102,7 +101,7 @@ readonly=yes
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-1112119403
Since:
*/
int dom_attr_name_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_attr_name_read(dom_object *obj, zval *retval TSRMLS_DC)
{
xmlAttrPtr attrp;
@ -113,8 +112,7 @@ int dom_attr_name_read(dom_object *obj, zval **retval TSRMLS_DC)
return FAILURE;
}
ALLOC_ZVAL(*retval);
ZVAL_STRING(*retval, (char *) (attrp->name), 1);
ZVAL_STRING(retval, (char *) attrp->name);
return SUCCESS;
}
@ -126,11 +124,10 @@ readonly=yes
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-862529273
Since:
*/
int dom_attr_specified_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_attr_specified_read(dom_object *obj, zval *retval TSRMLS_DC)
{
/* TODO */
ALLOC_ZVAL(*retval);
ZVAL_TRUE(*retval);
ZVAL_TRUE(retval);
return SUCCESS;
}
@ -141,26 +138,21 @@ readonly=no
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-221662474
Since:
*/
int dom_attr_value_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_attr_value_read(dom_object *obj, zval *retval TSRMLS_DC)
{
xmlAttrPtr attrp;
xmlAttrPtr attrp = (xmlAttrPtr) dom_object_get_node(obj);
xmlChar *content;
attrp = (xmlAttrPtr) dom_object_get_node(obj);
if (attrp == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
return FAILURE;
}
ALLOC_ZVAL(*retval);
if ((content = xmlNodeGetContent((xmlNodePtr) attrp)) != NULL) {
ZVAL_STRING(*retval, content, 1);
ZVAL_STRING(retval, content);
xmlFree(content);
} else {
ZVAL_EMPTY_STRING(*retval);
ZVAL_EMPTY_STRING(retval);
}
return SUCCESS;
@ -169,10 +161,8 @@ int dom_attr_value_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_attr_value_write(dom_object *obj, zval *newval TSRMLS_DC)
{
zval value_copy;
xmlAttrPtr attrp;
attrp = (xmlAttrPtr) dom_object_get_node(obj);
zend_string *str;
xmlAttrPtr attrp = (xmlAttrPtr) dom_object_get_node(obj);
if (attrp == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
@ -183,21 +173,11 @@ int dom_attr_value_write(dom_object *obj, zval *newval TSRMLS_DC)
node_list_unlink(attrp->children TSRMLS_CC);
}
if (newval->type != IS_STRING) {
if(Z_REFCOUNT_P(newval) > 1) {
value_copy = *newval;
zval_copy_ctor(&value_copy);
newval = &value_copy;
}
convert_to_string(newval);
}
str = zval_get_string(newval TSRMLS_CC);
xmlNodeSetContentLen((xmlNodePtr) attrp, Z_STRVAL_P(newval), Z_STRLEN_P(newval) + 1);
if (newval == &value_copy) {
zval_dtor(newval);
}
STR_RELEASE(str);
return SUCCESS;
}
@ -208,10 +188,9 @@ readonly=yes
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Attr-ownerElement
Since: DOM Level 2
*/
int dom_attr_owner_element_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_attr_owner_element_read(dom_object *obj, zval *retval TSRMLS_DC)
{
xmlNodePtr nodep, nodeparent;
int ret;
nodep = dom_object_get_node(obj);
@ -220,18 +199,13 @@ int dom_attr_owner_element_read(dom_object *obj, zval **retval TSRMLS_DC)
return FAILURE;
}
ALLOC_ZVAL(*retval);
nodeparent = nodep->parent;
if (!nodeparent) {
ZVAL_NULL(*retval);
ZVAL_NULL(retval);
return SUCCESS;
}
if (NULL == (*retval = php_dom_create_object(nodeparent, &ret, *retval, obj TSRMLS_CC))) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot create required DOM object");
return FAILURE;
}
php_dom_create_object(nodeparent, retval, obj TSRMLS_CC);
return SUCCESS;
}
@ -243,11 +217,10 @@ readonly=yes
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Attr-schemaTypeInfo
Since: DOM Level 3
*/
int dom_attr_schema_type_info_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_attr_schema_type_info_read(dom_object *obj, zval *retval TSRMLS_DC)
{
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not yet implemented");
ALLOC_ZVAL(*retval);
ZVAL_NULL(*retval);
ZVAL_NULL(retval);
return SUCCESS;
}

View File

@ -71,14 +71,12 @@ PHP_METHOD(domcdatasection, __construct)
RETURN_FALSE;
}
intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC);
if (intern != NULL) {
oldnode = dom_object_get_node(intern);
if (oldnode != NULL) {
php_libxml_node_free_resource(oldnode TSRMLS_CC);
}
php_libxml_increment_node_ptr((php_libxml_node_object *)intern, nodep, (void *)intern TSRMLS_CC);
intern = Z_DOMOBJ_P(id);
oldnode = dom_object_get_node(intern);
if (oldnode != NULL) {
php_libxml_node_free_resource(oldnode TSRMLS_CC);
}
php_libxml_increment_node_ptr((php_libxml_node_object *)intern, nodep, (void *)intern TSRMLS_CC);
}
/* }}} end DOMCdataSection::__construct */

View File

@ -76,25 +76,21 @@ readonly=no
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-72AB8359
Since:
*/
int dom_characterdata_data_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_characterdata_data_read(dom_object *obj, zval *retval TSRMLS_DC)
{
xmlNodePtr nodep;
xmlNodePtr nodep = dom_object_get_node(obj);
xmlChar *content;
nodep = dom_object_get_node(obj);
if (nodep == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
return FAILURE;
}
ALLOC_ZVAL(*retval);
if ((content = xmlNodeGetContent(nodep)) != NULL) {
ZVAL_STRING(*retval, content, 1);
ZVAL_STRING(retval, content);
xmlFree(content);
} else {
ZVAL_EMPTY_STRING(*retval);
ZVAL_EMPTY_STRING(retval);
}
return SUCCESS;
@ -102,31 +98,19 @@ int dom_characterdata_data_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_characterdata_data_write(dom_object *obj, zval *newval TSRMLS_DC)
{
zval value_copy;
xmlNode *nodep;
nodep = dom_object_get_node(obj);
xmlNode *nodep = dom_object_get_node(obj);
zend_string *str;
if (nodep == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
return FAILURE;
}
if (newval->type != IS_STRING) {
if(Z_REFCOUNT_P(newval) > 1) {
value_copy = *newval;
zval_copy_ctor(&value_copy);
newval = &value_copy;
}
convert_to_string(newval);
}
str = zval_get_string(newval TSRMLS_CC);
xmlNodeSetContentLen(nodep, Z_STRVAL_P(newval), Z_STRLEN_P(newval) + 1);
if (newval == &value_copy) {
zval_dtor(newval);
}
xmlNodeSetContentLen(nodep, str->val, str->len + 1);
STR_RELEASE(str);
return SUCCESS;
}
@ -137,21 +121,17 @@ readonly=yes
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-7D61178C
Since:
*/
int dom_characterdata_length_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_characterdata_length_read(dom_object *obj, zval *retval TSRMLS_DC)
{
xmlNodePtr nodep;
xmlNodePtr nodep = dom_object_get_node(obj);
xmlChar *content;
long length = 0;
nodep = dom_object_get_node(obj);
if (nodep == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
return FAILURE;
}
ALLOC_ZVAL(*retval);
content = xmlNodeGetContent(nodep);
if (content) {
@ -159,7 +139,7 @@ int dom_characterdata_length_read(dom_object *obj, zval **retval TSRMLS_DC)
xmlFree(content);
}
ZVAL_LONG(*retval, length);
ZVAL_LONG(retval, length);
return SUCCESS;
}
@ -207,7 +187,7 @@ PHP_FUNCTION(dom_characterdata_substring_data)
xmlFree(cur);
if (substring) {
RETVAL_STRING(substring, 1);
RETVAL_STRING(substring);
xmlFree(substring);
} else {
RETVAL_EMPTY_STRING();

View File

@ -71,7 +71,7 @@ PHP_METHOD(domcomment, __construct)
RETURN_FALSE;
}
intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC);
intern = Z_DOMOBJ_P(id);
if (intern != NULL) {
oldnode = dom_object_get_node(intern);
if (oldnode != NULL) {

View File

@ -240,33 +240,24 @@ readonly=yes
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-B63ED1A31
Since:
*/
int dom_document_doctype_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_document_doctype_read(dom_object *obj, zval *retval TSRMLS_DC)
{
xmlDoc *docp;
xmlDoc *docp = (xmlDocPtr) dom_object_get_node(obj);
xmlDtdPtr dtdptr;
int ret;
docp = (xmlDocPtr) dom_object_get_node(obj);
if (docp == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
return FAILURE;
}
ALLOC_ZVAL(*retval);
dtdptr = xmlGetIntSubset(docp);
if (!dtdptr) {
ZVAL_NULL(*retval);
ZVAL_NULL(retval);
return SUCCESS;
}
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");
return FAILURE;
}
php_dom_create_object((xmlNodePtr) dtdptr, retval, obj TSRMLS_CC);
return SUCCESS;
}
/* }}} */
@ -276,9 +267,8 @@ readonly=yes
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1B793EBA
Since:
*/
int dom_document_implementation_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_document_implementation_read(dom_object *obj, zval *retval TSRMLS_DC)
{
ALLOC_ZVAL(*retval);
php_dom_create_implementation(retval TSRMLS_CC);
return SUCCESS;
}
@ -290,31 +280,23 @@ readonly=yes
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-87CD092
Since:
*/
int dom_document_document_element_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_document_document_element_read(dom_object *obj, zval *retval TSRMLS_DC)
{
xmlDoc *docp;
xmlDoc *docp = (xmlDocPtr) dom_object_get_node(obj);
xmlNode *root;
int ret;
docp = (xmlDocPtr) dom_object_get_node(obj);
if (docp == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
return FAILURE;
}
ALLOC_ZVAL(*retval);
root = xmlDocGetRootElement(docp);
if (!root) {
ZVAL_NULL(*retval);
ZVAL_NULL(retval);
return SUCCESS;
}
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");
return FAILURE;
}
php_dom_create_object(root, retval, obj TSRMLS_CC);
return SUCCESS;
}
@ -324,25 +306,22 @@ int dom_document_document_element_read(dom_object *obj, zval **retval TSRMLS_DC)
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Document3-encoding
Since: DOM Level 3
*/
int dom_document_encoding_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_document_encoding_read(dom_object *obj, zval *retval TSRMLS_DC)
{
xmlDoc *docp;
xmlDoc *docp = (xmlDocPtr) dom_object_get_node(obj);
char *encoding;
docp = (xmlDocPtr) dom_object_get_node(obj);
if (docp == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
return FAILURE;
}
encoding = (char *) docp->encoding;
ALLOC_ZVAL(*retval);
if (encoding != NULL) {
ZVAL_STRING(*retval, encoding, 1);
ZVAL_STRING(retval, encoding);
} else {
ZVAL_NULL(*retval);
ZVAL_NULL(retval);
}
return SUCCESS;
@ -350,25 +329,16 @@ int dom_document_encoding_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_document_encoding_write(dom_object *obj, zval *newval TSRMLS_DC)
{
zval value_copy;
xmlDoc *docp;
xmlDoc *docp = (xmlDocPtr) dom_object_get_node(obj);
zend_string *str;
xmlCharEncodingHandlerPtr handler;
docp = (xmlDocPtr) dom_object_get_node(obj);
if (docp == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
return FAILURE;
}
if (newval->type != IS_STRING) {
if(Z_REFCOUNT_P(newval) > 1) {
value_copy = *newval;
zval_copy_ctor(&value_copy);
newval = &value_copy;
}
convert_to_string(newval);
}
str = zval_get_string(newval TSRMLS_CC);
handler = xmlFindCharEncodingHandler(Z_STRVAL_P(newval));
@ -377,15 +347,12 @@ int dom_document_encoding_write(dom_object *obj, zval *newval TSRMLS_DC)
if (docp->encoding != NULL) {
xmlFree((xmlChar *)docp->encoding);
}
docp->encoding = xmlStrdup((const xmlChar *) Z_STRVAL_P(newval));
docp->encoding = xmlStrdup((const xmlChar *) str->val);
} else {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid Document Encoding");
}
if (newval == &value_copy) {
zval_dtor(newval);
}
STR_RELEASE(str);
return SUCCESS;
}
@ -396,10 +363,9 @@ readonly=no
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Document3-standalone
Since: DOM Level 3
*/
int dom_document_standalone_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_document_standalone_read(dom_object *obj, zval *retval TSRMLS_DC)
{
xmlDoc *docp;
int standalone;
docp = (xmlDocPtr) dom_object_get_node(obj);
@ -408,47 +374,22 @@ int dom_document_standalone_read(dom_object *obj, zval **retval TSRMLS_DC)
return FAILURE;
}
ALLOC_ZVAL(*retval);
standalone = docp->standalone;
ZVAL_BOOL(*retval, standalone);
ZVAL_BOOL(retval, docp->standalone);
return SUCCESS;
}
int dom_document_standalone_write(dom_object *obj, zval *newval TSRMLS_DC)
{
zval value_copy;
xmlDoc *docp;
xmlDoc *docp = (xmlDocPtr) dom_object_get_node(obj);
int standalone;
docp = (xmlDocPtr) dom_object_get_node(obj);
if (docp == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
return FAILURE;
}
if(Z_REFCOUNT_P(newval) > 1) {
value_copy = *newval;
zval_copy_ctor(&value_copy);
newval = &value_copy;
}
convert_to_long(newval);
standalone = Z_LVAL_P(newval);
if (standalone > 0) {
docp->standalone = 1;
}
else if (standalone < 0) {
docp->standalone = -1;
}
else {
docp->standalone = 0;
}
if (newval == &value_copy) {
zval_dtor(newval);
}
standalone = zval_get_long(newval TSRMLS_CC);
docp->standalone = ZEND_NORMALIZE_BOOL(standalone);
return SUCCESS;
}
@ -460,25 +401,22 @@ readonly=no
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Document3-version
Since: DOM Level 3
*/
int dom_document_version_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_document_version_read(dom_object *obj, zval *retval TSRMLS_DC)
{
xmlDoc *docp;
xmlDoc *docp = (xmlDocPtr) dom_object_get_node(obj);
char *version;
docp = (xmlDocPtr) dom_object_get_node(obj);
if (docp == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
return FAILURE;
}
version = (char *) docp->version;
ALLOC_ZVAL(*retval);
if (version != NULL) {
ZVAL_STRING(*retval, version, 1);
ZVAL_STRING(retval, version);
} else {
ZVAL_NULL(*retval);
ZVAL_NULL(retval);
}
return SUCCESS;
@ -486,10 +424,8 @@ int dom_document_version_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_document_version_write(dom_object *obj, zval *newval TSRMLS_DC)
{
zval value_copy;
xmlDoc *docp;
docp = (xmlDocPtr) dom_object_get_node(obj);
xmlDoc *docp = (xmlDocPtr) dom_object_get_node(obj);
zend_string *str;
if (docp == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
@ -500,21 +436,11 @@ int dom_document_version_write(dom_object *obj, zval *newval TSRMLS_DC)
xmlFree((xmlChar *) docp->version );
}
if (newval->type != IS_STRING) {
if(Z_REFCOUNT_P(newval) > 1) {
value_copy = *newval;
zval_copy_ctor(&value_copy);
newval = &value_copy;
}
convert_to_string(newval);
}
str = zval_get_string(newval TSRMLS_CC);
docp->version = xmlStrdup((const xmlChar *) Z_STRVAL_P(newval));
if (newval == &value_copy) {
zval_dtor(newval);
}
docp->version = xmlStrdup((const xmlChar *) str->val);
STR_RELEASE(str);
return SUCCESS;
}
@ -525,39 +451,23 @@ readonly=no
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Document3-strictErrorChecking
Since: DOM Level 3
*/
int dom_document_strict_error_checking_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_document_strict_error_checking_read(dom_object *obj, zval *retval TSRMLS_DC)
{
dom_doc_propsptr doc_prop;
ALLOC_ZVAL(*retval);
if (obj->document) {
doc_prop = dom_get_doc_props(obj->document);
ZVAL_BOOL(*retval, doc_prop->stricterror);
dom_doc_propsptr doc_prop = dom_get_doc_props(obj->document);
ZVAL_BOOL(retval, doc_prop->stricterror);
} else {
ZVAL_FALSE(*retval);
ZVAL_FALSE(retval);
}
return SUCCESS;
}
int dom_document_strict_error_checking_write(dom_object *obj, zval *newval TSRMLS_DC)
{
zval value_copy;
dom_doc_propsptr doc_prop;
if(Z_REFCOUNT_P(newval) > 1) {
value_copy = *newval;
zval_copy_ctor(&value_copy);
newval = &value_copy;
}
convert_to_boolean(newval);
if (obj->document) {
doc_prop = dom_get_doc_props(obj->document);
doc_prop->stricterror = Z_LVAL_P(newval);
}
if (newval == &value_copy) {
zval_dtor(newval);
dom_doc_propsptr doc_prop = dom_get_doc_props(obj->document);
doc_prop->stricterror = zend_is_true(newval TSRMLS_CC);
}
return SUCCESS;
@ -568,39 +478,22 @@ int dom_document_strict_error_checking_write(dom_object *obj, zval *newval TSRML
/* {{{ formatOutput boolean
readonly=no
*/
int dom_document_format_output_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_document_format_output_read(dom_object *obj, zval *retval TSRMLS_DC)
{
dom_doc_propsptr doc_prop;
ALLOC_ZVAL(*retval);
if (obj->document) {
doc_prop = dom_get_doc_props(obj->document);
ZVAL_BOOL(*retval, doc_prop->formatoutput);
dom_doc_propsptr doc_prop = dom_get_doc_props(obj->document);
ZVAL_BOOL(retval, doc_prop->formatoutput);
} else {
ZVAL_FALSE(*retval);
ZVAL_FALSE(retval);
}
return SUCCESS;
}
int dom_document_format_output_write(dom_object *obj, zval *newval TSRMLS_DC)
{
zval value_copy;
dom_doc_propsptr doc_prop;
if(Z_REFCOUNT_P(newval) > 1) {
value_copy = *newval;
zval_copy_ctor(&value_copy);
newval = &value_copy;
}
convert_to_boolean(newval);
if (obj->document) {
doc_prop = dom_get_doc_props(obj->document);
doc_prop->formatoutput = Z_LVAL_P(newval);
}
if (newval == &value_copy) {
zval_dtor(newval);
dom_doc_propsptr doc_prop = dom_get_doc_props(obj->document);
doc_prop->formatoutput = zend_is_true(newval TSRMLS_CC);
}
return SUCCESS;
@ -610,39 +503,22 @@ int dom_document_format_output_write(dom_object *obj, zval *newval TSRMLS_DC)
/* {{{ validateOnParse boolean
readonly=no
*/
int dom_document_validate_on_parse_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_document_validate_on_parse_read(dom_object *obj, zval *retval TSRMLS_DC)
{
dom_doc_propsptr doc_prop;
ALLOC_ZVAL(*retval);
if (obj->document) {
doc_prop = dom_get_doc_props(obj->document);
ZVAL_BOOL(*retval, doc_prop->validateonparse);
dom_doc_propsptr doc_prop = dom_get_doc_props(obj->document);
ZVAL_BOOL(retval, doc_prop->validateonparse);
} else {
ZVAL_FALSE(*retval);
ZVAL_FALSE(retval);
}
return SUCCESS;
}
int dom_document_validate_on_parse_write(dom_object *obj, zval *newval TSRMLS_DC)
{
zval value_copy;
dom_doc_propsptr doc_prop;
if(Z_REFCOUNT_P(newval) > 1) {
value_copy = *newval;
zval_copy_ctor(&value_copy);
newval = &value_copy;
}
convert_to_boolean(newval);
if (obj->document) {
doc_prop = dom_get_doc_props(obj->document);
doc_prop->validateonparse = Z_LVAL_P(newval);
}
if (newval == &value_copy) {
zval_dtor(newval);
dom_doc_propsptr doc_prop = dom_get_doc_props(obj->document);
doc_prop->validateonparse = zend_is_true(newval TSRMLS_CC);
}
return SUCCESS;
@ -652,39 +528,22 @@ int dom_document_validate_on_parse_write(dom_object *obj, zval *newval TSRMLS_DC
/* {{{ resolveExternals boolean
readonly=no
*/
int dom_document_resolve_externals_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_document_resolve_externals_read(dom_object *obj, zval *retval TSRMLS_DC)
{
dom_doc_propsptr doc_prop;
ALLOC_ZVAL(*retval);
if (obj->document) {
doc_prop = dom_get_doc_props(obj->document);
ZVAL_BOOL(*retval, doc_prop->resolveexternals);
dom_doc_propsptr doc_prop = dom_get_doc_props(obj->document);
ZVAL_BOOL(retval, doc_prop->resolveexternals);
} else {
ZVAL_FALSE(*retval);
ZVAL_FALSE(retval);
}
return SUCCESS;
}
int dom_document_resolve_externals_write(dom_object *obj, zval *newval TSRMLS_DC)
{
zval value_copy;
dom_doc_propsptr doc_prop;
if(Z_REFCOUNT_P(newval) > 1) {
value_copy = *newval;
zval_copy_ctor(&value_copy);
newval = &value_copy;
}
convert_to_boolean(newval);
if (obj->document) {
doc_prop = dom_get_doc_props(obj->document);
doc_prop->resolveexternals = Z_LVAL_P(newval);
}
if (newval == &value_copy) {
zval_dtor(newval);
dom_doc_propsptr doc_prop = dom_get_doc_props(obj->document);
doc_prop->resolveexternals = zend_is_true(newval TSRMLS_CC);
}
return SUCCESS;
@ -694,39 +553,22 @@ int dom_document_resolve_externals_write(dom_object *obj, zval *newval TSRMLS_DC
/* {{{ preserveWhiteSpace boolean
readonly=no
*/
int dom_document_preserve_whitespace_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_document_preserve_whitespace_read(dom_object *obj, zval *retval TSRMLS_DC)
{
dom_doc_propsptr doc_prop;
ALLOC_ZVAL(*retval);
if (obj->document) {
doc_prop = dom_get_doc_props(obj->document);
ZVAL_BOOL(*retval, doc_prop->preservewhitespace);
dom_doc_propsptr doc_prop = dom_get_doc_props(obj->document);
ZVAL_BOOL(retval, doc_prop->preservewhitespace);
} else {
ZVAL_FALSE(*retval);
ZVAL_FALSE(retval);
}
return SUCCESS;
}
int dom_document_preserve_whitespace_write(dom_object *obj, zval *newval TSRMLS_DC)
{
zval value_copy;
dom_doc_propsptr doc_prop;
if(Z_REFCOUNT_P(newval) > 1) {
value_copy = *newval;
zval_copy_ctor(&value_copy);
newval = &value_copy;
}
convert_to_boolean(newval);
if (obj->document) {
doc_prop = dom_get_doc_props(obj->document);
doc_prop->preservewhitespace = Z_LVAL_P(newval);
}
if (newval == &value_copy) {
zval_dtor(newval);
dom_doc_propsptr doc_prop = dom_get_doc_props(obj->document);
doc_prop->preservewhitespace = zend_is_true(newval TSRMLS_CC);
}
return SUCCESS;
@ -736,39 +578,22 @@ int dom_document_preserve_whitespace_write(dom_object *obj, zval *newval TSRMLS_
/* {{{ recover boolean
readonly=no
*/
int dom_document_recover_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_document_recover_read(dom_object *obj, zval *retval TSRMLS_DC)
{
dom_doc_propsptr doc_prop;
ALLOC_ZVAL(*retval);
if (obj->document) {
doc_prop = dom_get_doc_props(obj->document);
ZVAL_BOOL(*retval, doc_prop->recover);
dom_doc_propsptr doc_prop = dom_get_doc_props(obj->document);
ZVAL_BOOL(retval, doc_prop->recover);
} else {
ZVAL_FALSE(*retval);
ZVAL_FALSE(retval);
}
return SUCCESS;
}
int dom_document_recover_write(dom_object *obj, zval *newval TSRMLS_DC)
{
zval value_copy;
dom_doc_propsptr doc_prop;
if(Z_REFCOUNT_P(newval) > 1) {
value_copy = *newval;
zval_copy_ctor(&value_copy);
newval = &value_copy;
}
convert_to_boolean(newval);
if (obj->document) {
doc_prop = dom_get_doc_props(obj->document);
doc_prop->recover = Z_LVAL_P(newval);
}
if (newval == &value_copy) {
zval_dtor(newval);
dom_doc_propsptr doc_prop = dom_get_doc_props(obj->document);
doc_prop->recover = zend_is_true(newval TSRMLS_CC);
}
return SUCCESS;
@ -778,39 +603,22 @@ int dom_document_recover_write(dom_object *obj, zval *newval TSRMLS_DC)
/* {{{ substituteEntities boolean
readonly=no
*/
int dom_document_substitue_entities_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_document_substitue_entities_read(dom_object *obj, zval *retval TSRMLS_DC)
{
dom_doc_propsptr doc_prop;
ALLOC_ZVAL(*retval);
if (obj->document) {
doc_prop = dom_get_doc_props(obj->document);
ZVAL_BOOL(*retval, doc_prop->substituteentities);
dom_doc_propsptr doc_prop = dom_get_doc_props(obj->document);
ZVAL_BOOL(retval, doc_prop->substituteentities);
} else {
ZVAL_FALSE(*retval);
ZVAL_FALSE(retval);
}
return SUCCESS;
}
int dom_document_substitue_entities_write(dom_object *obj, zval *newval TSRMLS_DC)
{
zval value_copy;
dom_doc_propsptr doc_prop;
if(Z_REFCOUNT_P(newval) > 1) {
value_copy = *newval;
zval_copy_ctor(&value_copy);
newval = &value_copy;
}
convert_to_boolean(newval);
if (obj->document) {
doc_prop = dom_get_doc_props(obj->document);
doc_prop->substituteentities = Z_LVAL_P(newval);
}
if (newval == &value_copy) {
zval_dtor(newval);
dom_doc_propsptr doc_prop = dom_get_doc_props(obj->document);
doc_prop->substituteentities = zend_is_true(newval TSRMLS_CC);
}
return SUCCESS;
@ -822,24 +630,21 @@ readonly=no
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Document3-documentURI
Since: DOM Level 3
*/
int dom_document_document_uri_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_document_document_uri_read(dom_object *obj, zval *retval TSRMLS_DC)
{
xmlDoc *docp;
xmlDoc *docp = (xmlDocPtr) dom_object_get_node(obj);
char *url;
docp = (xmlDocPtr) dom_object_get_node(obj);
if (docp == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
return FAILURE;
}
ALLOC_ZVAL(*retval);
url = (char *) docp->URL;
if (url != NULL) {
ZVAL_STRING(*retval, url, 1);
ZVAL_STRING(retval, url);
} else {
ZVAL_NULL(*retval);
ZVAL_NULL(retval);
}
return SUCCESS;
@ -847,10 +652,8 @@ int dom_document_document_uri_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_document_document_uri_write(dom_object *obj, zval *newval TSRMLS_DC)
{
zval value_copy;
xmlDoc *docp;
docp = (xmlDocPtr) dom_object_get_node(obj);
xmlDoc *docp = (xmlDocPtr) dom_object_get_node(obj);
zend_string *str;
if (docp == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
@ -861,21 +664,11 @@ int dom_document_document_uri_write(dom_object *obj, zval *newval TSRMLS_DC)
xmlFree((xmlChar *) docp->URL);
}
if (newval->type != IS_STRING) {
if(Z_REFCOUNT_P(newval) > 1) {
value_copy = *newval;
zval_copy_ctor(&value_copy);
newval = &value_copy;
}
convert_to_string(newval);
}
str = zval_get_string(newval TSRMLS_CC);
docp->URL = xmlStrdup((const xmlChar *) Z_STRVAL_P(newval));
if (newval == &value_copy) {
zval_dtor(newval);
}
docp->URL = xmlStrdup((const xmlChar *) str->val);
STR_RELEASE(str);
return SUCCESS;
}
@ -886,10 +679,9 @@ readonly=yes
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Document3-config
Since: DOM Level 3
*/
int dom_document_config_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_document_config_read(dom_object *obj, zval *retval TSRMLS_DC)
{
ALLOC_ZVAL(*retval);
ZVAL_NULL(*retval);
ZVAL_NULL(retval);
return SUCCESS;
}
@ -1161,7 +953,7 @@ PHP_FUNCTION(dom_document_get_elements_by_tag_name)
DOM_GET_OBJ(docp, id, xmlDocPtr, intern);
php_dom_create_interator(return_value, DOM_NODELIST TSRMLS_CC);
namednode = (dom_object *)zend_objects_get_address(return_value TSRMLS_CC);
namednode = Z_DOMOBJ_P(return_value);
local = xmlCharStrndup(name, name_len);
dom_namednode_iter(intern, 0, namednode, NULL, local, NULL TSRMLS_CC);
}
@ -1370,7 +1162,7 @@ PHP_FUNCTION(dom_document_get_elements_by_tag_name_ns)
DOM_GET_OBJ(docp, id, xmlDocPtr, intern);
php_dom_create_interator(return_value, DOM_NODELIST TSRMLS_CC);
namednode = (dom_object *)zend_objects_get_address(return_value TSRMLS_CC);
namednode = Z_DOMOBJ_P(return_value);
local = xmlCharStrndup(name, name_len);
nsuri = xmlCharStrndup(uri, uri_len);
dom_namednode_iter(intern, 0, namednode, NULL, local, nsuri TSRMLS_CC);
@ -1476,7 +1268,7 @@ PHP_METHOD(domdocument, __construct)
docp->encoding = (const xmlChar*)xmlStrdup(encoding);
}
intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC);
intern = Z_DOMOBJ_P(id);
if (intern != NULL) {
olddoc = (xmlDocPtr) dom_object_get_node(intern);
if (olddoc != NULL) {
@ -1556,7 +1348,7 @@ static xmlDocPtr dom_document_parser(zval *id, int mode, char *source, int sourc
char *directory=NULL, resolved_path[MAXPATHLEN];
if (id != NULL) {
intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC);
intern = Z_DOMOBJ_P(id);
document = intern->document;
}
@ -1689,7 +1481,7 @@ static void dom_parse_document(INTERNAL_FUNCTION_PARAMETERS, int mode) {
RETURN_FALSE;
if (id != NULL) {
intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC);
intern = Z_DOMOBJ_P(id);
if (intern != NULL) {
docp = (xmlDocPtr) dom_object_get_node(intern);
doc_prop = NULL;
@ -1831,7 +1623,7 @@ PHP_FUNCTION(dom_document_savexml)
xmlBufferFree(buf);
RETURN_FALSE;
}
RETVAL_STRING(mem, 1);
RETVAL_STRING(mem);
xmlBufferFree(buf);
} else {
if (options & LIBXML_SAVE_NOEMPTYTAG) {
@ -1846,7 +1638,7 @@ PHP_FUNCTION(dom_document_savexml)
if (!size) {
RETURN_FALSE;
}
RETVAL_STRINGL(mem, size, 1);
RETVAL_STRINGL(mem, size);
xmlFree(mem);
}
}
@ -2208,7 +2000,7 @@ static void dom_load_html(INTERNAL_FUNCTION_PARAMETERS, int mode) /* {{{ */
RETURN_FALSE;
if (id != NULL && instanceof_function(Z_OBJCE_P(id), dom_document_class_entry TSRMLS_CC)) {
intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC);
intern = Z_DOMOBJ_P(id);
if (intern != NULL) {
docp = (xmlDocPtr) dom_object_get_node(intern);
doc_prop = NULL;
@ -2353,7 +2145,7 @@ PHP_FUNCTION(dom_document_save_html)
if (!mem) {
RETVAL_FALSE;
} else {
RETVAL_STRINGL((const char*) mem, size, 1);
RETVAL_STRINGL((const char*) mem, size);
}
} else {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error dumping HTML node");
@ -2369,7 +2161,7 @@ PHP_FUNCTION(dom_document_save_html)
if (!size) {
RETVAL_FALSE;
} else {
RETVAL_STRINGL((const char*) mem, size, 1);
RETVAL_STRINGL((const char*) mem, size);
}
if (mem)
xmlFree(mem);
@ -2386,47 +2178,22 @@ PHP_METHOD(domdocument, registerNodeClass)
{
zval *id;
xmlDoc *docp;
char *baseclass = NULL, *extendedclass = NULL;
int baseclass_len = 0, extendedclass_len = 0;
zend_class_entry *basece = NULL, *ce = NULL;
zend_class_entry *basece = dom_node_class_entry, *ce = NULL;
dom_object *intern;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Oss!", &id, dom_document_class_entry, &baseclass, &baseclass_len, &extendedclass, &extendedclass_len) == FAILURE) {
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "OCs!", &id, dom_document_class_entry, &basece, &ce) == FAILURE) {
return;
}
if (baseclass_len) {
zend_class_entry **pce;
if (zend_lookup_class(baseclass, baseclass_len, &pce TSRMLS_CC) == FAILURE) {
php_error_docref(NULL TSRMLS_CC, E_ERROR, "Class %s does not exist", baseclass);
return;
}
basece = *pce;
}
if (basece == NULL || ! instanceof_function(basece, dom_node_class_entry TSRMLS_CC)) {
php_error_docref(NULL TSRMLS_CC, E_ERROR, "Class %s is not derived from DOMNode.", baseclass);
return;
}
if (extendedclass_len) {
zend_class_entry **pce;
if (zend_lookup_class(extendedclass, extendedclass_len, &pce TSRMLS_CC) == FAILURE) {
php_error_docref(NULL TSRMLS_CC, E_ERROR, "Class %s does not exist", extendedclass);
}
ce = *pce;
}
if (ce == NULL || instanceof_function(ce, basece TSRMLS_CC)) {
DOM_GET_OBJ(docp, id, xmlDocPtr, intern);
if (dom_set_doc_classmap(intern->document, basece, ce TSRMLS_CC) == FAILURE) {
php_error_docref(NULL TSRMLS_CC, E_ERROR, "Class %s could not be registered.", extendedclass);
php_error_docref(NULL TSRMLS_CC, E_ERROR, "Class %s could not be registered.", ce->name->val);
}
RETURN_TRUE;
} else {
php_error_docref(NULL TSRMLS_CC, E_ERROR, "Class %s is not derived from %s.", extendedclass, baseclass);
php_error_docref(NULL TSRMLS_CC, E_ERROR, "Class %s is not derived from %s.", ce->name->val, basece->name->val);
}
RETURN_FALSE;

View File

@ -72,15 +72,13 @@ PHP_METHOD(domdocumentfragment, __construct)
RETURN_FALSE;
}
intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC);
if (intern != NULL) {
oldnode = dom_object_get_node(intern);
if (oldnode != NULL) {
php_libxml_node_free_resource(oldnode TSRMLS_CC);
}
/* php_dom_set_object(intern, nodep TSRMLS_CC); */
php_libxml_increment_node_ptr((php_libxml_node_object *)intern, nodep, (void *)intern TSRMLS_CC);
intern = Z_DOMOBJ_P(id);
oldnode = dom_object_get_node(intern);
if (oldnode != NULL) {
php_libxml_node_free_resource(oldnode TSRMLS_CC);
}
/* php_dom_set_object(intern, nodep TSRMLS_CC); */
php_libxml_increment_node_ptr((php_libxml_node_object *)intern, nodep, (void *)intern TSRMLS_CC);
}
/* }}} end DOMDocumentFragment::__construct */

View File

@ -43,19 +43,16 @@ readonly=yes
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1844763134
Since:
*/
int dom_documenttype_name_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_documenttype_name_read(dom_object *obj, zval *retval TSRMLS_DC)
{
xmlDtdPtr dtdptr;
dtdptr = (xmlDtdPtr) dom_object_get_node(obj);
xmlDtdPtr dtdptr = (xmlDtdPtr) dom_object_get_node(obj);
if (dtdptr == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
return FAILURE;
}
ALLOC_ZVAL(*retval);
ZVAL_STRING(*retval, (char *) (dtdptr->name), 1);
ZVAL_STRING(retval, (char *) (dtdptr->name));
return SUCCESS;
}
@ -67,25 +64,22 @@ readonly=yes
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1788794630
Since:
*/
int dom_documenttype_entities_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_documenttype_entities_read(dom_object *obj, zval *retval TSRMLS_DC)
{
xmlDtdPtr doctypep;
xmlDtdPtr doctypep = (xmlDtdPtr) dom_object_get_node(obj);
xmlHashTable *entityht;
dom_object *intern;
doctypep = (xmlDtdPtr) dom_object_get_node(obj);
if (doctypep == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
return FAILURE;
}
MAKE_STD_ZVAL(*retval);
php_dom_create_interator(*retval, DOM_NAMEDNODEMAP TSRMLS_CC);
php_dom_create_interator(retval, DOM_NAMEDNODEMAP TSRMLS_CC);
entityht = (xmlHashTable *) doctypep->entities;
intern = (dom_object *)zend_objects_get_address(*retval TSRMLS_CC);
intern = Z_DOMOBJ_P(retval);
dom_namednode_iter(obj, XML_ENTITY_NODE, intern, entityht, NULL, NULL TSRMLS_CC);
return SUCCESS;
@ -98,25 +92,22 @@ readonly=yes
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-D46829EF
Since:
*/
int dom_documenttype_notations_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_documenttype_notations_read(dom_object *obj, zval *retval TSRMLS_DC)
{
xmlDtdPtr doctypep;
xmlDtdPtr doctypep = (xmlDtdPtr) dom_object_get_node(obj);
xmlHashTable *notationht;
dom_object *intern;
doctypep = (xmlDtdPtr) dom_object_get_node(obj);
if (doctypep == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
return FAILURE;
}
MAKE_STD_ZVAL(*retval);
php_dom_create_interator(*retval, DOM_NAMEDNODEMAP TSRMLS_CC);
php_dom_create_interator(retval, DOM_NAMEDNODEMAP TSRMLS_CC);
notationht = (xmlHashTable *) doctypep->notations;
intern = (dom_object *)zend_objects_get_address(*retval TSRMLS_CC);
intern = Z_DOMOBJ_P(retval);
dom_namednode_iter(obj, XML_NOTATION_NODE, intern, notationht, NULL, NULL TSRMLS_CC);
return SUCCESS;
@ -129,22 +120,19 @@ readonly=yes
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-Core-DocType-publicId
Since: DOM Level 2
*/
int dom_documenttype_public_id_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_documenttype_public_id_read(dom_object *obj, zval *retval TSRMLS_DC)
{
xmlDtdPtr dtdptr;
dtdptr = (xmlDtdPtr) dom_object_get_node(obj);
xmlDtdPtr dtdptr = (xmlDtdPtr) dom_object_get_node(obj);
if (dtdptr == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
return FAILURE;
}
ALLOC_ZVAL(*retval);
if (dtdptr->ExternalID) {
ZVAL_STRING(*retval, (char *) (dtdptr->ExternalID), 1);
ZVAL_STRING(retval, (char *) (dtdptr->ExternalID));
} else {
ZVAL_EMPTY_STRING(*retval);
ZVAL_EMPTY_STRING(retval);
}
return SUCCESS;
@ -157,22 +145,19 @@ readonly=yes
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-Core-DocType-systemId
Since: DOM Level 2
*/
int dom_documenttype_system_id_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_documenttype_system_id_read(dom_object *obj, zval *retval TSRMLS_DC)
{
xmlDtdPtr dtdptr;
dtdptr = (xmlDtdPtr) dom_object_get_node(obj);
xmlDtdPtr dtdptr = (xmlDtdPtr) dom_object_get_node(obj);
if (dtdptr == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
return FAILURE;
}
ALLOC_ZVAL(*retval);
if (dtdptr->SystemID) {
ZVAL_STRING(*retval, (char *) (dtdptr->SystemID), 1);
ZVAL_STRING(retval, (char *) (dtdptr->SystemID));
} else {
ZVAL_EMPTY_STRING(*retval);
ZVAL_EMPTY_STRING(retval);
}
return SUCCESS;
}
@ -184,38 +169,33 @@ readonly=yes
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-Core-DocType-internalSubset
Since: DOM Level 2
*/
int dom_documenttype_internal_subset_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_documenttype_internal_subset_read(dom_object *obj, zval *retval TSRMLS_DC)
{
xmlDtdPtr dtdptr;
xmlDtdPtr dtdptr = (xmlDtdPtr) dom_object_get_node(obj);
xmlDtd *intsubset;
xmlOutputBuffer *buff = NULL;
dtdptr = (xmlDtdPtr) dom_object_get_node(obj);
if (dtdptr == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
return FAILURE;
}
ALLOC_ZVAL(*retval);
if (dtdptr->doc != NULL && ((intsubset = dtdptr->doc->intSubset) != NULL)) {
buff = xmlAllocOutputBuffer(NULL);
if (buff != NULL) {
xmlNodeDumpOutput (buff, NULL, (xmlNodePtr) intsubset, 0, 0, NULL);
xmlOutputBufferFlush(buff);
#ifdef LIBXML2_NEW_BUFFER
ZVAL_STRINGL(*retval, xmlOutputBufferGetContent(buff), xmlOutputBufferGetSize(buff), 1);
ZVAL_STRINGL(retval, xmlOutputBufferGetContent(buff), xmlOutputBufferGetSize(buff));
#else
ZVAL_STRINGL(*retval, buff->buffer->content, buff->buffer->use, 1);
ZVAL_STRINGL(retval, buff->buffer->content, buff->buffer->use);
#endif
(void)xmlOutputBufferClose(buff);
return SUCCESS;
}
}
ZVAL_EMPTY_STRING(*retval);
ZVAL_EMPTY_STRING(retval);
return SUCCESS;

View File

@ -126,10 +126,10 @@ static void php_dom_iterator_dtor(zend_object_iterator *iter TSRMLS_DC) /* {{{ *
{
php_dom_iterator *iterator = (php_dom_iterator *)iter;
zval_ptr_dtor((zval**)&iterator->intern.data);
zval_ptr_dtor(&iterator->intern.data);
if (iterator->curobj) {
zval_ptr_dtor((zval**)&iterator->curobj);
zval_ptr_dtor(&iterator->curobj);
}
efree(iterator);
@ -149,27 +149,27 @@ static int php_dom_iterator_valid(zend_object_iterator *iter TSRMLS_DC) /* {{{ *
}
/* }}} */
static void php_dom_iterator_current_data(zend_object_iterator *iter, zval ***data TSRMLS_DC) /* {{{ */
zval *php_dom_iterator_current_data(zend_object_iterator *iter TSRMLS_DC) /* {{{ */
{
php_dom_iterator *iterator = (php_dom_iterator *)iter;
*data = &iterator->curobj;
return iterator->curobj;
}
/* }}} */
static void php_dom_iterator_current_key(zend_object_iterator *iter, zval *key TSRMLS_DC) /* {{{ */
{
php_dom_iterator *iterator = (php_dom_iterator *)iter;
zval *object = (zval *)iterator->intern.data;
zval *object = &iterator->intern.data;
if (instanceof_function(Z_OBJCE_P(object), dom_nodelist_class_entry TSRMLS_CC)) {
ZVAL_LONG(key, iter->index);
} else {
dom_object *intern = (dom_object *)zend_object_store_get_object(iterator->curobj TSRMLS_CC);
dom_object *intern = Z_DOMOBJ_P(iterator->curobj);
if (intern != NULL && intern->ptr != NULL) {
xmlNodePtr curnode = (xmlNodePtr)((php_libxml_node_ptr *)intern->ptr)->node;
ZVAL_STRINGL(key, (char *) curnode->name, xmlStrlen(curnode->name), 1);
ZVAL_STRINGL(key, (char *) curnode->name, xmlStrlen(curnode->name));
} else {
ZVAL_NULL(key);
}
@ -185,27 +185,28 @@ static void php_dom_iterator_move_forward(zend_object_iterator *iter TSRMLS_DC)
dom_object *intern;
dom_object *nnmap;
dom_nnodemap_object *objmap;
int ret, previndex=0;
int previndex=0;
HashTable *nodeht;
zval **entry;
zval *entry;
php_dom_iterator *iterator = (php_dom_iterator *)iter;
object = (zval *)iterator->intern.data;
nnmap = (dom_object *)zend_object_store_get_object(object TSRMLS_CC);
object = &iterator->intern.data;
nnmap = Z_DOMOBJ_P(object);
objmap = (dom_nnodemap_object *)nnmap->ptr;
curobj = iterator->curobj;
intern = (dom_object *)zend_object_store_get_object(curobj TSRMLS_CC);
intern = Z_DOMOBJ_P(curobj);
if (intern != NULL && intern->ptr != NULL) {
if (objmap->nodetype != XML_ENTITY_NODE &&
objmap->nodetype != XML_NOTATION_NODE) {
if (objmap->nodetype == DOM_NODESET) {
nodeht = HASH_OF(objmap->baseobjptr);
zend_hash_move_forward(nodeht);
if (zend_hash_get_current_data(nodeht, (void **) &entry)==SUCCESS) {
curattr = *entry;
Z_ADDREF_P(curattr);
if ((entry = zend_hash_get_current_data(nodeht))) {
//???
curattr = entry;
if (Z_REFCOUNTED_P(curattr)) Z_ADDREF_P(curattr);
}
} else {
curnode = (xmlNodePtr)((php_libxml_node_ptr *)intern->ptr)->node;
@ -235,10 +236,9 @@ static void php_dom_iterator_move_forward(zend_object_iterator *iter TSRMLS_DC)
}
}
err:
zval_ptr_dtor((zval**)&curobj);
zval_ptr_dtor(curobj);
if (curnode) {
MAKE_STD_ZVAL(curattr);
curattr = php_dom_create_object(curnode, &ret, curattr, objmap->baseobj TSRMLS_CC);
php_dom_create_object(curnode, curattr, objmap->baseobj TSRMLS_CC);
}
iterator->curobj = curattr;
@ -260,9 +260,9 @@ zend_object_iterator *php_dom_get_iterator(zend_class_entry *ce, zval *object, i
dom_nnodemap_object *objmap;
xmlNodePtr nodep, curnode=NULL;
zval *curattr = NULL;
int ret, curindex = 0;
int curindex = 0;
HashTable *nodeht;
zval **entry;
zval *entry;
php_dom_iterator *iterator;
if (by_ref) {
@ -270,11 +270,10 @@ zend_object_iterator *php_dom_get_iterator(zend_class_entry *ce, zval *object, i
}
iterator = emalloc(sizeof(php_dom_iterator));
Z_ADDREF_P(object);
iterator->intern.data = (void*)object;
ZVAL_COPY(&iterator->intern.data, object);
iterator->intern.funcs = &php_dom_iterator_funcs;
intern = (dom_object *)zend_object_store_get_object(object TSRMLS_CC);
intern = Z_DOMOBJ_P(object);
objmap = (dom_nnodemap_object *)intern->ptr;
if (objmap != NULL) {
if (objmap->nodetype != XML_ENTITY_NODE &&
@ -282,9 +281,9 @@ zend_object_iterator *php_dom_get_iterator(zend_class_entry *ce, zval *object, i
if (objmap->nodetype == DOM_NODESET) {
nodeht = HASH_OF(objmap->baseobjptr);
zend_hash_internal_pointer_reset(nodeht);
if (zend_hash_get_current_data(nodeht, (void **) &entry)==SUCCESS) {
curattr = *entry;
Z_ADDREF_P(curattr);
if ((entry = zend_hash_get_current_data(nodeht))) {
curattr = entry;
if (Z_REFCOUNTED_P(curattr)) Z_ADDREF_P(curattr);
}
} else {
nodep = (xmlNode *)dom_object_get_node(objmap->baseobj);
@ -316,8 +315,7 @@ zend_object_iterator *php_dom_get_iterator(zend_class_entry *ce, zval *object, i
}
err:
if (curnode) {
MAKE_STD_ZVAL(curattr);
curattr = php_dom_create_object(curnode, &ret, curattr, objmap->baseobj TSRMLS_CC);
php_dom_create_object(curnode, curattr, objmap->baseobj TSRMLS_CC);
}
iterator->curobj = curattr;

View File

@ -22,141 +22,141 @@
#define DOM_PROPERTIES_H
/* attr properties */
int dom_attr_name_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_attr_specified_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_attr_value_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_attr_name_read(dom_object *obj, zval *retval TSRMLS_DC);
int dom_attr_specified_read(dom_object *obj, zval *retval TSRMLS_DC);
int dom_attr_value_read(dom_object *obj, zval *retval TSRMLS_DC);
int dom_attr_value_write(dom_object *obj, zval *newval TSRMLS_DC);
int dom_attr_owner_element_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_attr_schema_type_info_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_attr_owner_element_read(dom_object *obj, zval *retval TSRMLS_DC);
int dom_attr_schema_type_info_read(dom_object *obj, zval *retval TSRMLS_DC);
/* characterdata properties */
int dom_characterdata_data_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_characterdata_data_read(dom_object *obj, zval *retval TSRMLS_DC);
int dom_characterdata_data_write(dom_object *obj, zval *newval TSRMLS_DC);
int dom_characterdata_length_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_characterdata_length_read(dom_object *obj, zval *retval TSRMLS_DC);
/* document properties */
int dom_document_doctype_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_document_implementation_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_document_document_element_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_document_actual_encoding_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_document_doctype_read(dom_object *obj, zval *retval TSRMLS_DC);
int dom_document_implementation_read(dom_object *obj, zval *retval TSRMLS_DC);
int dom_document_document_element_read(dom_object *obj, zval *retval TSRMLS_DC);
int dom_document_actual_encoding_read(dom_object *obj, zval *retval TSRMLS_DC);
int dom_document_actual_encoding_write(dom_object *obj, zval *newval TSRMLS_DC);
int dom_document_encoding_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_document_encoding_read(dom_object *obj, zval *retval TSRMLS_DC);
int dom_document_encoding_write(dom_object *obj, zval *newval TSRMLS_DC);
int dom_document_standalone_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_document_standalone_read(dom_object *obj, zval *retval TSRMLS_DC);
int dom_document_standalone_write(dom_object *obj, zval *newval TSRMLS_DC);
int dom_document_version_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_document_version_read(dom_object *obj, zval *retval TSRMLS_DC);
int dom_document_version_write(dom_object *obj, zval *newval TSRMLS_DC);
int dom_document_strict_error_checking_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_document_strict_error_checking_read(dom_object *obj, zval *retval TSRMLS_DC);
int dom_document_strict_error_checking_write(dom_object *obj, zval *newval TSRMLS_DC);
int dom_document_document_uri_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_document_document_uri_read(dom_object *obj, zval *retval TSRMLS_DC);
int dom_document_document_uri_write(dom_object *obj, zval *newval TSRMLS_DC);
int dom_document_config_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_document_format_output_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_document_config_read(dom_object *obj, zval *retval TSRMLS_DC);
int dom_document_format_output_read(dom_object *obj, zval *retval TSRMLS_DC);
int dom_document_format_output_write(dom_object *obj, zval *newval TSRMLS_DC);
int dom_document_validate_on_parse_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_document_validate_on_parse_read(dom_object *obj, zval *retval TSRMLS_DC);
int dom_document_validate_on_parse_write(dom_object *obj, zval *newval TSRMLS_DC);
int dom_document_resolve_externals_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_document_resolve_externals_read(dom_object *obj, zval *retval TSRMLS_DC);
int dom_document_resolve_externals_write(dom_object *obj, zval *newval TSRMLS_DC);
int dom_document_preserve_whitespace_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_document_preserve_whitespace_read(dom_object *obj, zval *retval TSRMLS_DC);
int dom_document_preserve_whitespace_write(dom_object *obj, zval *newval TSRMLS_DC);
int dom_document_recover_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_document_recover_read(dom_object *obj, zval *retval TSRMLS_DC);
int dom_document_recover_write(dom_object *obj, zval *newval TSRMLS_DC);
int dom_document_substitue_entities_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_document_substitue_entities_read(dom_object *obj, zval *retval TSRMLS_DC);
int dom_document_substitue_entities_write(dom_object *obj, zval *newval TSRMLS_DC);
/* documenttype properties */
int dom_documenttype_name_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_documenttype_entities_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_documenttype_notations_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_documenttype_public_id_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_documenttype_system_id_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_documenttype_internal_subset_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_documenttype_name_read(dom_object *obj, zval *retval TSRMLS_DC);
int dom_documenttype_entities_read(dom_object *obj, zval *retval TSRMLS_DC);
int dom_documenttype_notations_read(dom_object *obj, zval *retval TSRMLS_DC);
int dom_documenttype_public_id_read(dom_object *obj, zval *retval TSRMLS_DC);
int dom_documenttype_system_id_read(dom_object *obj, zval *retval TSRMLS_DC);
int dom_documenttype_internal_subset_read(dom_object *obj, zval *retval TSRMLS_DC);
/* domerror properties */
int dom_domerror_severity_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_domerror_message_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_domerror_type_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_domerror_related_exception_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_domerror_related_data_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_domerror_location_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_domerror_severity_read(dom_object *obj, zval *retval TSRMLS_DC);
int dom_domerror_message_read(dom_object *obj, zval *retval TSRMLS_DC);
int dom_domerror_type_read(dom_object *obj, zval *retval TSRMLS_DC);
int dom_domerror_related_exception_read(dom_object *obj, zval *retval TSRMLS_DC);
int dom_domerror_related_data_read(dom_object *obj, zval *retval TSRMLS_DC);
int dom_domerror_location_read(dom_object *obj, zval *retval TSRMLS_DC);
/* domimplementationlist properties */
int dom_domimplementationlist_length_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_domimplementationlist_length_read(dom_object *obj, zval *retval TSRMLS_DC);
/* domlocator properties */
int dom_domlocator_line_number_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_domlocator_column_number_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_domlocator_offset_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_domlocator_related_node_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_domlocator_uri_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_domlocator_line_number_read(dom_object *obj, zval *retval TSRMLS_DC);
int dom_domlocator_column_number_read(dom_object *obj, zval *retval TSRMLS_DC);
int dom_domlocator_offset_read(dom_object *obj, zval *retval TSRMLS_DC);
int dom_domlocator_related_node_read(dom_object *obj, zval *retval TSRMLS_DC);
int dom_domlocator_uri_read(dom_object *obj, zval *retval TSRMLS_DC);
/* domstringlist properties */
int dom_domstringlist_length_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_domstringlist_length_read(dom_object *obj, zval *retval TSRMLS_DC);
/* element properties */
int dom_element_tag_name_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_element_schema_type_info_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_element_tag_name_read(dom_object *obj, zval *retval TSRMLS_DC);
int dom_element_schema_type_info_read(dom_object *obj, zval *retval TSRMLS_DC);
/* entity properties */
int dom_entity_public_id_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_entity_system_id_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_entity_notation_name_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_entity_actual_encoding_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_entity_public_id_read(dom_object *obj, zval *retval TSRMLS_DC);
int dom_entity_system_id_read(dom_object *obj, zval *retval TSRMLS_DC);
int dom_entity_notation_name_read(dom_object *obj, zval *retval TSRMLS_DC);
int dom_entity_actual_encoding_read(dom_object *obj, zval *retval TSRMLS_DC);
int dom_entity_actual_encoding_write(dom_object *obj, zval *newval TSRMLS_DC);
int dom_entity_encoding_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_entity_encoding_read(dom_object *obj, zval *retval TSRMLS_DC);
int dom_entity_encoding_write(dom_object *obj, zval *newval TSRMLS_DC);
int dom_entity_version_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_entity_version_read(dom_object *obj, zval *retval TSRMLS_DC);
int dom_entity_version_write(dom_object *obj, zval *newval TSRMLS_DC);
/* namednodemap properties */
int dom_namednodemap_length_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_namednodemap_length_read(dom_object *obj, zval *retval TSRMLS_DC);
/* namelist properties */
int dom_namelist_length_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_namelist_length_read(dom_object *obj, zval *retval TSRMLS_DC);
/* node properties */
int dom_node_node_name_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_node_node_value_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_node_node_name_read(dom_object *obj, zval *retval TSRMLS_DC);
int dom_node_node_value_read(dom_object *obj, zval *retval TSRMLS_DC);
int dom_node_node_value_write(dom_object *obj, zval *newval TSRMLS_DC);
int dom_node_node_type_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_node_parent_node_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_node_child_nodes_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_node_first_child_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_node_last_child_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_node_previous_sibling_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_node_next_sibling_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_node_attributes_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_node_owner_document_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_node_namespace_uri_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_node_prefix_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_node_node_type_read(dom_object *obj, zval *retval TSRMLS_DC);
int dom_node_parent_node_read(dom_object *obj, zval *retval TSRMLS_DC);
int dom_node_child_nodes_read(dom_object *obj, zval *retval TSRMLS_DC);
int dom_node_first_child_read(dom_object *obj, zval *retval TSRMLS_DC);
int dom_node_last_child_read(dom_object *obj, zval *retval TSRMLS_DC);
int dom_node_previous_sibling_read(dom_object *obj, zval *retval TSRMLS_DC);
int dom_node_next_sibling_read(dom_object *obj, zval *retval TSRMLS_DC);
int dom_node_attributes_read(dom_object *obj, zval *retval TSRMLS_DC);
int dom_node_owner_document_read(dom_object *obj, zval *retval TSRMLS_DC);
int dom_node_namespace_uri_read(dom_object *obj, zval *retval TSRMLS_DC);
int dom_node_prefix_read(dom_object *obj, zval *retval TSRMLS_DC);
int dom_node_prefix_write(dom_object *obj, zval *newval TSRMLS_DC);
int dom_node_local_name_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_node_base_uri_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_node_text_content_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_node_local_name_read(dom_object *obj, zval *retval TSRMLS_DC);
int dom_node_base_uri_read(dom_object *obj, zval *retval TSRMLS_DC);
int dom_node_text_content_read(dom_object *obj, zval *retval TSRMLS_DC);
int dom_node_text_content_write(dom_object *obj, zval *newval TSRMLS_DC);
/* nodelist properties */
int dom_nodelist_length_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_nodelist_length_read(dom_object *obj, zval *retval TSRMLS_DC);
/* notation properties */
int dom_notation_public_id_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_notation_system_id_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_notation_public_id_read(dom_object *obj, zval *retval TSRMLS_DC);
int dom_notation_system_id_read(dom_object *obj, zval *retval TSRMLS_DC);
/* processinginstruction properties */
int dom_processinginstruction_target_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_processinginstruction_data_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_processinginstruction_target_read(dom_object *obj, zval *retval TSRMLS_DC);
int dom_processinginstruction_data_read(dom_object *obj, zval *retval TSRMLS_DC);
int dom_processinginstruction_data_write(dom_object *obj, zval *newval TSRMLS_DC);
/* text properties */
int dom_text_whole_text_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_text_whole_text_read(dom_object *obj, zval *retval TSRMLS_DC);
/* typeinfo properties */
int dom_typeinfo_type_name_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_typeinfo_type_namespace_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_typeinfo_type_name_read(dom_object *obj, zval *retval TSRMLS_DC);
int dom_typeinfo_type_namespace_read(dom_object *obj, zval *retval TSRMLS_DC);
#if defined(LIBXML_XPATH_ENABLED)
/* xpath properties */
int dom_xpath_document_read(dom_object *obj, zval **retval TSRMLS_DC);
int dom_xpath_document_read(dom_object *obj, zval *retval TSRMLS_DC);
#endif
#endif /* DOM_PROPERTIERS_H */

View File

@ -46,10 +46,9 @@ readonly=yes
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ERROR-DOMError-severity
Since:
*/
int dom_domerror_severity_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_domerror_severity_read(dom_object *obj, zval *retval TSRMLS_DC)
{
ALLOC_ZVAL(*retval);
ZVAL_STRING(*retval, "TEST", 1);
ZVAL_STRING(retval, "TEST");
return SUCCESS;
}
@ -60,10 +59,9 @@ readonly=yes
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ERROR-DOMError-message
Since:
*/
int dom_domerror_message_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_domerror_message_read(dom_object *obj, zval *retval TSRMLS_DC)
{
ALLOC_ZVAL(*retval);
ZVAL_STRING(*retval, "TEST", 1);
ZVAL_STRING(retval, "TEST");
return SUCCESS;
}
@ -74,10 +72,9 @@ readonly=yes
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ERROR-DOMError-type
Since:
*/
int dom_domerror_type_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_domerror_type_read(dom_object *obj, zval *retval TSRMLS_DC)
{
ALLOC_ZVAL(*retval);
ZVAL_STRING(*retval, "TEST", 1);
ZVAL_STRING(retval, "TEST");
return SUCCESS;
}
@ -88,10 +85,9 @@ readonly=yes
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ERROR-DOMError-relatedException
Since:
*/
int dom_domerror_related_exception_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_domerror_related_exception_read(dom_object *obj, zval *retval TSRMLS_DC)
{
ALLOC_ZVAL(*retval);
ZVAL_STRING(*retval, "TEST", 1);
ZVAL_STRING(retval, "TEST");
return SUCCESS;
}
@ -102,10 +98,9 @@ readonly=yes
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ERROR-DOMError-relatedData
Since:
*/
int dom_domerror_related_data_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_domerror_related_data_read(dom_object *obj, zval *retval TSRMLS_DC)
{
ALLOC_ZVAL(*retval);
ZVAL_STRING(*retval, "TEST", 1);
ZVAL_STRING(retval, "TEST");
return SUCCESS;
}
@ -116,10 +111,9 @@ readonly=yes
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ERROR-DOMError-location
Since:
*/
int dom_domerror_location_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_domerror_location_read(dom_object *obj, zval *retval TSRMLS_DC)
{
ALLOC_ZVAL(*retval);
ZVAL_STRING(*retval, "TEST", 1);
ZVAL_STRING(retval, "TEST");
return SUCCESS;
}

View File

@ -52,10 +52,9 @@ readonly=yes
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMImplementationList-length
Since:
*/
int dom_domimplementationlist_length_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_domimplementationlist_length_read(dom_object *obj, zval *retval TSRMLS_DC)
{
ALLOC_ZVAL(*retval);
ZVAL_STRING(*retval, "TEST", 1);
ZVAL_STRING(retval, "TEST");
return SUCCESS;
}

View File

@ -46,10 +46,9 @@ readonly=yes
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMLocator-line-number
Since:
*/
int dom_domlocator_line_number_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_domlocator_line_number_read(dom_object *obj, zval *retval TSRMLS_DC)
{
ALLOC_ZVAL(*retval);
ZVAL_STRING(*retval, "TEST", 1);
ZVAL_STRING(retval, "TEST");
return SUCCESS;
}
@ -60,10 +59,9 @@ readonly=yes
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMLocator-column-number
Since:
*/
int dom_domlocator_column_number_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_domlocator_column_number_read(dom_object *obj, zval *retval TSRMLS_DC)
{
ALLOC_ZVAL(*retval);
ZVAL_STRING(*retval, "TEST", 1);
ZVAL_STRING(retval, "TEST");
return SUCCESS;
}
@ -74,10 +72,9 @@ readonly=yes
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMLocator-offset
Since:
*/
int dom_domlocator_offset_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_domlocator_offset_read(dom_object *obj, zval *retval TSRMLS_DC)
{
ALLOC_ZVAL(*retval);
ZVAL_STRING(*retval, "TEST", 1);
ZVAL_STRING(retval, "TEST");
return SUCCESS;
}
@ -88,10 +85,9 @@ readonly=yes
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMLocator-node
Since:
*/
int dom_domlocator_related_node_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_domlocator_related_node_read(dom_object *obj, zval *retval TSRMLS_DC)
{
ALLOC_ZVAL(*retval);
ZVAL_STRING(*retval, "TEST", 1);
ZVAL_STRING(retval, "TEST");
return SUCCESS;
}
@ -102,10 +98,9 @@ readonly=yes
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMLocator-uri
Since:
*/
int dom_domlocator_uri_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_domlocator_uri_read(dom_object *obj, zval *retval TSRMLS_DC)
{
ALLOC_ZVAL(*retval);
ZVAL_STRING(*retval, "TEST", 1);
ZVAL_STRING(retval, "TEST");
return SUCCESS;
}

View File

@ -52,10 +52,9 @@ readonly=yes
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMStringList-length
Since:
*/
int dom_domstringlist_length_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_domstringlist_length_read(dom_object *obj, zval *retval TSRMLS_DC)
{
ALLOC_ZVAL(*retval);
ZVAL_STRING(*retval, "TEST", 1);
ZVAL_STRING(retval, "TEST");
return SUCCESS;
}

View File

@ -219,14 +219,12 @@ PHP_METHOD(domelement, __construct)
xmlNodeSetContentLen(nodep, (xmlChar *) value, value_len);
}
intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC);
if (intern != NULL) {
oldnode = dom_object_get_node(intern);
if (oldnode != NULL) {
php_libxml_node_free_resource(oldnode TSRMLS_CC);
}
php_libxml_increment_node_ptr((php_libxml_node_object *)intern, nodep, (void *)intern TSRMLS_CC);
intern = Z_DOMOBJ_P(id);
oldnode = dom_object_get_node(intern);
if (oldnode != NULL) {
php_libxml_node_free_resource(oldnode TSRMLS_CC);
}
php_libxml_increment_node_ptr((php_libxml_node_object *)intern, nodep, (void *)intern TSRMLS_CC);
}
/* }}} end DOMElement::__construct */
@ -235,7 +233,7 @@ readonly=yes
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-104682815
Since:
*/
int dom_element_tag_name_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_element_tag_name_read(dom_object *obj, zval *retval TSRMLS_DC)
{
xmlNodePtr nodep;
xmlNsPtr ns;
@ -248,16 +246,15 @@ int dom_element_tag_name_read(dom_object *obj, zval **retval TSRMLS_DC)
return FAILURE;
}
ALLOC_ZVAL(*retval);
ns = nodep->ns;
if (ns != NULL && ns->prefix) {
qname = xmlStrdup(ns->prefix);
qname = xmlStrcat(qname, (xmlChar *)":");
qname = xmlStrcat(qname, nodep->name);
ZVAL_STRING(*retval, (char *)qname, 1);
ZVAL_STRING(retval, (char *)qname);
xmlFree(qname);
} else {
ZVAL_STRING(*retval, (char *) nodep->name, 1);
ZVAL_STRING(retval, (char *) nodep->name);
}
return SUCCESS;
@ -270,10 +267,9 @@ readonly=yes
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Element-schemaTypeInfo
Since: DOM Level 3
*/
int dom_element_schema_type_info_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_element_schema_type_info_read(dom_object *obj, zval *retval TSRMLS_DC)
{
ALLOC_ZVAL(*retval);
ZVAL_NULL(*retval);
ZVAL_NULL(retval);
return SUCCESS;
}
@ -359,7 +355,7 @@ PHP_FUNCTION(dom_element_get_attribute)
if (value == NULL) {
RETURN_EMPTY_STRING();
} else {
RETVAL_STRING((char *)value, 1);
RETVAL_STRING((char *)value);
xmlFree(value);
}
}
@ -648,7 +644,7 @@ PHP_FUNCTION(dom_element_get_elements_by_tag_name)
DOM_GET_OBJ(elemp, id, xmlNodePtr, intern);
php_dom_create_interator(return_value, DOM_NODELIST TSRMLS_CC);
namednode = (dom_object *)zend_objects_get_address(return_value TSRMLS_CC);
namednode = Z_DOMOBJ_P(return_value);
local = xmlCharStrndup(name, name_len);
dom_namednode_iter(intern, 0, namednode, NULL, local, NULL TSRMLS_CC);
}
@ -677,13 +673,13 @@ PHP_FUNCTION(dom_element_get_attribute_ns)
strattr = xmlGetNsProp(elemp, (xmlChar *) name, (xmlChar *) uri);
if (strattr != NULL) {
RETVAL_STRING((char *)strattr, 1);
RETVAL_STRING((char *)strattr);
xmlFree(strattr);
} else {
if (xmlStrEqual((xmlChar *) uri, (xmlChar *)DOM_XMLNS_NAMESPACE)) {
nsptr = dom_get_nsdecl(elemp, (xmlChar *)name);
if (nsptr != NULL) {
RETVAL_STRING((char *) nsptr->href, 1);
RETVAL_STRING((char *) nsptr->href);
} else {
RETVAL_EMPTY_STRING();
}
@ -1042,7 +1038,7 @@ PHP_FUNCTION(dom_element_get_elements_by_tag_name_ns)
DOM_GET_OBJ(elemp, id, xmlNodePtr, intern);
php_dom_create_interator(return_value, DOM_NODELIST TSRMLS_CC);
namednode = (dom_object *)zend_objects_get_address(return_value TSRMLS_CC);
namednode = Z_DOMOBJ_P(return_value);
local = xmlCharStrndup(name, name_len);
nsuri = xmlCharStrndup(uri, uri_len);
dom_namednode_iter(intern, 0, namednode, NULL, local, nsuri TSRMLS_CC);

View File

@ -44,22 +44,19 @@ readonly=yes
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-D7303025
Since:
*/
int dom_entity_public_id_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_entity_public_id_read(dom_object *obj, zval *retval TSRMLS_DC)
{
xmlEntity *nodep;
nodep = (xmlEntity *) dom_object_get_node(obj);
xmlEntity *nodep = (xmlEntity *) dom_object_get_node(obj);
if (nodep == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
return FAILURE;
}
ALLOC_ZVAL(*retval);
if (nodep->etype != XML_EXTERNAL_GENERAL_UNPARSED_ENTITY) {
ZVAL_NULL(*retval);
ZVAL_NULL(retval);
} else {
ZVAL_STRING(*retval, (char *) (nodep->ExternalID), 1);
ZVAL_STRING(retval, (char *) (nodep->ExternalID));
}
return SUCCESS;
@ -72,22 +69,19 @@ readonly=yes
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-D7C29F3E
Since:
*/
int dom_entity_system_id_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_entity_system_id_read(dom_object *obj, zval *retval TSRMLS_DC)
{
xmlEntity *nodep;
nodep = (xmlEntity *) dom_object_get_node(obj);
xmlEntity *nodep = (xmlEntity *) dom_object_get_node(obj);
if (nodep == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
return FAILURE;
}
ALLOC_ZVAL(*retval);
if (nodep->etype != XML_EXTERNAL_GENERAL_UNPARSED_ENTITY) {
ZVAL_NULL(*retval);
ZVAL_NULL(retval);
} else {
ZVAL_STRING(*retval, (char *) (nodep->SystemID), 1);
ZVAL_STRING(retval, (char *) (nodep->SystemID));
}
return SUCCESS;
@ -100,24 +94,21 @@ readonly=yes
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-6ABAEB38
Since:
*/
int dom_entity_notation_name_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_entity_notation_name_read(dom_object *obj, zval *retval TSRMLS_DC)
{
xmlEntity *nodep;
xmlEntity *nodep = (xmlEntity *) dom_object_get_node(obj);
char *content;
nodep = (xmlEntity *) dom_object_get_node(obj);
if (nodep == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
return FAILURE;
}
ALLOC_ZVAL(*retval);
if (nodep->etype != XML_EXTERNAL_GENERAL_UNPARSED_ENTITY) {
ZVAL_NULL(*retval);
ZVAL_NULL(retval);
} else {
content = xmlNodeGetContent((xmlNodePtr) nodep);
ZVAL_STRING(*retval, content, 1);
ZVAL_STRING(retval, content);
xmlFree(content);
}
@ -131,10 +122,9 @@ readonly=no
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Entity3-actualEncoding
Since: DOM Level 3
*/
int dom_entity_actual_encoding_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_entity_actual_encoding_read(dom_object *obj, zval *retval TSRMLS_DC)
{
ALLOC_ZVAL(*retval);
ZVAL_NULL(*retval);
ZVAL_NULL(retval);
return SUCCESS;
}
@ -150,10 +140,9 @@ readonly=no
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Entity3-encoding
Since: DOM Level 3
*/
int dom_entity_encoding_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_entity_encoding_read(dom_object *obj, zval *retval TSRMLS_DC)
{
ALLOC_ZVAL(*retval);
ZVAL_NULL(*retval);
ZVAL_NULL(retval);
return SUCCESS;
}
@ -169,10 +158,9 @@ readonly=no
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Entity3-version
Since: DOM Level 3
*/
int dom_entity_version_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_entity_version_read(dom_object *obj, zval *retval TSRMLS_DC)
{
ALLOC_ZVAL(*retval);
ZVAL_NULL(*retval);
ZVAL_NULL(retval);
return SUCCESS;
}

View File

@ -77,7 +77,7 @@ PHP_METHOD(domentityreference, __construct)
RETURN_FALSE;
}
intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC);
intern = Z_DOMOBJ_P(id);
if (intern != NULL) {
oldnode = dom_object_get_node(intern);
if (oldnode != NULL) {

View File

@ -83,7 +83,7 @@ readonly=yes
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-6D0FB19E
Since:
*/
int dom_namednodemap_length_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_namednodemap_length_read(dom_object *obj, zval *retval TSRMLS_DC)
{
dom_nnodemap_object *objmap;
xmlAttrPtr curnode;
@ -113,8 +113,7 @@ int dom_namednodemap_length_read(dom_object *obj, zval **retval TSRMLS_DC)
}
}
MAKE_STD_ZVAL(*retval);
ZVAL_LONG(*retval, count);
ZVAL_LONG(retval, count);
return SUCCESS;
}
@ -140,7 +139,7 @@ PHP_FUNCTION(dom_namednodemap_get_named_item)
return;
}
intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC);
intern = Z_DOMOBJ_P(id);
objmap = (dom_nnodemap_object *)intern->ptr;
@ -214,7 +213,7 @@ PHP_FUNCTION(dom_namednodemap_item)
return;
}
if (index >= 0) {
intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC);
intern = Z_DOMOBJ_P(id);
objmap = (dom_nnodemap_object *)intern->ptr;
@ -272,7 +271,7 @@ PHP_FUNCTION(dom_namednodemap_get_named_item_ns)
return;
}
intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC);
intern = Z_DOMOBJ_P(id);
objmap = (dom_nnodemap_object *)intern->ptr;

View File

@ -55,10 +55,9 @@ readonly=yes
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#NameList-length
Since:
*/
int dom_namelist_length_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_namelist_length_read(dom_object *obj, zval *retval TSRMLS_DC)
{
ALLOC_ZVAL(*retval);
ZVAL_STRING(*retval, "TEST", 1);
ZVAL_STRING(retval, "TEST");
return SUCCESS;
}

View File

@ -196,7 +196,7 @@ readonly=yes
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-F68D095
Since:
*/
int dom_node_node_name_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_node_node_name_read(dom_object *obj, zval *retval TSRMLS_DC)
{
xmlNode *nodep;
xmlNsPtr ns;
@ -262,12 +262,10 @@ int dom_node_node_name_read(dom_object *obj, zval **retval TSRMLS_DC)
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid Node Type");
}
ALLOC_ZVAL(*retval);
if(str != NULL) {
ZVAL_STRING(*retval, str, 1);
if (str != NULL) {
ZVAL_STRING(retval, str);
} else {
ZVAL_EMPTY_STRING(*retval);
ZVAL_EMPTY_STRING(retval);
}
if (qname != NULL) {
@ -285,13 +283,11 @@ readonly=no
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-F68D080
Since:
*/
int dom_node_node_value_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_node_node_value_read(dom_object *obj, zval *retval TSRMLS_DC)
{
xmlNode *nodep;
xmlNode *nodep = dom_object_get_node(obj);
char *str = NULL;
nodep = dom_object_get_node(obj);
if (nodep == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
return FAILURE;
@ -315,26 +311,20 @@ int dom_node_node_value_read(dom_object *obj, zval **retval TSRMLS_DC)
break;
}
ALLOC_ZVAL(*retval);
if(str != NULL) {
ZVAL_STRING(*retval, str, 1);
ZVAL_STRING(retval, str);
xmlFree(str);
} else {
ZVAL_NULL(*retval);
ZVAL_NULL(retval);
}
return SUCCESS;
}
int dom_node_node_value_write(dom_object *obj, zval *newval TSRMLS_DC)
{
xmlNode *nodep;
zval value_copy;
nodep = dom_object_get_node(obj);
xmlNode *nodep = dom_object_get_node(obj);
if (nodep == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
@ -352,19 +342,12 @@ int dom_node_node_value_write(dom_object *obj, zval *newval TSRMLS_DC)
case XML_COMMENT_NODE:
case XML_CDATA_SECTION_NODE:
case XML_PI_NODE:
if (newval->type != IS_STRING) {
if(Z_REFCOUNT_P(newval) > 1) {
value_copy = *newval;
zval_copy_ctor(&value_copy);
newval = &value_copy;
}
convert_to_string(newval);
{
zend_string *str = zval_get_string(newval TSRMLS_CC);
xmlNodeSetContentLen(nodep, str->val, str->len + 1);
STR_RELEASE(str);
break;
}
xmlNodeSetContentLen(nodep, Z_STRVAL_P(newval), Z_STRLEN_P(newval) + 1);
if (newval == &value_copy) {
zval_dtor(newval);
}
break;
default:
break;
}
@ -379,7 +362,7 @@ readonly=yes
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-111237558
Since:
*/
int dom_node_node_type_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_node_node_type_read(dom_object *obj, zval *retval TSRMLS_DC)
{
xmlNode *nodep;
@ -390,13 +373,11 @@ int dom_node_node_type_read(dom_object *obj, zval **retval TSRMLS_DC)
return FAILURE;
}
ALLOC_ZVAL(*retval);
/* Specs dictate that they are both type XML_DOCUMENT_TYPE_NODE */
if (nodep->type == XML_DTD_NODE) {
ZVAL_LONG(*retval, XML_DOCUMENT_TYPE_NODE);
ZVAL_LONG(retval, XML_DOCUMENT_TYPE_NODE);
} else {
ZVAL_LONG(*retval, nodep->type);
ZVAL_LONG(retval, nodep->type);
}
return SUCCESS;
@ -409,10 +390,9 @@ readonly=yes
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1060184317
Since:
*/
int dom_node_parent_node_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_node_parent_node_read(dom_object *obj, zval *retval TSRMLS_DC)
{
xmlNode *nodep, *nodeparent;
int ret;
nodep = dom_object_get_node(obj);
@ -421,18 +401,13 @@ int dom_node_parent_node_read(dom_object *obj, zval **retval TSRMLS_DC)
return FAILURE;
}
ALLOC_ZVAL(*retval);
nodeparent = nodep->parent;
if (!nodeparent) {
ZVAL_NULL(*retval);
ZVAL_NULL(retval);
return SUCCESS;
}
if (NULL == (*retval = php_dom_create_object(nodeparent, &ret, *retval, obj TSRMLS_CC))) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot create required DOM object");
return FAILURE;
}
php_dom_create_object(nodeparent, retval, obj TSRMLS_CC);
return SUCCESS;
}
@ -443,25 +418,21 @@ readonly=yes
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1451460987
Since:
*/
int dom_node_child_nodes_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_node_child_nodes_read(dom_object *obj, zval *retval TSRMLS_DC)
{
xmlNode *nodep;
xmlNode *nodep = dom_object_get_node(obj);
dom_object *intern;
nodep = dom_object_get_node(obj);
if (nodep == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
return FAILURE;
}
ALLOC_ZVAL(*retval);
if (dom_node_children_valid(nodep) == FAILURE) {
ZVAL_NULL(*retval);
ZVAL_NULL(retval);
} else {
php_dom_create_interator(*retval, DOM_NODELIST TSRMLS_CC);
intern = (dom_object *)zend_objects_get_address(*retval TSRMLS_CC);
php_dom_create_interator(retval, DOM_NODELIST TSRMLS_CC);
intern = Z_DOMOBJ_P(retval);
dom_namednode_iter(obj, XML_ELEMENT_NODE, intern, NULL, NULL, NULL TSRMLS_CC);
}
@ -475,10 +446,9 @@ readonly=yes
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-169727388
Since:
*/
int dom_node_first_child_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_node_first_child_read(dom_object *obj, zval *retval TSRMLS_DC)
{
xmlNode *nodep, *first = NULL;
int ret;
nodep = dom_object_get_node(obj);
@ -491,17 +461,12 @@ int dom_node_first_child_read(dom_object *obj, zval **retval TSRMLS_DC)
first = nodep->children;
}
ALLOC_ZVAL(*retval);
if (!first) {
ZVAL_NULL(*retval);
ZVAL_NULL(retval);
return SUCCESS;
}
if (NULL == (*retval = php_dom_create_object(first, &ret, *retval, obj TSRMLS_CC))) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot create required DOM object");
return FAILURE;
}
php_dom_create_object(first, retval, obj TSRMLS_CC);
return SUCCESS;
}
@ -512,10 +477,9 @@ readonly=yes
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-61AD09FB
Since:
*/
int dom_node_last_child_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_node_last_child_read(dom_object *obj, zval *retval TSRMLS_DC)
{
xmlNode *nodep, *last = NULL;
int ret;
nodep = dom_object_get_node(obj);
@ -528,17 +492,12 @@ int dom_node_last_child_read(dom_object *obj, zval **retval TSRMLS_DC)
last = nodep->last;
}
ALLOC_ZVAL(*retval);
if (!last) {
ZVAL_NULL(*retval);
ZVAL_NULL(retval);
return SUCCESS;
}
if (NULL == (*retval = php_dom_create_object(last, &ret, *retval, obj TSRMLS_CC))) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot create required DOM object");
return FAILURE;
}
php_dom_create_object(last, retval, obj TSRMLS_CC);
return SUCCESS;
}
@ -549,10 +508,9 @@ readonly=yes
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-640FB3C8
Since:
*/
int dom_node_previous_sibling_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_node_previous_sibling_read(dom_object *obj, zval *retval TSRMLS_DC)
{
xmlNode *nodep, *prevsib;
int ret;
nodep = dom_object_get_node(obj);
@ -561,18 +519,13 @@ int dom_node_previous_sibling_read(dom_object *obj, zval **retval TSRMLS_DC)
return FAILURE;
}
ALLOC_ZVAL(*retval);
prevsib = nodep->prev;
if (!prevsib) {
ZVAL_NULL(*retval);
ZVAL_NULL(retval);
return SUCCESS;
}
if (NULL == (*retval = php_dom_create_object(prevsib, &ret, *retval, obj TSRMLS_CC))) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot create required DOM object");
return FAILURE;
}
php_dom_create_object(prevsib, retval, obj TSRMLS_CC);
return SUCCESS;
}
@ -583,10 +536,9 @@ readonly=yes
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-6AC54C2F
Since:
*/
int dom_node_next_sibling_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_node_next_sibling_read(dom_object *obj, zval *retval TSRMLS_DC)
{
xmlNode *nodep, *nextsib;
int ret;
nodep = dom_object_get_node(obj);
@ -600,12 +552,7 @@ int dom_node_next_sibling_read(dom_object *obj, zval **retval TSRMLS_DC)
return FAILURE;
}
ALLOC_ZVAL(*retval);
if (NULL == (*retval = php_dom_create_object(nextsib, &ret, *retval, obj TSRMLS_CC))) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot create required DOM object");
return FAILURE;
}
php_dom_create_object(nextsib, retval, obj TSRMLS_CC);
return SUCCESS;
}
@ -616,26 +563,22 @@ readonly=yes
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-84CF096
Since:
*/
int dom_node_attributes_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_node_attributes_read(dom_object *obj, zval *retval TSRMLS_DC)
{
xmlNode *nodep;
xmlNode *nodep = dom_object_get_node(obj);
dom_object *intern;
nodep = dom_object_get_node(obj);
if (nodep == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
return FAILURE;
}
ALLOC_ZVAL(*retval);
if (nodep->type == XML_ELEMENT_NODE) {
php_dom_create_interator(*retval, DOM_NAMEDNODEMAP TSRMLS_CC);
intern = (dom_object *)zend_objects_get_address(*retval TSRMLS_CC);
php_dom_create_interator(retval, DOM_NAMEDNODEMAP TSRMLS_CC);
intern = Z_DOMOBJ_P(retval);
dom_namednode_iter(obj, XML_ATTRIBUTE_NODE, intern, NULL, NULL, NULL TSRMLS_CC);
} else {
ZVAL_NULL(*retval);
ZVAL_NULL(retval);
}
return SUCCESS;
@ -648,13 +591,10 @@ readonly=yes
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-node-ownerDoc
Since:
*/
int dom_node_owner_document_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_node_owner_document_read(dom_object *obj, zval *retval TSRMLS_DC)
{
xmlNode *nodep;
xmlNode *nodep = dom_object_get_node(obj);
xmlDocPtr docp;
int ret;
nodep = dom_object_get_node(obj);
if (nodep == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
@ -662,8 +602,7 @@ int dom_node_owner_document_read(dom_object *obj, zval **retval TSRMLS_DC)
}
if (nodep->type == XML_DOCUMENT_NODE || nodep->type == XML_HTML_DOCUMENT_NODE) {
ALLOC_ZVAL(*retval);
ZVAL_NULL(*retval);
ZVAL_NULL(retval);
return SUCCESS;
}
@ -672,12 +611,7 @@ int dom_node_owner_document_read(dom_object *obj, zval **retval TSRMLS_DC)
return FAILURE;
}
ALLOC_ZVAL(*retval);
if (NULL == (*retval = php_dom_create_object((xmlNodePtr) docp, &ret, *retval, obj TSRMLS_CC))) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot create required DOM object");
return FAILURE;
}
php_dom_create_object((xmlNodePtr) docp, retval, obj TSRMLS_CC);
return SUCCESS;
}
@ -688,13 +622,11 @@ readonly=yes
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-NodeNSname
Since: DOM Level 2
*/
int dom_node_namespace_uri_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_node_namespace_uri_read(dom_object *obj, zval *retval TSRMLS_DC)
{
xmlNode *nodep;
xmlNode *nodep = dom_object_get_node(obj);
char *str = NULL;
nodep = dom_object_get_node(obj);
if (nodep == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
return FAILURE;
@ -713,12 +645,10 @@ int dom_node_namespace_uri_read(dom_object *obj, zval **retval TSRMLS_DC)
break;
}
ALLOC_ZVAL(*retval);
if(str != NULL) {
ZVAL_STRING(*retval, str, 1);
if (str != NULL) {
ZVAL_STRING(retval, str);
} else {
ZVAL_NULL(*retval);
ZVAL_NULL(retval);
}
return SUCCESS;
@ -731,14 +661,12 @@ readonly=no
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-NodeNSPrefix
Since: DOM Level 2
*/
int dom_node_prefix_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_node_prefix_read(dom_object *obj, zval *retval TSRMLS_DC)
{
xmlNode *nodep;
xmlNode *nodep = dom_object_get_node(obj);
xmlNsPtr ns;
char *str = NULL;
nodep = dom_object_get_node(obj);
if (nodep == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
return FAILURE;
@ -758,12 +686,10 @@ int dom_node_prefix_read(dom_object *obj, zval **retval TSRMLS_DC)
break;
}
ALLOC_ZVAL(*retval);
if (str == NULL) {
ZVAL_EMPTY_STRING(*retval);
ZVAL_EMPTY_STRING(retval);
} else {
ZVAL_STRING(*retval, str, 1);
ZVAL_STRING(retval, str);
}
return SUCCESS;
@ -771,7 +697,7 @@ int dom_node_prefix_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_node_prefix_write(dom_object *obj, zval *newval TSRMLS_DC)
{
zval value_copy;
zend_string *str;
xmlNode *nodep, *nsnode = NULL;
xmlNsPtr ns = NULL, curns;
char *strURI;
@ -794,15 +720,8 @@ int dom_node_prefix_write(dom_object *obj, zval *newval TSRMLS_DC)
nsnode = xmlDocGetRootElement(nodep->doc);
}
}
if (newval->type != IS_STRING) {
if(Z_REFCOUNT_P(newval) > 1) {
value_copy = *newval;
zval_copy_ctor(&value_copy);
newval = &value_copy;
}
convert_to_string(newval);
}
prefix = Z_STRVAL_P(newval);
str = zval_get_string(newval TSRMLS_CC);
prefix = str->val;
if (nsnode && nodep->ns != NULL && !xmlStrEqual(nodep->ns->prefix, (xmlChar *)prefix)) {
strURI = (char *) nodep->ns->href;
if (strURI == NULL ||
@ -826,18 +745,14 @@ int dom_node_prefix_write(dom_object *obj, zval *newval TSRMLS_DC)
}
if (ns == NULL) {
if (newval == &value_copy) {
zval_dtor(newval);
}
STR_RELEASE(str);
php_dom_throw_error(NAMESPACE_ERR, dom_get_strict_error(obj->document) TSRMLS_CC);
return FAILURE;
}
xmlSetNs(nodep, ns);
}
if (newval == &value_copy) {
zval_dtor(newval);
}
STR_RELEASE(str);
break;
default:
break;
@ -853,23 +768,19 @@ readonly=yes
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-NodeNSLocalN
Since: DOM Level 2
*/
int dom_node_local_name_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_node_local_name_read(dom_object *obj, zval *retval TSRMLS_DC)
{
xmlNode *nodep;
nodep = dom_object_get_node(obj);
xmlNode *nodep = dom_object_get_node(obj);
if (nodep == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
return FAILURE;
}
ALLOC_ZVAL(*retval);
if (nodep->type == XML_ELEMENT_NODE || nodep->type == XML_ATTRIBUTE_NODE || nodep->type == XML_NAMESPACE_DECL) {
ZVAL_STRING(*retval, (char *) (nodep->name), 1);
ZVAL_STRING(retval, (char *) (nodep->name));
} else {
ZVAL_NULL(*retval);
ZVAL_NULL(retval);
}
return SUCCESS;
@ -882,26 +793,22 @@ readonly=yes
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-baseURI
Since: DOM Level 3
*/
int dom_node_base_uri_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_node_base_uri_read(dom_object *obj, zval *retval TSRMLS_DC)
{
xmlNode *nodep;
xmlNode *nodep = dom_object_get_node(obj);
xmlChar *baseuri;
nodep = dom_object_get_node(obj);
if (nodep == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
return FAILURE;
}
ALLOC_ZVAL(*retval);
baseuri = xmlNodeGetBase(nodep->doc, nodep);
if (baseuri) {
ZVAL_STRING(*retval, (char *) (baseuri), 1);
ZVAL_STRING(retval, (char *) (baseuri));
xmlFree(baseuri);
} else {
ZVAL_NULL(*retval);
ZVAL_NULL(retval);
}
return SUCCESS;
@ -914,13 +821,11 @@ readonly=no
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-textContent
Since: DOM Level 3
*/
int dom_node_text_content_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_node_text_content_read(dom_object *obj, zval *retval TSRMLS_DC)
{
xmlNode *nodep;
xmlNode *nodep = dom_object_get_node(obj);
char *str = NULL;
nodep = dom_object_get_node(obj);
if (nodep == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
return FAILURE;
@ -928,13 +833,11 @@ int dom_node_text_content_read(dom_object *obj, zval **retval TSRMLS_DC)
str = xmlNodeGetContent(nodep);
ALLOC_ZVAL(*retval);
if(str != NULL) {
ZVAL_STRING(*retval, str, 1);
if (str != NULL) {
ZVAL_STRING(retval, str);
xmlFree(str);
} else {
ZVAL_EMPTY_STRING(*retval);
ZVAL_EMPTY_STRING(retval);
}
return SUCCESS;
@ -1629,7 +1532,7 @@ PHP_FUNCTION(dom_node_lookup_prefix)
if (lookupp != NULL && (nsptr = xmlSearchNsByHref(lookupp->doc, lookupp, uri))) {
if (nsptr->prefix != NULL) {
RETURN_STRING((char *) nsptr->prefix, 1);
RETURN_STRING((char *) nsptr->prefix);
}
}
}
@ -1698,7 +1601,7 @@ PHP_FUNCTION(dom_node_lookup_namespace_uri)
nsptr = xmlSearchNs(nodep->doc, nodep, prefix);
if (nsptr && nsptr->href != NULL) {
RETURN_STRING((char *) nsptr->href, 1);
RETURN_STRING((char *) nsptr->href);
}
RETURN_NULL();
@ -1804,12 +1707,12 @@ static void dom_canonicalization(INTERNAL_FUNCTION_PARAMETERS, int mode) /* {{{
} else {
/*xpath query from xpath_array */
HashTable *ht = Z_ARRVAL_P(xpath_array);
zval **tmp;
zval *tmp;
char *xquery;
if (zend_hash_find(ht, "query", sizeof("query"), (void**)&tmp) == SUCCESS &&
Z_TYPE_PP(tmp) == IS_STRING) {
xquery = Z_STRVAL_PP(tmp);
tmp = zend_hash_str_find(ht, "query", sizeof("query")-1);
if (tmp && Z_TYPE_P(tmp) == IS_STRING) {
xquery = Z_STRVAL_P(tmp);
} else {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "'query' missing from xpath array or is not a string");
RETURN_FALSE;
@ -1818,21 +1721,20 @@ static void dom_canonicalization(INTERNAL_FUNCTION_PARAMETERS, int mode) /* {{{
ctxp = xmlXPathNewContext(docp);
ctxp->node = nodep;
if (zend_hash_find(ht, "namespaces", sizeof("namespaces"), (void**)&tmp) == SUCCESS &&
Z_TYPE_PP(tmp) == IS_ARRAY) {
zval **tmpns;
while (zend_hash_get_current_data(Z_ARRVAL_PP(tmp), (void **)&tmpns) == SUCCESS) {
if (Z_TYPE_PP(tmpns) == IS_STRING) {
char *prefix;
tmp = zend_hash_str_find(ht, "namespaces", sizeof("namespaces")-1);
if (tmp && Z_TYPE_P(tmp) == IS_ARRAY) {
zval *tmpns;
while ((tmpns = zend_hash_get_current_data(Z_ARRVAL_P(tmp)))) {
if (Z_TYPE_P(tmpns) == IS_STRING) {
zend_string *prefix;
ulong idx;
uint prefix_key_len;
if (zend_hash_get_current_key_ex(Z_ARRVAL_PP(tmp),
&prefix, &prefix_key_len, &idx, 0, NULL) == HASH_KEY_IS_STRING) {
xmlXPathRegisterNs(ctxp, prefix, Z_STRVAL_PP(tmpns));
if (zend_hash_get_current_key_ex(Z_ARRVAL_P(tmp),
&prefix, &idx, 0, NULL) == HASH_KEY_IS_STRING) {
xmlXPathRegisterNs(ctxp, prefix->val, Z_STRVAL_P(tmpns));
}
}
zend_hash_move_forward(Z_ARRVAL_PP(tmp));
zend_hash_move_forward(Z_ARRVAL_P(tmp));
}
}
@ -1852,14 +1754,14 @@ static void dom_canonicalization(INTERNAL_FUNCTION_PARAMETERS, int mode) /* {{{
if (ns_prefixes != NULL) {
if (exclusive) {
zval **tmpns;
zval *tmpns;
int nscount = 0;
inclusive_ns_prefixes = safe_emalloc(zend_hash_num_elements(Z_ARRVAL_P(ns_prefixes)) + 1,
sizeof(xmlChar *), 0);
while (zend_hash_get_current_data(Z_ARRVAL_P(ns_prefixes), (void **)&tmpns) == SUCCESS) {
if (Z_TYPE_PP(tmpns) == IS_STRING) {
inclusive_ns_prefixes[nscount++] = Z_STRVAL_PP(tmpns);
while ((tmpns = zend_hash_get_current_data(Z_ARRVAL_P(ns_prefixes)))) {
if (Z_TYPE_P(tmpns) == IS_STRING) {
inclusive_ns_prefixes[nscount++] = Z_STRVAL_P(tmpns);
}
zend_hash_move_forward(Z_ARRVAL_P(ns_prefixes));
}
@ -1902,9 +1804,9 @@ static void dom_canonicalization(INTERNAL_FUNCTION_PARAMETERS, int mode) /* {{{
#endif
if (ret > 0) {
#ifdef LIBXML2_NEW_BUFFER
RETVAL_STRINGL((char *) xmlOutputBufferGetContent(buf), ret, 1);
RETVAL_STRINGL((char *) xmlOutputBufferGetContent(buf), ret);
#else
RETVAL_STRINGL((char *) buf->buffer->content, ret, 1);
RETVAL_STRINGL((char *) buf->buffer->content, ret);
#endif
} else {
RETVAL_EMPTY_STRING();
@ -1954,7 +1856,7 @@ PHP_METHOD(domnode, getNodePath)
if (value == NULL) {
RETURN_NULL();
} else {
RETVAL_STRING(value, 1);
RETVAL_STRING(value);
xmlFree(value);
}
}

View File

@ -51,7 +51,7 @@ readonly=yes
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-203510337
Since:
*/
int dom_nodelist_length_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_nodelist_length_read(dom_object *obj, zval *retval TSRMLS_DC)
{
dom_nnodemap_object *objmap;
xmlNodePtr nodep, curnode;
@ -91,8 +91,7 @@ int dom_nodelist_length_read(dom_object *obj, zval **retval TSRMLS_DC)
}
}
MAKE_STD_ZVAL(*retval);
ZVAL_LONG(*retval, count);
ZVAL_LONG(retval, count);
return SUCCESS;
}
@ -113,15 +112,13 @@ PHP_FUNCTION(dom_nodelist_item)
dom_nnodemap_object *objmap;
xmlNodePtr nodep, curnode;
int count = 0;
HashTable *nodeht;
zval **entry;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Ol", &id, dom_nodelist_class_entry, &index) == FAILURE) {
return;
}
if (index >= 0) {
intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC);
intern = Z_DOMOBJ_P(id);
objmap = (dom_nnodemap_object *)intern->ptr;
if (objmap != NULL) {
@ -133,10 +130,10 @@ PHP_FUNCTION(dom_nodelist_item)
}
} else {
if (objmap->nodetype == DOM_NODESET) {
nodeht = HASH_OF(objmap->baseobjptr);
if (zend_hash_index_find(nodeht, index, (void **) &entry)==SUCCESS) {
*return_value = **entry;
zval_copy_ctor(return_value);
HashTable *nodeht = HASH_OF(objmap->baseobjptr);
zval *entry = zend_hash_index_find(nodeht, index);
if (entry) {
ZVAL_COPY(return_value, entry);
return;
}
} else if (objmap->baseobj) {

View File

@ -45,22 +45,19 @@ readonly=yes
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-54F2B4D0
Since:
*/
int dom_notation_public_id_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_notation_public_id_read(dom_object *obj, zval *retval TSRMLS_DC)
{
xmlEntityPtr nodep;
nodep = (xmlEntityPtr) dom_object_get_node(obj);
xmlEntityPtr nodep = (xmlEntityPtr) dom_object_get_node(obj);
if (nodep == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
return FAILURE;
}
ALLOC_ZVAL(*retval);
if (nodep->ExternalID) {
ZVAL_STRING(*retval, (char *) (nodep->ExternalID), 1);
ZVAL_STRING(retval, (char *) (nodep->ExternalID));
} else {
ZVAL_EMPTY_STRING(*retval);
ZVAL_EMPTY_STRING(retval);
}
return SUCCESS;
@ -73,22 +70,19 @@ readonly=yes
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-E8AAB1D0
Since:
*/
int dom_notation_system_id_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_notation_system_id_read(dom_object *obj, zval *retval TSRMLS_DC)
{
xmlEntityPtr nodep;
nodep = (xmlEntityPtr) dom_object_get_node(obj);
xmlEntityPtr nodep = (xmlEntityPtr) dom_object_get_node(obj);
if (nodep == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
return FAILURE;
}
ALLOC_ZVAL(*retval);
if (nodep->SystemID) {
ZVAL_STRING(*retval, (char *) (nodep->SystemID), 1);
ZVAL_STRING(retval, (char *) (nodep->SystemID));
} else {
ZVAL_EMPTY_STRING(*retval);
ZVAL_EMPTY_STRING(retval);
}
return SUCCESS;

View File

@ -99,7 +99,7 @@ static HashTable dom_xpath_prop_handlers;
#endif
/* }}} */
typedef int (*dom_read_t)(dom_object *obj, zval **retval TSRMLS_DC);
typedef int (*dom_read_t)(dom_object *obj, zval *retval TSRMLS_DC);
typedef int (*dom_write_t)(dom_object *obj, zval *newval TSRMLS_DC);
typedef struct _dom_prop_handler {
@ -192,7 +192,7 @@ static void dom_copy_doc_props(php_libxml_ref_obj *source_doc, php_libxml_ref_ob
if (source->classmap) {
ALLOC_HASHTABLE(dest->classmap);
zend_hash_init(dest->classmap, 0, NULL, NULL, 0);
zend_hash_copy(dest->classmap, source->classmap, NULL, NULL, sizeof(zend_class_entry *));
zend_hash_copy(dest->classmap, source->classmap, NULL);
}
}
@ -212,9 +212,9 @@ int dom_set_doc_classmap(php_libxml_ref_obj *document, zend_class_entry *basece,
zend_hash_init(doc_props->classmap, 0, NULL, NULL, 0);
}
if (ce) {
return zend_hash_update(doc_props->classmap, basece->name, basece->name_length + 1, &ce, sizeof(zend_class_entry *), NULL);
zend_hash_update_ptr(doc_props->classmap, basece->name, ce);
} else {
zend_hash_del(doc_props->classmap, basece->name, basece->name_length + 1);
zend_hash_del(doc_props->classmap, basece->name);
}
}
return SUCCESS;
@ -223,13 +223,13 @@ int dom_set_doc_classmap(php_libxml_ref_obj *document, zend_class_entry *basece,
zend_class_entry *dom_get_doc_classmap(php_libxml_ref_obj *document, zend_class_entry *basece TSRMLS_DC)
{
dom_doc_propsptr doc_props;
zend_class_entry **ce = NULL;
if (document) {
doc_props = dom_get_doc_props(document);
if (doc_props->classmap) {
if (zend_hash_find(doc_props->classmap, basece->name, basece->name_length + 1, (void**) &ce) == SUCCESS) {
return *ce;
zend_class_entry *ce = zend_hash_find_ptr(doc_props->classmap, basece->name);
if (ce) {
return ce;
}
}
}
@ -276,9 +276,8 @@ PHP_DOM_EXPORT dom_object *php_dom_object_get_data(xmlNodePtr obj)
/* }}} end php_dom_object_get_data */
/* {{{ dom_read_na */
static int dom_read_na(dom_object *obj, zval **retval TSRMLS_DC)
static int dom_read_na(dom_object *obj, zval *retval TSRMLS_DC)
{
*retval = NULL;
php_error_docref(NULL TSRMLS_CC, E_ERROR, "Cannot read property");
return FAILURE;
}
@ -299,85 +298,53 @@ static void dom_register_prop_handler(HashTable *prop_handler, char *name, dom_r
hnd.read_func = read_func ? read_func : dom_read_na;
hnd.write_func = write_func ? write_func : dom_write_na;
zend_hash_add(prop_handler, name, strlen(name)+1, &hnd, sizeof(dom_prop_handler), NULL);
zend_hash_str_add_mem(prop_handler, name, strlen(name), &hnd, sizeof(dom_prop_handler));
}
/* }}} */
static zval **dom_get_property_ptr_ptr(zval *object, zval *member, int type, const zend_literal *key TSRMLS_DC) /* {{{ */
static zval *dom_get_property_ptr_ptr(zval *object, zval *member, int type, const zend_literal *key TSRMLS_DC) /* {{{ */
{
dom_object *obj;
zval tmp_member;
zval **retval = NULL;
dom_prop_handler *hnd;
zend_object_handlers *std_hnd;
int ret = FAILURE;
dom_object *obj = Z_DOMOBJ_P(object);
zend_string *member_str = zval_get_string(member TSRMLS_CC);
zval *retval = NULL;
if (member->type != IS_STRING) {
tmp_member = *member;
zval_copy_ctor(&tmp_member);
convert_to_string(&tmp_member);
member = &tmp_member;
}
obj = (dom_object *)zend_objects_get_address(object TSRMLS_CC);
if (obj->prop_handler != NULL) {
ret = zend_hash_find(obj->prop_handler, Z_STRVAL_P(member), Z_STRLEN_P(member)+1, (void **) &hnd);
}
if (ret == FAILURE) {
std_hnd = zend_get_std_object_handlers();
if (!obj->prop_handler || !zend_hash_exists(obj->prop_handler, member_str)) {
zend_object_handlers *std_hnd = zend_get_std_object_handlers();
retval = std_hnd->get_property_ptr_ptr(object, member, type, key TSRMLS_CC);
}
if (member == &tmp_member) {
zval_dtor(member);
}
STR_RELEASE(member_str);
return retval;
}
/* }}} */
/* {{{ dom_read_property */
zval *dom_read_property(zval *object, zval *member, int type, const zend_literal *key TSRMLS_DC)
zval *dom_read_property(zval *object, zval *member, int type, const zend_literal *key, zval *rv TSRMLS_DC)
{
dom_object *obj;
zval tmp_member;
dom_object *obj = Z_DOMOBJ_P(object);
zend_string *member_str = zval_get_string(member TSRMLS_CC);
zval *retval;
dom_prop_handler *hnd;
zend_object_handlers *std_hnd;
int ret;
if (member->type != IS_STRING) {
tmp_member = *member;
zval_copy_ctor(&tmp_member);
convert_to_string(&tmp_member);
member = &tmp_member;
}
ret = FAILURE;
obj = (dom_object *)zend_objects_get_address(object TSRMLS_CC);
dom_prop_handler *hnd = NULL;
if (obj->prop_handler != NULL) {
ret = zend_hash_find(obj->prop_handler, Z_STRVAL_P(member), Z_STRLEN_P(member)+1, (void **) &hnd);
hnd = zend_hash_find_ptr(obj->prop_handler, member_str);
} else if (instanceof_function(obj->std.ce, dom_node_class_entry TSRMLS_CC)) {
php_error(E_WARNING, "Couldn't fetch %s. Node no longer exists", obj->std.ce->name);
}
if (ret == SUCCESS) {
ret = hnd->read_func(obj, &retval TSRMLS_CC);
if (ret == SUCCESS) {
/* ensure we're creating a temporary variable */
Z_SET_REFCOUNT_P(retval, 0);
Z_UNSET_ISREF_P(retval);
} else {
retval = EG(uninitialized_zval_ptr);
}
} else {
std_hnd = zend_get_std_object_handlers();
retval = std_hnd->read_property(object, member, type, key TSRMLS_CC);
php_error(E_WARNING, "Couldn't fetch %s. Node no longer exists", obj->std.ce->name->val);
}
if (member == &tmp_member) {
zval_dtor(member);
if (hnd) {
int ret = hnd->read_func(obj, rv TSRMLS_CC);
if (ret == SUCCESS) {
retval = rv;
} else {
retval = &EG(uninitialized_zval);
}
} else {
zend_object_handlers *std_hnd = zend_get_std_object_handlers();
retval = std_hnd->read_property(object, member, type, key, rv TSRMLS_CC);
}
STR_RELEASE(member_str);
return retval;
}
/* }}} */
@ -385,97 +352,67 @@ zval *dom_read_property(zval *object, zval *member, int type, const zend_literal
/* {{{ dom_write_property */
void dom_write_property(zval *object, zval *member, zval *value, const zend_literal *key TSRMLS_DC)
{
dom_object *obj;
zval tmp_member;
dom_prop_handler *hnd;
zend_object_handlers *std_hnd;
int ret;
if (member->type != IS_STRING) {
tmp_member = *member;
zval_copy_ctor(&tmp_member);
convert_to_string(&tmp_member);
member = &tmp_member;
}
ret = FAILURE;
obj = (dom_object *)zend_objects_get_address(object TSRMLS_CC);
dom_object *obj = Z_DOMOBJ_P(object);
zend_string *member_str = zval_get_string(member TSRMLS_CC);
dom_prop_handler *hnd = NULL;
if (obj->prop_handler != NULL) {
ret = zend_hash_find((HashTable *)obj->prop_handler, Z_STRVAL_P(member), Z_STRLEN_P(member)+1, (void **) &hnd);
hnd = zend_hash_find_ptr(obj->prop_handler, member_str);
}
if (ret == SUCCESS) {
if (hnd) {
hnd->write_func(obj, value TSRMLS_CC);
} else {
std_hnd = zend_get_std_object_handlers();
zend_object_handlers *std_hnd = zend_get_std_object_handlers();
std_hnd->write_property(object, member, value, key TSRMLS_CC);
}
if (member == &tmp_member) {
zval_dtor(member);
}
STR_RELEASE(member_str);
}
/* }}} */
/* {{{ dom_property_exists */
static int dom_property_exists(zval *object, zval *member, int check_empty, const zend_literal *key TSRMLS_DC)
{
dom_object *obj;
zval tmp_member;
dom_prop_handler *hnd;
zend_object_handlers *std_hnd;
int ret, retval=0;
if (member->type != IS_STRING) {
tmp_member = *member;
zval_copy_ctor(&tmp_member);
convert_to_string(&tmp_member);
member = &tmp_member;
}
ret = FAILURE;
obj = (dom_object *)zend_objects_get_address(object TSRMLS_CC);
dom_object *obj = Z_DOMOBJ_P(object);
zend_string *member_str = zval_get_string(member TSRMLS_CC);
dom_prop_handler *hnd = NULL;
int retval = 0;
if (obj->prop_handler != NULL) {
ret = zend_hash_find((HashTable *)obj->prop_handler, Z_STRVAL_P(member), Z_STRLEN_P(member)+1, (void **) &hnd);
hnd = zend_hash_find_ptr(obj->prop_handler, member_str);
}
if (ret == SUCCESS) {
zval *tmp;
if (hnd) {
zval tmp;
if (check_empty == 2) {
retval = 1;
} else if (hnd->read_func(obj, &tmp TSRMLS_CC) == SUCCESS) {
Z_SET_REFCOUNT_P(tmp, 1);
Z_UNSET_ISREF_P(tmp);
if (check_empty == 1) {
retval = zend_is_true(tmp TSRMLS_CC);
retval = zend_is_true(&tmp TSRMLS_CC);
} else if (check_empty == 0) {
retval = (Z_TYPE_P(tmp) != IS_NULL);
retval = (Z_TYPE(tmp) != IS_NULL);
}
zval_ptr_dtor(&tmp);
zval_dtor(&tmp);
}
} else {
std_hnd = zend_get_std_object_handlers();
zend_object_handlers *std_hnd = zend_get_std_object_handlers();
retval = std_hnd->has_property(object, member, check_empty, key TSRMLS_CC);
}
if (member == &tmp_member) {
zval_dtor(member);
}
STR_RELEASE(member_str);
return retval;
}
/* }}} */
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);
dom_object *obj = Z_DOMOBJ_P(object);
HashTable *debug_info,
*prop_handlers = obj->prop_handler,
*std_props;
HashPosition pos;
dom_prop_handler *entry;
zval *object_value,
*null_value;
zval object_value;
*is_temp = 1;
@ -483,59 +420,39 @@ static HashTable* dom_get_debug_info_helper(zval *object, int *is_temp TSRMLS_DC
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*));
zend_hash_copy(debug_info, std_props, (copy_ctor_func_t) zval_add_ref);
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);
ZVAL_STRING(&object_value, "(object value omitted)");
for (zend_hash_internal_pointer_reset_ex(prop_handlers, &pos);
zend_hash_get_current_data_ex(prop_handlers, (void **)&entry, &pos)
== SUCCESS;
entry = zend_hash_get_current_data_ptr_ex(prop_handlers, &pos);
zend_hash_move_forward_ex(prop_handlers, &pos)) {
zval *value;
char *string_key = NULL;
uint string_length = 0;
ulong num_key;
zval value;
zend_string *string_key;
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) {
&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);
if (Z_TYPE(value) == IS_OBJECT) {
zval_dtor(&value);
ZVAL_COPY(&value, &object_value);
}
zval_add_ref(&value);
zend_hash_add(debug_info, string_key, string_length,
&value, sizeof(zval *), NULL);
zend_hash_add(debug_info, string_key, &value);
}
zval_ptr_dtor(&null_value);
zval_ptr_dtor(&object_value);
zval_dtor(&object_value);
return debug_info;
}
@ -552,8 +469,8 @@ void *php_dom_export_node(zval *object TSRMLS_DC) /* {{{ */
php_libxml_node_object *intern;
xmlNodePtr nodep = NULL;
intern = (php_libxml_node_object *)zend_object_store_get_object(object TSRMLS_CC);
if (intern && intern->node) {
intern = Z_DOMOBJ_P(object);
if (intern->node) {
nodep = intern->node->node;
}
@ -574,7 +491,7 @@ PHP_FUNCTION(dom_import_simplexml)
return;
}
nodeobj = (php_libxml_node_object *)zend_object_store_get_object(node TSRMLS_CC);
nodeobj = Z_DOMOBJ_P(node);
nodep = php_libxml_import_node(node TSRMLS_CC);
if (nodep && nodeobj && (nodep->type == XML_ELEMENT_NODE || nodep->type == XML_ATTRIBUTE_NODE)) {
@ -586,13 +503,11 @@ PHP_FUNCTION(dom_import_simplexml)
}
/* }}} */
zend_object_value dom_objects_store_clone_obj(zval *zobject TSRMLS_DC) /* {{{ */
zend_object *dom_objects_store_clone_obj(zval *zobject TSRMLS_DC) /* {{{ */
{
zend_object_value retval;
void *new_object;
/*void *new_object;
dom_object *intern;
dom_object *old_object;
struct _store_object *obj;
zend_object_handle handle = Z_OBJ_HANDLE_P(zobject);
obj = &EG(objects_store).object_buckets[handle].bucket.obj;
@ -611,7 +526,15 @@ zend_object_value dom_objects_store_clone_obj(zval *zobject TSRMLS_DC) /* {{{ */
old_object = (dom_object *) obj->object;
zend_objects_clone_members(&intern->std, retval, &old_object->std, intern->handle TSRMLS_CC);
return retval;
return retval;*/
}
/* }}} */
static void dom_copy_prop_handler(zval *zv) /* {{{ */
{
dom_prop_handler *hnd = Z_PTR_P(zv);
Z_PTR_P(zv) = malloc(sizeof(dom_prop_handler));
memcpy(Z_PTR_P(zv), hnd, sizeof(dom_prop_handler));
}
/* }}} */
@ -679,19 +602,19 @@ PHP_MINIT_FUNCTION(dom)
zend_hash_init(&dom_domstringlist_prop_handlers, 0, NULL, NULL, 1);
dom_register_prop_handler(&dom_domstringlist_prop_handlers, "length", dom_domstringlist_length_read, NULL TSRMLS_CC);
zend_hash_add(&classes, ce.name, ce.name_length + 1, &dom_domstringlist_prop_handlers, sizeof(dom_domstringlist_prop_handlers), NULL);
zend_hash_add_mem(&classes, ce.name, &dom_domstringlist_prop_handlers, sizeof(dom_domstringlist_prop_handlers));
REGISTER_DOM_CLASS(ce, "DOMNameList", NULL, php_dom_namelist_class_functions, dom_namelist_class_entry);
zend_hash_init(&dom_namelist_prop_handlers, 0, NULL, NULL, 1);
dom_register_prop_handler(&dom_namelist_prop_handlers, "length", dom_namelist_length_read, NULL TSRMLS_CC);
zend_hash_add(&classes, ce.name, ce.name_length + 1, &dom_namelist_prop_handlers, sizeof(dom_namelist_prop_handlers), NULL);
zend_hash_add_mem(&classes, ce.name, &dom_namelist_prop_handlers, sizeof(dom_namelist_prop_handlers));
REGISTER_DOM_CLASS(ce, "DOMImplementationList", NULL, php_dom_domimplementationlist_class_functions, dom_domimplementationlist_class_entry);
zend_hash_init(&dom_domimplementationlist_prop_handlers, 0, NULL, NULL, 1);
dom_register_prop_handler(&dom_domimplementationlist_prop_handlers, "length", dom_domimplementationlist_length_read, NULL TSRMLS_CC);
zend_hash_add(&classes, ce.name, ce.name_length + 1, &dom_domimplementationlist_prop_handlers, sizeof(dom_domimplementationlist_prop_handlers), NULL);
zend_hash_add_mem(&classes, ce.name, &dom_domimplementationlist_prop_handlers, sizeof(dom_domimplementationlist_prop_handlers));
REGISTER_DOM_CLASS(ce, "DOMImplementationSource", NULL, php_dom_domimplementationsource_class_functions, dom_domimplementationsource_class_entry);
REGISTER_DOM_CLASS(ce, "DOMImplementation", NULL, php_dom_domimplementation_class_functions, dom_domimplementation_class_entry);
@ -715,7 +638,7 @@ PHP_MINIT_FUNCTION(dom)
dom_register_prop_handler(&dom_node_prop_handlers, "localName", dom_node_local_name_read, NULL TSRMLS_CC);
dom_register_prop_handler(&dom_node_prop_handlers, "baseURI", dom_node_base_uri_read, NULL TSRMLS_CC);
dom_register_prop_handler(&dom_node_prop_handlers, "textContent", dom_node_text_content_read, dom_node_text_content_write TSRMLS_CC);
zend_hash_add(&classes, ce.name, ce.name_length + 1, &dom_node_prop_handlers, sizeof(dom_node_prop_handlers), NULL);
zend_hash_add_mem(&classes, ce.name, &dom_node_prop_handlers, sizeof(dom_node_prop_handlers));
REGISTER_DOM_CLASS(ce, "DOMNameSpaceNode", NULL, NULL, dom_namespace_node_class_entry);
@ -728,10 +651,10 @@ PHP_MINIT_FUNCTION(dom)
dom_register_prop_handler(&dom_namespace_node_prop_handlers, "namespaceURI", dom_node_namespace_uri_read, NULL TSRMLS_CC);
dom_register_prop_handler(&dom_namespace_node_prop_handlers, "ownerDocument", dom_node_owner_document_read, NULL TSRMLS_CC);
dom_register_prop_handler(&dom_namespace_node_prop_handlers, "parentNode", dom_node_parent_node_read, NULL TSRMLS_CC);
zend_hash_add(&classes, ce.name, ce.name_length + 1, &dom_namespace_node_prop_handlers, sizeof(dom_namespace_node_prop_handlers), NULL);
zend_hash_add_mem(&classes, ce.name, &dom_namespace_node_prop_handlers, sizeof(dom_namespace_node_prop_handlers));
REGISTER_DOM_CLASS(ce, "DOMDocumentFragment", dom_node_class_entry, php_dom_documentfragment_class_functions, dom_documentfragment_class_entry);
zend_hash_add(&classes, ce.name, ce.name_length + 1, &dom_node_prop_handlers, sizeof(dom_node_prop_handlers), NULL);
zend_hash_add_mem(&classes, ce.name, &dom_node_prop_handlers, sizeof(dom_node_prop_handlers));
REGISTER_DOM_CLASS(ce, "DOMDocument", dom_node_class_entry, php_dom_document_class_functions, dom_document_class_entry);
zend_hash_init(&dom_document_prop_handlers, 0, NULL, NULL, 1);
@ -755,8 +678,8 @@ PHP_MINIT_FUNCTION(dom)
dom_register_prop_handler(&dom_document_prop_handlers, "recover", dom_document_recover_read, dom_document_recover_write TSRMLS_CC);
dom_register_prop_handler(&dom_document_prop_handlers, "substituteEntities", dom_document_substitue_entities_read, dom_document_substitue_entities_write TSRMLS_CC);
zend_hash_merge(&dom_document_prop_handlers, &dom_node_prop_handlers, NULL, NULL, sizeof(dom_prop_handler), 0);
zend_hash_add(&classes, ce.name, ce.name_length + 1, &dom_document_prop_handlers, sizeof(dom_document_prop_handlers), NULL);
zend_hash_merge(&dom_document_prop_handlers, &dom_node_prop_handlers, dom_copy_prop_handler, 0);
zend_hash_add_mem(&classes, ce.name, &dom_document_prop_handlers, sizeof(dom_document_prop_handlers));
INIT_CLASS_ENTRY(ce, "DOMNodeList", php_dom_nodelist_class_functions);
ce.create_object = dom_nnodemap_objects_new;
@ -766,7 +689,7 @@ PHP_MINIT_FUNCTION(dom)
zend_hash_init(&dom_nodelist_prop_handlers, 0, NULL, NULL, 1);
dom_register_prop_handler(&dom_nodelist_prop_handlers, "length", dom_nodelist_length_read, NULL TSRMLS_CC);
zend_hash_add(&classes, ce.name, ce.name_length + 1, &dom_nodelist_prop_handlers, sizeof(dom_nodelist_prop_handlers), NULL);
zend_hash_add_mem(&classes, ce.name, &dom_nodelist_prop_handlers, sizeof(dom_nodelist_prop_handlers));
INIT_CLASS_ENTRY(ce, "DOMNamedNodeMap", php_dom_namednodemap_class_functions);
ce.create_object = dom_nnodemap_objects_new;
@ -776,15 +699,15 @@ PHP_MINIT_FUNCTION(dom)
zend_hash_init(&dom_namednodemap_prop_handlers, 0, NULL, NULL, 1);
dom_register_prop_handler(&dom_namednodemap_prop_handlers, "length", dom_namednodemap_length_read, NULL TSRMLS_CC);
zend_hash_add(&classes, ce.name, ce.name_length + 1, &dom_namednodemap_prop_handlers, sizeof(dom_namednodemap_prop_handlers), NULL);
zend_hash_add_mem(&classes, ce.name, &dom_namednodemap_prop_handlers, sizeof(dom_namednodemap_prop_handlers));
REGISTER_DOM_CLASS(ce, "DOMCharacterData", dom_node_class_entry, php_dom_characterdata_class_functions, dom_characterdata_class_entry);
zend_hash_init(&dom_characterdata_prop_handlers, 0, NULL, NULL, 1);
dom_register_prop_handler(&dom_characterdata_prop_handlers, "data", dom_characterdata_data_read, dom_characterdata_data_write TSRMLS_CC);
dom_register_prop_handler(&dom_characterdata_prop_handlers, "length", dom_characterdata_length_read, NULL TSRMLS_CC);
zend_hash_merge(&dom_characterdata_prop_handlers, &dom_node_prop_handlers, NULL, NULL, sizeof(dom_prop_handler), 0);
zend_hash_add(&classes, ce.name, ce.name_length + 1, &dom_characterdata_prop_handlers, sizeof(dom_characterdata_prop_handlers), NULL);
zend_hash_merge(&dom_characterdata_prop_handlers, &dom_node_prop_handlers, dom_copy_prop_handler, 0);
zend_hash_add_mem(&classes, ce.name, &dom_characterdata_prop_handlers, sizeof(dom_characterdata_prop_handlers));
REGISTER_DOM_CLASS(ce, "DOMAttr", dom_node_class_entry, php_dom_attr_class_functions, dom_attr_class_entry);
@ -794,33 +717,33 @@ PHP_MINIT_FUNCTION(dom)
dom_register_prop_handler(&dom_attr_prop_handlers, "value", dom_attr_value_read, dom_attr_value_write TSRMLS_CC);
dom_register_prop_handler(&dom_attr_prop_handlers, "ownerElement", dom_attr_owner_element_read, NULL TSRMLS_CC);
dom_register_prop_handler(&dom_attr_prop_handlers, "schemaTypeInfo", dom_attr_schema_type_info_read, NULL TSRMLS_CC);
zend_hash_merge(&dom_attr_prop_handlers, &dom_node_prop_handlers, NULL, NULL, sizeof(dom_prop_handler), 0);
zend_hash_add(&classes, ce.name, ce.name_length + 1, &dom_attr_prop_handlers, sizeof(dom_attr_prop_handlers), NULL);
zend_hash_merge(&dom_attr_prop_handlers, &dom_node_prop_handlers, dom_copy_prop_handler, 0);
zend_hash_add_mem(&classes, ce.name, &dom_attr_prop_handlers, sizeof(dom_attr_prop_handlers));
REGISTER_DOM_CLASS(ce, "DOMElement", dom_node_class_entry, php_dom_element_class_functions, dom_element_class_entry);
zend_hash_init(&dom_element_prop_handlers, 0, NULL, NULL, 1);
dom_register_prop_handler(&dom_element_prop_handlers, "tagName", dom_element_tag_name_read, NULL TSRMLS_CC);
dom_register_prop_handler(&dom_element_prop_handlers, "schemaTypeInfo", dom_element_schema_type_info_read, NULL TSRMLS_CC);
zend_hash_merge(&dom_element_prop_handlers, &dom_node_prop_handlers, NULL, NULL, sizeof(dom_prop_handler), 0);
zend_hash_add(&classes, ce.name, ce.name_length + 1, &dom_element_prop_handlers, sizeof(dom_element_prop_handlers), NULL);
zend_hash_merge(&dom_element_prop_handlers, &dom_node_prop_handlers, dom_copy_prop_handler, 0);
zend_hash_add_mem(&classes, ce.name, &dom_element_prop_handlers, sizeof(dom_element_prop_handlers));
REGISTER_DOM_CLASS(ce, "DOMText", dom_characterdata_class_entry, php_dom_text_class_functions, dom_text_class_entry);
zend_hash_init(&dom_text_prop_handlers, 0, NULL, NULL, 1);
dom_register_prop_handler(&dom_text_prop_handlers, "wholeText", dom_text_whole_text_read, NULL TSRMLS_CC);
zend_hash_merge(&dom_text_prop_handlers, &dom_characterdata_prop_handlers, NULL, NULL, sizeof(dom_prop_handler), 0);
zend_hash_add(&classes, ce.name, ce.name_length + 1, &dom_text_prop_handlers, sizeof(dom_text_prop_handlers), NULL);
zend_hash_merge(&dom_text_prop_handlers, &dom_characterdata_prop_handlers, dom_copy_prop_handler, 0);
zend_hash_add_mem(&classes, ce.name, &dom_text_prop_handlers, sizeof(dom_text_prop_handlers));
REGISTER_DOM_CLASS(ce, "DOMComment", dom_characterdata_class_entry, php_dom_comment_class_functions, dom_comment_class_entry);
zend_hash_add(&classes, ce.name, ce.name_length + 1, &dom_characterdata_prop_handlers, sizeof(dom_typeinfo_prop_handlers), NULL);
zend_hash_add_mem(&classes, ce.name, &dom_characterdata_prop_handlers, sizeof(dom_characterdata_prop_handlers));
REGISTER_DOM_CLASS(ce, "DOMTypeinfo", NULL, php_dom_typeinfo_class_functions, dom_typeinfo_class_entry);
zend_hash_init(&dom_typeinfo_prop_handlers, 0, NULL, NULL, 1);
dom_register_prop_handler(&dom_typeinfo_prop_handlers, "typeName", dom_typeinfo_type_name_read, NULL TSRMLS_CC);
dom_register_prop_handler(&dom_typeinfo_prop_handlers, "typeNamespace", dom_typeinfo_type_namespace_read, NULL TSRMLS_CC);
zend_hash_add(&classes, ce.name, ce.name_length + 1, &dom_typeinfo_prop_handlers, sizeof(dom_typeinfo_prop_handlers), NULL);
zend_hash_add_mem(&classes, ce.name, &dom_typeinfo_prop_handlers, sizeof(dom_typeinfo_prop_handlers));
REGISTER_DOM_CLASS(ce, "DOMUserDataHandler", NULL, php_dom_userdatahandler_class_functions, dom_userdatahandler_class_entry);
REGISTER_DOM_CLASS(ce, "DOMDomError", NULL, php_dom_domerror_class_functions, dom_domerror_class_entry);
@ -832,7 +755,7 @@ PHP_MINIT_FUNCTION(dom)
dom_register_prop_handler(&dom_domerror_prop_handlers, "relatedException", dom_domerror_related_exception_read, NULL TSRMLS_CC);
dom_register_prop_handler(&dom_domerror_prop_handlers, "related_data", dom_domerror_related_data_read, NULL TSRMLS_CC);
dom_register_prop_handler(&dom_domerror_prop_handlers, "location", dom_domerror_location_read, NULL TSRMLS_CC);
zend_hash_add(&classes, ce.name, ce.name_length + 1, &dom_domerror_prop_handlers, sizeof(dom_domerror_prop_handlers), NULL);
zend_hash_add_mem(&classes, ce.name, &dom_domerror_prop_handlers, sizeof(dom_domerror_prop_handlers));
REGISTER_DOM_CLASS(ce, "DOMErrorHandler", NULL, php_dom_domerrorhandler_class_functions, dom_domerrorhandler_class_entry);
REGISTER_DOM_CLASS(ce, "DOMLocator", NULL, php_dom_domlocator_class_functions, dom_domlocator_class_entry);
@ -843,11 +766,11 @@ PHP_MINIT_FUNCTION(dom)
dom_register_prop_handler(&dom_domlocator_prop_handlers, "offset", dom_domlocator_offset_read, NULL TSRMLS_CC);
dom_register_prop_handler(&dom_domlocator_prop_handlers, "relatedNode", dom_domlocator_related_node_read, NULL TSRMLS_CC);
dom_register_prop_handler(&dom_domlocator_prop_handlers, "uri", dom_domlocator_uri_read, NULL TSRMLS_CC);
zend_hash_add(&classes, ce.name, ce.name_length + 1, &dom_domlocator_prop_handlers, sizeof(dom_domlocator_prop_handlers), NULL);
zend_hash_add_mem(&classes, ce.name, &dom_domlocator_prop_handlers, sizeof(dom_domlocator_prop_handlers));
REGISTER_DOM_CLASS(ce, "DOMConfiguration", NULL, php_dom_domconfiguration_class_functions, dom_domconfiguration_class_entry);
REGISTER_DOM_CLASS(ce, "DOMCdataSection", dom_text_class_entry, php_dom_cdatasection_class_functions, dom_cdatasection_class_entry);
zend_hash_add(&classes, ce.name, ce.name_length + 1, &dom_text_prop_handlers, sizeof(dom_documenttype_prop_handlers), NULL);
zend_hash_add_mem(&classes, ce.name, &dom_text_prop_handlers, sizeof(dom_text_prop_handlers));
REGISTER_DOM_CLASS(ce, "DOMDocumentType", dom_node_class_entry, php_dom_documenttype_class_functions, dom_documenttype_class_entry);
@ -858,16 +781,16 @@ PHP_MINIT_FUNCTION(dom)
dom_register_prop_handler(&dom_documenttype_prop_handlers, "publicId", dom_documenttype_public_id_read, NULL TSRMLS_CC);
dom_register_prop_handler(&dom_documenttype_prop_handlers, "systemId", dom_documenttype_system_id_read, NULL TSRMLS_CC);
dom_register_prop_handler(&dom_documenttype_prop_handlers, "internalSubset", dom_documenttype_internal_subset_read, NULL TSRMLS_CC);
zend_hash_merge(&dom_documenttype_prop_handlers, &dom_node_prop_handlers, NULL, NULL, sizeof(dom_prop_handler), 0);
zend_hash_add(&classes, ce.name, ce.name_length + 1, &dom_documenttype_prop_handlers, sizeof(dom_documenttype_prop_handlers), NULL);
zend_hash_merge(&dom_documenttype_prop_handlers, &dom_node_prop_handlers, dom_copy_prop_handler, 0);
zend_hash_add_mem(&classes, ce.name, &dom_documenttype_prop_handlers, sizeof(dom_documenttype_prop_handlers));
REGISTER_DOM_CLASS(ce, "DOMNotation", dom_node_class_entry, php_dom_notation_class_functions, dom_notation_class_entry);
zend_hash_init(&dom_notation_prop_handlers, 0, NULL, NULL, 1);
dom_register_prop_handler(&dom_notation_prop_handlers, "publicId", dom_notation_public_id_read, NULL TSRMLS_CC);
dom_register_prop_handler(&dom_notation_prop_handlers, "systemId", dom_notation_system_id_read, NULL TSRMLS_CC);
zend_hash_merge(&dom_notation_prop_handlers, &dom_node_prop_handlers, NULL, NULL, sizeof(dom_prop_handler), 0);
zend_hash_add(&classes, ce.name, ce.name_length + 1, &dom_notation_prop_handlers, sizeof(dom_notation_prop_handlers), NULL);
zend_hash_merge(&dom_notation_prop_handlers, &dom_node_prop_handlers, dom_copy_prop_handler, 0);
zend_hash_add_mem(&classes, ce.name, &dom_notation_prop_handlers, sizeof(dom_notation_prop_handlers));
REGISTER_DOM_CLASS(ce, "DOMEntity", dom_node_class_entry, php_dom_entity_class_functions, dom_entity_class_entry);
@ -878,20 +801,19 @@ PHP_MINIT_FUNCTION(dom)
dom_register_prop_handler(&dom_entity_prop_handlers, "actualEncoding", dom_entity_actual_encoding_read, dom_entity_actual_encoding_write TSRMLS_CC);
dom_register_prop_handler(&dom_entity_prop_handlers, "encoding", dom_entity_encoding_read, dom_entity_encoding_write TSRMLS_CC);
dom_register_prop_handler(&dom_entity_prop_handlers, "version", dom_entity_version_read, dom_entity_version_write TSRMLS_CC);
zend_hash_merge(&dom_entity_prop_handlers, &dom_node_prop_handlers, NULL, NULL, sizeof(dom_prop_handler), 0);
zend_hash_add(&classes, ce.name, ce.name_length + 1, &dom_entity_prop_handlers, sizeof(dom_entity_prop_handlers), NULL);
zend_hash_merge(&dom_entity_prop_handlers, &dom_node_prop_handlers, dom_copy_prop_handler, 0);
zend_hash_add_mem(&classes, ce.name, &dom_entity_prop_handlers, sizeof(dom_entity_prop_handlers));
REGISTER_DOM_CLASS(ce, "DOMEntityReference", dom_node_class_entry, php_dom_entityreference_class_functions, dom_entityreference_class_entry);
zend_hash_add(&classes, ce.name, ce.name_length + 1, &dom_node_prop_handlers, sizeof(dom_entity_prop_handlers), NULL);
zend_hash_add_mem(&classes, ce.name, &dom_node_prop_handlers, sizeof(dom_node_prop_handlers));
REGISTER_DOM_CLASS(ce, "DOMProcessingInstruction", dom_node_class_entry, php_dom_processinginstruction_class_functions, dom_processinginstruction_class_entry);
zend_hash_init(&dom_processinginstruction_prop_handlers, 0, NULL, NULL, 1);
dom_register_prop_handler(&dom_processinginstruction_prop_handlers, "target", dom_processinginstruction_target_read, NULL TSRMLS_CC);
dom_register_prop_handler(&dom_processinginstruction_prop_handlers, "data", dom_processinginstruction_data_read, dom_processinginstruction_data_write TSRMLS_CC);
zend_hash_merge(&dom_processinginstruction_prop_handlers, &dom_node_prop_handlers, NULL, NULL, sizeof(dom_prop_handler), 0);
zend_hash_add(&classes, ce.name, ce.name_length + 1, &dom_processinginstruction_prop_handlers, sizeof(dom_processinginstruction_prop_handlers), NULL);
zend_hash_merge(&dom_processinginstruction_prop_handlers, &dom_node_prop_handlers, dom_copy_prop_handler, 0);
zend_hash_add_mem(&classes, ce.name, &dom_processinginstruction_prop_handlers, sizeof(dom_processinginstruction_prop_handlers));
REGISTER_DOM_CLASS(ce, "DOMStringExtend", NULL, php_dom_string_extend_class_functions, dom_string_extend_class_entry);
@ -902,7 +824,7 @@ PHP_MINIT_FUNCTION(dom)
zend_hash_init(&dom_xpath_prop_handlers, 0, NULL, NULL, 1);
dom_register_prop_handler(&dom_xpath_prop_handlers, "document", dom_xpath_document_read, NULL TSRMLS_CC);
zend_hash_add(&classes, ce.name, ce.name_length + 1, &dom_xpath_prop_handlers, sizeof(dom_xpath_prop_handlers), NULL);
zend_hash_add_mem(&classes, ce.name, &dom_xpath_prop_handlers, sizeof(dom_xpath_prop_handlers));
#endif
REGISTER_LONG_CONSTANT("XML_ELEMENT_NODE", XML_ELEMENT_NODE, CONST_CS | CONST_PERSISTENT);
@ -1113,49 +1035,33 @@ void dom_objects_free_storage(void *object TSRMLS_DC)
void dom_namednode_iter(dom_object *basenode, int ntype, dom_object *intern, xmlHashTablePtr ht, xmlChar *local, xmlChar *ns TSRMLS_DC) /* {{{ */
{
dom_nnodemap_object *mapptr;
zval *baseobj = NULL;
dom_nnodemap_object *mapptr = (dom_nnodemap_object *) intern->ptr;
mapptr = (dom_nnodemap_object *)intern->ptr;
if (basenode) {
MAKE_STD_ZVAL(baseobj);
baseobj->type = IS_OBJECT;
Z_SET_ISREF_P(baseobj);
baseobj->value.obj.handle = basenode->handle;
baseobj->value.obj.handlers = dom_get_obj_handlers(TSRMLS_C);
zval_copy_ctor(baseobj);
GC_REFCOUNT(&basenode->std)++;
}
mapptr->baseobjptr = baseobj;
mapptr->baseobj = basenode;
mapptr->nodetype = ntype;
mapptr->ht = ht;
mapptr->local = local;
mapptr->ns = ns;
}
/* }}} */
static dom_object* dom_objects_set_class(zend_class_entry *class_type, zend_bool hash_copy TSRMLS_DC) /* {{{ */
{
zend_class_entry *base_class;
dom_object *intern;
if (instanceof_function(class_type, dom_xpath_class_entry TSRMLS_CC)) {
intern = emalloc(sizeof(dom_xpath_object));
memset(intern, 0, sizeof(dom_xpath_object));
} else {
intern = emalloc(sizeof(dom_object));
}
intern->ptr = NULL;
intern->prop_handler = NULL;
intern->document = NULL;
size_t dom_object_size = instanceof_function(class_type, dom_xpath_class_entry TSRMLS_CC)
? sizeof(dom_xpath_object) : sizeof(dom_object);
dom_object *intern = ecalloc(1, dom_object_size + sizeof(zval) * (class_type->default_properties_count - 1));
base_class = class_type;
while(base_class->type != ZEND_INTERNAL_CLASS && base_class->parent != NULL) {
while (base_class->type != ZEND_INTERNAL_CLASS && base_class->parent != NULL) {
base_class = base_class->parent;
}
zend_hash_find(&classes, base_class->name, base_class->name_length + 1, (void **) &intern->prop_handler);
intern->prop_handler = zend_hash_find_ptr(&classes, base_class->name);
zend_object_std_init(&intern->std, class_type TSRMLS_CC);
if (hash_copy) {
@ -1200,45 +1106,33 @@ void dom_objects_clone(void *object, void **object_clone TSRMLS_DC)
/* }}} */
/* {{{ dom_objects_new */
zend_object_value dom_objects_new(zend_class_entry *class_type TSRMLS_DC)
zend_object *dom_objects_new(zend_class_entry *class_type TSRMLS_DC)
{
zend_object_value retval;
dom_object *intern;
intern = dom_objects_set_class(class_type, 1 TSRMLS_CC);
retval.handle = zend_objects_store_put(intern, (zend_objects_store_dtor_t)zend_objects_destroy_object, (zend_objects_free_object_storage_t)dom_objects_free_storage, dom_objects_clone TSRMLS_CC);
intern->handle = retval.handle;
retval.handlers = dom_get_obj_handlers(TSRMLS_C);
return retval;
dom_object *intern = dom_objects_set_class(class_type, 1 TSRMLS_CC);
intern->std.handlers = dom_get_obj_handlers(TSRMLS_C);
return &intern->std;
}
/* }}} */
#if defined(LIBXML_XPATH_ENABLED)
/* {{{ zend_object_value dom_xpath_objects_new(zend_class_entry *class_type TSRMLS_DC) */
zend_object_value dom_xpath_objects_new(zend_class_entry *class_type TSRMLS_DC)
zend_object *dom_xpath_objects_new(zend_class_entry *class_type TSRMLS_DC)
{
zend_object_value retval;
dom_xpath_object *intern;
intern = (dom_xpath_object *)dom_objects_set_class(class_type, 1 TSRMLS_CC);
dom_xpath_object *intern = (dom_xpath_object *) dom_objects_set_class(class_type, 1 TSRMLS_CC);
intern->registerPhpFunctions = 0;
intern->registered_phpfunctions = NULL;
intern->node_list = NULL;
ALLOC_HASHTABLE(intern->registered_phpfunctions);
zend_hash_init(intern->registered_phpfunctions, 0, NULL, ZVAL_PTR_DTOR, 0);
retval.handle = zend_objects_store_put(intern, (zend_objects_store_dtor_t)zend_objects_destroy_object, (zend_objects_free_object_storage_t)dom_xpath_objects_free_storage, dom_objects_clone TSRMLS_CC);
intern->handle = retval.handle;
retval.handlers = dom_get_obj_handlers(TSRMLS_C);
intern->std.handlers = dom_get_obj_handlers(TSRMLS_C);
return retval;
return &intern->std;
}
/* }}} */
#endif
#if 0
static void dom_nnodemap_object_dtor(void *object, zend_object_handle handle TSRMLS_DC) /* {{{ */
{
zval *baseobj;
@ -1266,22 +1160,21 @@ static void dom_nnodemap_object_dtor(void *object, zend_object_handle handle TSR
}
/* }}} */
#endif
void dom_nnodemap_objects_free_storage(void *object TSRMLS_DC) /* {{{ */
void dom_nnodemap_objects_free_storage(zend_object *object TSRMLS_DC) /* {{{ */
{
dom_object *intern = (dom_object *)object;
dom_object *intern = php_dom_obj_from_obj(object);
php_libxml_decrement_doc_ref((php_libxml_node_object *)intern TSRMLS_CC);
zend_object_std_dtor(&intern->std TSRMLS_CC);
efree(object);
}
/* }}} */
zend_object_value dom_nnodemap_objects_new(zend_class_entry *class_type TSRMLS_DC) /* {{{ */
zend_object *dom_nnodemap_objects_new(zend_class_entry *class_type TSRMLS_DC) /* {{{ */
{
zend_object_value retval;
/*zend_object_value retval;
dom_object *intern;
dom_nnodemap_object *objmap;
@ -1299,7 +1192,7 @@ zend_object_value dom_nnodemap_objects_new(zend_class_entry *class_type TSRMLS_D
intern->handle = retval.handle;
retval.handlers = dom_get_obj_handlers(TSRMLS_C);
return retval;
return retval;*/
}
/* }}} */
@ -1318,32 +1211,22 @@ void php_dom_create_interator(zval *return_value, int ce_type TSRMLS_DC) /* {{{
/* }}} */
/* {{{ php_dom_create_object */
PHP_DOM_EXPORT zval *php_dom_create_object(xmlNodePtr obj, int *found, zval *return_value, dom_object *domobj TSRMLS_DC)
PHP_DOM_EXPORT zend_bool php_dom_create_object(xmlNodePtr obj, zval *return_value, dom_object *domobj TSRMLS_DC)
{
zval *wrapper;
zend_class_entry *ce;
dom_object *intern;
*found = 0;
if (!obj) {
ALLOC_ZVAL(wrapper);
ZVAL_NULL(wrapper);
return wrapper;
ZVAL_NULL(return_value);
return 0;
}
if ((intern = (dom_object *) php_dom_object_get_data((void *) obj))) {
return_value->type = IS_OBJECT;
Z_SET_ISREF_P(return_value);
return_value->value.obj.handle = intern->handle;
return_value->value.obj.handlers = dom_get_obj_handlers(TSRMLS_C);
zval_copy_ctor(return_value);
*found = 1;
return return_value;
GC_REFCOUNT(&intern->std)++;
ZVAL_OBJ(return_value, &intern->std);
return 1;
}
wrapper = return_value;
switch (obj->type) {
case XML_DOCUMENT_NODE:
case XML_HTML_DOCUMENT_NODE:
@ -1414,17 +1297,17 @@ PHP_DOM_EXPORT zval *php_dom_create_object(xmlNodePtr obj, int *found, zval *ret
break;
}
default:
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unsupported node type: %d", Z_TYPE_P(obj));
ZVAL_NULL(wrapper);
return wrapper;
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unsupported node type: %d", obj->type);
ZVAL_NULL(return_value);
return 0;
}
if (domobj && domobj->document) {
ce = dom_get_doc_classmap(domobj->document, ce TSRMLS_CC);
}
object_init_ex(wrapper, ce);
object_init_ex(return_value, ce);
intern = (dom_object *)zend_objects_get_address(wrapper TSRMLS_CC);
intern = Z_DOMOBJ_P(return_value);
if (obj->doc != NULL) {
if (domobj != NULL) {
intern->document = domobj->document;
@ -1433,12 +1316,12 @@ PHP_DOM_EXPORT zval *php_dom_create_object(xmlNodePtr obj, int *found, zval *ret
}
php_libxml_increment_node_ptr((php_libxml_node_object *)intern, obj, (void *)intern TSRMLS_CC);
return (wrapper);
return 0;
}
/* }}} end php_domobject_new */
void php_dom_create_implementation(zval **retval TSRMLS_DC) {
object_init_ex(*retval, dom_domimplementation_class_entry);
void php_dom_create_implementation(zval *retval TSRMLS_DC) {
object_init_ex(retval, dom_domimplementation_class_entry);
}
/* {{{ int dom_hierarchy(xmlNodePtr parent, xmlNodePtr child) */

View File

@ -72,7 +72,7 @@ typedef struct _dom_xpath_object {
void *ptr;
php_libxml_ref_obj *document;
HashTable *prop_handler;
zend_object_handle handle;
//??? zend_object_handle handle;
int registerPhpFunctions;
HashTable *registered_phpfunctions;
HashTable *node_list;
@ -96,10 +96,10 @@ typedef struct {
dom_object *dom_object_get_data(xmlNodePtr obj);
dom_doc_propsptr dom_get_doc_props(php_libxml_ref_obj *document);
zend_object_value dom_objects_new(zend_class_entry *class_type TSRMLS_DC);
zend_object_value dom_nnodemap_objects_new(zend_class_entry *class_type TSRMLS_DC);
zend_object *dom_objects_new(zend_class_entry *class_type TSRMLS_DC);
zend_object *dom_nnodemap_objects_new(zend_class_entry *class_type TSRMLS_DC);
#if defined(LIBXML_XPATH_ENABLED)
zend_object_value dom_xpath_objects_new(zend_class_entry *class_type TSRMLS_DC);
zend_object *dom_xpath_objects_new(zend_class_entry *class_type TSRMLS_DC);
#endif
int dom_get_strict_error(php_libxml_ref_obj *document);
void php_dom_throw_error(int error_code, int strict_error TSRMLS_DC);
@ -111,7 +111,7 @@ void dom_set_old_ns(xmlDoc *doc, xmlNs *ns);
xmlNsPtr dom_get_nsdecl(xmlNode *node, xmlChar *localName);
void dom_normalize (xmlNodePtr nodep TSRMLS_DC);
xmlNode *dom_get_elements_by_tag_name_ns_raw(xmlNodePtr nodep, char *ns, char *local, int *cur, int index);
void php_dom_create_implementation(zval **retval TSRMLS_DC);
void php_dom_create_implementation(zval *retval TSRMLS_DC);
int dom_hierarchy(xmlNodePtr parent, xmlNodePtr child);
int dom_has_feature(char *feature, char *version);
int dom_node_is_read_only(xmlNodePtr node);
@ -130,9 +130,9 @@ ce.create_object = dom_objects_new; \
entry = zend_register_internal_class_ex(&ce, parent_ce TSRMLS_CC);
#define DOM_GET_OBJ(__ptr, __id, __prtype, __intern) { \
__intern = (dom_object *)zend_object_store_get_object(__id TSRMLS_CC); \
__intern = Z_DOMOBJ_P(__id); \
if (__intern->ptr == NULL || !(__ptr = (__prtype)((php_libxml_node_ptr *)__intern->ptr)->node)) { \
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Couldn't fetch %s", __intern->std.ce->name);\
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Couldn't fetch %s", __intern->std.ce->name->val);\
RETURN_NULL();\
} \
}

View File

@ -50,7 +50,6 @@ const zend_function_entry php_dom_processinginstruction_class_functions[] = {
/* {{{ proto void DOMProcessingInstruction::__construct(string name, [string value]); */
PHP_METHOD(domprocessinginstruction, __construct)
{
zval *id;
xmlNodePtr nodep = NULL, oldnode = NULL;
dom_object *intern;
@ -79,14 +78,12 @@ PHP_METHOD(domprocessinginstruction, __construct)
RETURN_FALSE;
}
intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC);
if (intern != NULL) {
oldnode = dom_object_get_node(intern);
if (oldnode != NULL) {
php_libxml_node_free_resource(oldnode TSRMLS_CC);
}
php_libxml_increment_node_ptr((php_libxml_node_object *)intern, nodep, (void *)intern TSRMLS_CC);
intern = Z_DOMOBJ_P(id);
oldnode = dom_object_get_node(intern);
if (oldnode != NULL) {
php_libxml_node_free_resource(oldnode TSRMLS_CC);
}
php_libxml_increment_node_ptr((php_libxml_node_object *)intern, nodep, (void *)intern TSRMLS_CC);
}
/* }}} end DOMProcessingInstruction::__construct */
@ -95,19 +92,16 @@ readonly=yes
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-1478689192
Since:
*/
int dom_processinginstruction_target_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_processinginstruction_target_read(dom_object *obj, zval *retval TSRMLS_DC)
{
xmlNodePtr nodep;
nodep = dom_object_get_node(obj);
xmlNodePtr nodep = dom_object_get_node(obj);
if (nodep == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
return FAILURE;
}
ALLOC_ZVAL(*retval);
ZVAL_STRING(*retval, (char *) (nodep->name), 1);
ZVAL_STRING(retval, (char *) (nodep->name));
return SUCCESS;
}
@ -119,7 +113,7 @@ readonly=no
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-837822393
Since:
*/
int dom_processinginstruction_data_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_processinginstruction_data_read(dom_object *obj, zval *retval TSRMLS_DC)
{
xmlNodePtr nodep;
xmlChar *content;
@ -131,14 +125,11 @@ int dom_processinginstruction_data_read(dom_object *obj, zval **retval TSRMLS_DC
return FAILURE;
}
ALLOC_ZVAL(*retval);
if ((content = xmlNodeGetContent(nodep)) != NULL) {
ZVAL_STRING(*retval, content, 1);
ZVAL_STRING(retval, content);
xmlFree(content);
} else {
ZVAL_EMPTY_STRING(*retval);
ZVAL_EMPTY_STRING(retval);
}
return SUCCESS;
@ -146,31 +137,19 @@ int dom_processinginstruction_data_read(dom_object *obj, zval **retval TSRMLS_DC
int dom_processinginstruction_data_write(dom_object *obj, zval *newval TSRMLS_DC)
{
zval value_copy;
xmlNode *nodep;
nodep = dom_object_get_node(obj);
xmlNode *nodep = dom_object_get_node(obj);
zend_string *str;
if (nodep == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
return FAILURE;
}
if (newval->type != IS_STRING) {
if(Z_REFCOUNT_P(newval) > 1) {
value_copy = *newval;
zval_copy_ctor(&value_copy);
newval = &value_copy;
}
convert_to_string(newval);
}
str = zval_get_string(newval TSRMLS_CC);
xmlNodeSetContentLen(nodep, Z_STRVAL_P(newval), Z_STRLEN_P(newval) + 1);
if (newval == &value_copy) {
zval_dtor(newval);
}
xmlNodeSetContentLen(nodep, str->val, str->len + 1);
STR_RELEASE(str);
return SUCCESS;
}

View File

@ -86,7 +86,7 @@ PHP_METHOD(domtext, __construct)
RETURN_FALSE;
}
intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC);
intern = Z_DOMOBJ_P(id);
if (intern != NULL) {
oldnode = dom_object_get_node(intern);
if (oldnode != NULL) {
@ -102,7 +102,7 @@ readonly=yes
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Text3-wholeText
Since: DOM Level 3
*/
int dom_text_whole_text_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_text_whole_text_read(dom_object *obj, zval *retval TSRMLS_DC)
{
xmlNodePtr node;
xmlChar *wholetext = NULL;
@ -125,12 +125,11 @@ int dom_text_whole_text_read(dom_object *obj, zval **retval TSRMLS_DC)
node = node->next;
}
ALLOC_ZVAL(*retval);
if (wholetext != NULL) {
ZVAL_STRING(*retval, wholetext, 1);
ZVAL_STRING(retval, wholetext);
xmlFree(wholetext);
} else {
ZVAL_EMPTY_STRING(*retval);
ZVAL_EMPTY_STRING(retval);
}
return SUCCESS;
@ -151,7 +150,6 @@ PHP_FUNCTION(dom_text_split_text)
xmlNodePtr node;
xmlNodePtr nnode;
long offset;
int ret;
int length;
dom_object *intern;
@ -196,7 +194,7 @@ PHP_FUNCTION(dom_text_split_text)
nnode->type = XML_TEXT_NODE;
}
return_value = php_dom_create_object(nnode, &ret, return_value, intern TSRMLS_CC);
php_dom_create_object(nnode, return_value, intern TSRMLS_CC);
}
/* }}} end dom_text_split_text */

View File

@ -46,10 +46,9 @@ readonly=yes
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#TypeInfo-typeName
Since:
*/
int dom_typeinfo_type_name_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_typeinfo_type_name_read(dom_object *obj, zval *retval TSRMLS_DC)
{
ALLOC_ZVAL(*retval);
ZVAL_NULL(*retval);
ZVAL_NULL(retval);
return SUCCESS;
}
@ -60,10 +59,9 @@ readonly=yes
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#TypeInfo-typeNamespace
Since:
*/
int dom_typeinfo_type_namespace_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_typeinfo_type_namespace_read(dom_object *obj, zval *retval TSRMLS_DC)
{
ALLOC_ZVAL(*retval);
ZVAL_NULL(*retval);
ZVAL_NULL(retval);
return SUCCESS;
}

View File

@ -27,13 +27,18 @@
typedef libxml_doc_props *dom_doc_propsptr;
typedef struct _dom_object {
zend_object std;
void *ptr;
php_libxml_ref_obj *document;
HashTable *prop_handler;
zend_object_handle handle;
zend_object std;
} dom_object;
static inline dom_object *php_dom_obj_from_obj(zend_object *obj) {
return (dom_object*)((char*)(obj) - XtOffsetOf(dom_object, std));
}
#define Z_DOMOBJ_P(zv) php_dom_obj_from_obj(Z_OBJ_P((zv)))
#ifdef PHP_WIN32
# ifdef PHPAPI
# undef PHPAPI
@ -54,7 +59,7 @@ typedef struct _dom_object {
PHP_DOM_EXPORT extern zend_class_entry *dom_node_class_entry;
PHP_DOM_EXPORT dom_object *php_dom_object_get_data(xmlNodePtr obj);
PHP_DOM_EXPORT zval *php_dom_create_object(xmlNodePtr obj, int *found, zval* return_value, dom_object *domobj TSRMLS_DC);
PHP_DOM_EXPORT zend_bool php_dom_create_object(xmlNodePtr obj, zval* return_value, dom_object *domobj TSRMLS_DC);
PHP_DOM_EXPORT xmlNodePtr dom_object_get_node(dom_object *obj);
#define DOM_XMLNS_NAMESPACE \
@ -79,10 +84,7 @@ PHP_DOM_EXPORT xmlNodePtr dom_object_get_node(dom_object *obj);
}
#define DOM_RET_OBJ(obj, ret, domobject) \
if (!php_dom_create_object(obj, ret, return_value, domobject TSRMLS_CC)) { \
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot create required DOM object"); \
RETURN_FALSE; \
}
*ret = php_dom_create_object(obj, return_value, domobject TSRMLS_CC)
#define DOM_GET_THIS(zval) \
if (NULL == (zval = getThis())) { \

View File

@ -74,15 +74,13 @@ const zend_function_entry php_dom_xpath_class_functions[] = {
static void dom_xpath_ext_function_php(xmlXPathParserContextPtr ctxt, int nargs, int type) /* {{{ */
{
zval **args = NULL;
zval *retval;
int result, i, ret;
zval retval;
int result, i;
int error = 0;
zend_fcall_info fci;
zval handler;
xmlXPathObjectPtr obj;
char *str;
char *callable = NULL;
zend_string *callable = NULL;
dom_xpath_object *intern;
TSRMLS_FETCH();
@ -115,36 +113,33 @@ static void dom_xpath_ext_function_php(xmlXPathParserContextPtr ctxt, int nargs,
fci.param_count = nargs - 1;
if (fci.param_count > 0) {
fci.params = safe_emalloc(fci.param_count, sizeof(zval**), 0);
args = safe_emalloc(fci.param_count, sizeof(zval *), 0);
fci.params = safe_emalloc(fci.param_count, sizeof(zval), 0);
}
/* Reverse order to pop values off ctxt stack */
for (i = nargs - 2; i >= 0; i--) {
obj = valuePop(ctxt);
MAKE_STD_ZVAL(args[i]);
switch (obj->type) {
case XPATH_STRING:
ZVAL_STRING(args[i], (char *)obj->stringval, 1);
ZVAL_STRING(&fci.params[i], (char *)obj->stringval);
break;
case XPATH_BOOLEAN:
ZVAL_BOOL(args[i], obj->boolval);
ZVAL_BOOL(&fci.params[i], obj->boolval);
break;
case XPATH_NUMBER:
ZVAL_DOUBLE(args[i], obj->floatval);
ZVAL_DOUBLE(&fci.params[i], obj->floatval);
break;
case XPATH_NODESET:
if (type == 1) {
str = (char *)xmlXPathCastToString(obj);
ZVAL_STRING(args[i], str, 1);
ZVAL_STRING(&fci.params[i], str);
xmlFree(str);
} else if (type == 2) {
int j;
array_init(args[i]);
array_init(&fci.params[i]);
if (obj->nodesetval && obj->nodesetval->nodeNr > 0) {
for (j = 0; j < obj->nodesetval->nodeNr; j++) {
xmlNodePtr node = obj->nodesetval->nodeTab[j];
zval *child;
MAKE_STD_ZVAL(child);
zval child;
/* not sure, if we need this... it's copied from xpath.c */
if (node->type == XML_NAMESPACE_DECL) {
xmlNsPtr curns;
@ -164,17 +159,16 @@ static void dom_xpath_ext_function_php(xmlXPathParserContextPtr ctxt, int nargs,
node->parent = nsparent;
node->ns = curns;
}
child = php_dom_create_object(node, &ret, child, (dom_object *)intern TSRMLS_CC);
add_next_index_zval(args[i], child);
php_dom_create_object(node, &child, (dom_object *)intern TSRMLS_CC);
add_next_index_zval(&fci.params[i], &child);
}
}
}
break;
default:
ZVAL_STRING(args[i], (char *)xmlXPathCastToString(obj), 1);
ZVAL_STRING(&fci.params[i], (char *)xmlXPathCastToString(obj));
}
xmlXPathFreeObject(obj);
fci.params[i] = &args[i];
}
fci.size = sizeof(fci);
@ -186,70 +180,59 @@ static void dom_xpath_ext_function_php(xmlXPathParserContextPtr ctxt, int nargs,
xmlXPathFreeObject(obj);
if (fci.param_count > 0) {
for (i = 0; i < nargs - 1; i++) {
zval_ptr_dtor(&args[i]);
zval_ptr_dtor(&fci.params[i]);
}
efree(args);
efree(fci.params);
}
return;
}
INIT_PZVAL(&handler);
ZVAL_STRING(&handler, obj->stringval, 1);
ZVAL_STRING(&fci.function_name, obj->stringval);
xmlXPathFreeObject(obj);
fci.function_name = &handler;
fci.symbol_table = NULL;
fci.object_ptr = NULL;
fci.retval_ptr_ptr = &retval;
fci.object = NULL;
fci.retval = &retval;
fci.no_separation = 0;
if (!zend_make_callable(&handler, &callable TSRMLS_CC)) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to call handler %s()", callable);
if (!zend_make_callable(&fci.function_name, &callable TSRMLS_CC)) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to call handler %s()", callable->val);
} else if ( intern->registerPhpFunctions == 2 && zend_hash_exists(intern->registered_phpfunctions, callable, strlen(callable) + 1) == 0) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not allowed to call handler '%s()'.", callable);
} else if (intern->registerPhpFunctions == 2 && zend_hash_exists(intern->registered_phpfunctions, callable) == 0) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not allowed to call handler '%s()'.", callable->val);
/* Push an empty string, so that we at least have an xslt result... */
valuePush(ctxt, xmlXPathNewString((xmlChar *)""));
} else {
result = zend_call_function(&fci, NULL TSRMLS_CC);
if (result == FAILURE) {
if (Z_TYPE(handler) == IS_STRING) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to call handler %s()", Z_STRVAL_P(&handler));
}
/* retval is == NULL, when an exception occurred, don't report anything, because PHP itself will handle that */
} else if (retval == NULL) {
} else {
if (retval->type == IS_OBJECT && instanceof_function( Z_OBJCE_P(retval), dom_node_class_entry TSRMLS_CC)) {
if (result == SUCCESS && Z_TYPE(retval) != IS_UNDEF) {
if (Z_TYPE(retval) == IS_OBJECT && instanceof_function(Z_OBJCE(retval), dom_node_class_entry TSRMLS_CC)) {
xmlNode *nodep;
dom_object *obj;
if (intern->node_list == NULL) {
ALLOC_HASHTABLE(intern->node_list);
zend_hash_init(intern->node_list, 0, NULL, ZVAL_PTR_DTOR, 0);
}
zval_add_ref(&retval);
zend_hash_next_index_insert(intern->node_list, &retval, sizeof(zval *), NULL);
obj = (dom_object *)zend_object_store_get_object(retval TSRMLS_CC);
GC_REFCOUNT(&retval)++;
zend_hash_next_index_insert(intern->node_list, &retval);
obj = Z_DOMOBJ_P(&retval);
nodep = dom_object_get_node(obj);
valuePush(ctxt, xmlXPathNewNodeSet(nodep));
} else if (retval->type == IS_BOOL) {
valuePush(ctxt, xmlXPathNewBoolean(retval->value.lval));
} else if (retval->type == IS_OBJECT) {
} else if (Z_TYPE(retval) == IS_BOOL) {
valuePush(ctxt, xmlXPathNewBoolean(Z_BVAL(retval)));
} else if (Z_TYPE(retval) == IS_OBJECT) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "A PHP Object cannot be converted to a XPath-string");
valuePush(ctxt, xmlXPathNewString((xmlChar *)""));
} else {
convert_to_string_ex(&retval);
valuePush(ctxt, xmlXPathNewString( Z_STRVAL_P(retval)));
valuePush(ctxt, xmlXPathNewString( Z_STRVAL(retval)));
}
zval_ptr_dtor(&retval);
}
}
efree(callable);
zval_dtor(&handler);
STR_FREE(callable);
if (fci.param_count > 0) {
for (i = 0; i < nargs - 1; i++) {
zval_ptr_dtor(&args[i]);
zval_ptr_dtor(&fci.params[i]);
}
efree(args);
efree(fci.params);
}
}
@ -292,7 +275,7 @@ PHP_METHOD(domxpath, __construct)
RETURN_FALSE;
}
intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC);
intern = Z_DOMOBJ_P(id);
if (intern != NULL) {
oldctx = (xmlXPathContextPtr)intern->ptr;
if (oldctx != NULL) {
@ -316,30 +299,16 @@ PHP_METHOD(domxpath, __construct)
/* }}} end DOMXPath::__construct */
/* {{{ document DOMDocument*/
int dom_xpath_document_read(dom_object *obj, zval **retval TSRMLS_DC)
int dom_xpath_document_read(dom_object *obj, zval *retval TSRMLS_DC)
{
xmlDoc *docp = NULL;
xmlXPathContextPtr ctx;
int ret;
zval *tmp;
ctx = (xmlXPathContextPtr) obj->ptr;
xmlXPathContextPtr ctx = (xmlXPathContextPtr) obj->ptr;
if (ctx) {
docp = (xmlDocPtr) ctx->doc;
}
ALLOC_ZVAL(*retval);
tmp = *retval;
if (NULL == (*retval = php_dom_create_object((xmlNodePtr) docp, &ret, *retval, obj TSRMLS_CC))) {
FREE_ZVAL(tmp);
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot create required DOM object");
return FAILURE;
}
if (tmp != *retval) {
FREE_ZVAL(tmp);
}
php_dom_create_object((xmlNodePtr) docp, retval, obj TSRMLS_CC);
return SUCCESS;
}
/* }}} */
@ -357,7 +326,7 @@ PHP_FUNCTION(dom_xpath_register_ns)
return;
}
intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC);
intern = Z_DOMOBJ_P(id);
ctxp = (xmlXPathContextPtr) intern->ptr;
if (ctxp == NULL) {
@ -385,11 +354,11 @@ static void dom_xpath_iter(zval *baseobj, dom_object *intern) /* {{{ */
static void php_xpath_eval(INTERNAL_FUNCTION_PARAMETERS, int type) /* {{{ */
{
zval *id, *retval, *context = NULL;
zval *id, retval, *context = NULL;
xmlXPathContextPtr ctxp;
xmlNodePtr nodep = NULL;
xmlXPathObjectPtr xpathobjp;
int expr_len, ret, nsnbr = 0, xpath_type;
int expr_len, nsnbr = 0, xpath_type;
dom_xpath_object *intern;
dom_object *nodeobj;
char *expr;
@ -401,7 +370,7 @@ static void php_xpath_eval(INTERNAL_FUNCTION_PARAMETERS, int type) /* {{{ */
return;
}
intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC);
intern = Z_DOMOBJ_P(id);
ctxp = (xmlXPathContextPtr) intern->ptr;
if (ctxp == NULL) {
@ -470,16 +439,13 @@ static void php_xpath_eval(INTERNAL_FUNCTION_PARAMETERS, int type) /* {{{ */
int i;
xmlNodeSetPtr nodesetp;
MAKE_STD_ZVAL(retval);
array_init(retval);
array_init(&retval);
if (xpathobjp->type == XPATH_NODESET && NULL != (nodesetp = xpathobjp->nodesetval)) {
for (i = 0; i < nodesetp->nodeNr; i++) {
xmlNodePtr node = nodesetp->nodeTab[i];
zval *child;
MAKE_STD_ZVAL(child);
zval child;
if (node->type == XML_NAMESPACE_DECL) {
xmlNsPtr curns;
@ -499,13 +465,13 @@ static void php_xpath_eval(INTERNAL_FUNCTION_PARAMETERS, int type) /* {{{ */
node->parent = nsparent;
node->ns = curns;
}
child = php_dom_create_object(node, &ret, child, (dom_object *)intern TSRMLS_CC);
add_next_index_zval(retval, child);
php_dom_create_object(node, &child, (dom_object *)intern TSRMLS_CC);
add_next_index_zval(&retval, &child);
}
}
php_dom_create_interator(return_value, DOM_NODELIST TSRMLS_CC);
nodeobj = (dom_object *)zend_objects_get_address(return_value TSRMLS_CC);
dom_xpath_iter(retval, nodeobj);
nodeobj = Z_DOMOBJ_P(return_value);
dom_xpath_iter(&retval, nodeobj);
break;
}
@ -518,7 +484,7 @@ static void php_xpath_eval(INTERNAL_FUNCTION_PARAMETERS, int type) /* {{{ */
break;
case XPATH_STRING:
RETVAL_STRING(xpathobjp->stringval, 1);
RETVAL_STRING(xpathobjp->stringval);
break;
default:
@ -549,39 +515,32 @@ PHP_FUNCTION(dom_xpath_register_php_functions)
{
zval *id;
dom_xpath_object *intern;
zval *array_value, **entry, *new_string;
int name_len = 0;
char *name;
zval *array_value, *entry, new_string;
zend_string *name;
DOM_GET_THIS(id);
if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "a", &array_value) == SUCCESS) {
intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC);
intern = Z_DOMOBJ_P(id);
zend_hash_internal_pointer_reset(Z_ARRVAL_P(array_value));
while (zend_hash_get_current_data(Z_ARRVAL_P(array_value), (void **)&entry) == SUCCESS) {
SEPARATE_ZVAL(entry);
convert_to_string_ex(entry);
MAKE_STD_ZVAL(new_string);
ZVAL_LONG(new_string,1);
zend_hash_update(intern->registered_phpfunctions, Z_STRVAL_PP(entry), Z_STRLEN_PP(entry) + 1, &new_string, sizeof(zval*), NULL);
while ((entry = zend_hash_get_current_data(Z_ARRVAL_P(array_value)))) {
zend_string *str = zval_get_string(entry TSRMLS_CC);
ZVAL_LONG(&new_string,1);
zend_hash_update(intern->registered_phpfunctions, str, &new_string);
zend_hash_move_forward(Z_ARRVAL_P(array_value));
STR_RELEASE(str);
}
intern->registerPhpFunctions = 2;
RETURN_TRUE;
} else if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "s", &name, &name_len) == SUCCESS) {
intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC);
} else if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "S", &name) == SUCCESS) {
intern = Z_DOMOBJ_P(id);
MAKE_STD_ZVAL(new_string);
ZVAL_LONG(new_string,1);
zend_hash_update(intern->registered_phpfunctions, name, name_len + 1, &new_string, sizeof(zval*), NULL);
ZVAL_LONG(&new_string, 1);
zend_hash_update(intern->registered_phpfunctions, name, &new_string);
intern->registerPhpFunctions = 2;
} else {
intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC);
intern = Z_DOMOBJ_P(id);
intern->registerPhpFunctions = 1;
}