mirror of
https://github.com/php/php-src.git
synced 2024-09-22 02:17:32 +00:00
Merge branch 'refactoring2' of github.com:zendtech/php into refactoring2
This commit is contained in:
commit
a4bda5b187
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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); }
|
||||
|
@ -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; \
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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 */
|
||||
|
||||
|
@ -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();
|
||||
|
@ -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) {
|
||||
|
@ -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;
|
||||
|
@ -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 */
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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 */
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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) {
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
288
ext/dom/node.c
288
ext/dom/node.c
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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) {
|
||||
|
@ -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;
|
||||
|
@ -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) */
|
||||
|
@ -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();\
|
||||
} \
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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 */
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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())) { \
|
||||
|
161
ext/dom/xpath.c
161
ext/dom/xpath.c
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user