helly Sat Jan 17 10:56:30 2004 EDT
Modified files:
/php-src/ext/simplexml simplexml.c
Log:
Make inherited sxe classes work
Index: php-src/ext/simplexml/simplexml.c
diff -u php-src/ext/simplexml/simplexml.c:1.107 php-src/ext/simplexml/simplexml.c:1.108
--- php-src/ext/simplexml/simplexml.c:1.107 Thu Jan 15 04:28:01 2004
+++ php-src/ext/simplexml/simplexml.c Sat Jan 17 10:56:29 2004
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: simplexml.c,v 1.107 2004/01/15 09:28:01 helly Exp $ */
+/* $Id: simplexml.c,v 1.108 2004/01/17 15:56:29 helly Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -62,7 +62,7 @@
{
php_sxe_object *subnode;
- subnode = php_sxe_object_new(sxe_class_entry TSRMLS_CC);
+ subnode = php_sxe_object_new(sxe->zo.ce TSRMLS_CC);
subnode->document = sxe->document;
subnode->document->refcount++;
subnode->nsmapptr = sxe->nsmapptr;
@@ -598,7 +598,7 @@
xmlFree(contents);
}
} else {
- subnode = php_sxe_object_new(sxe_class_entry TSRMLS_CC);
+ subnode = php_sxe_object_new(sxe_ref->zo.ce TSRMLS_CC);
subnode->document = sxe_ref->document;
subnode->document->refcount++;
subnode->nsmapptr = sxe_ref->nsmapptr;
@@ -1111,7 +1111,7 @@
xmlNodePtr nodep = NULL;
xmlDocPtr docp = NULL;
- clone = php_sxe_object_new(sxe_class_entry TSRMLS_CC);
+ clone = php_sxe_object_new(sxe->zo.ce TSRMLS_CC);
clone->document = sxe->document;
if (clone->document) {
clone->document->refcount++;
@@ -1224,8 +1224,11 @@
char *filename;
int filename_len;
xmlDocPtr docp;
+ char *classname = "";
+ int classname_len = 0;
+ zend_class_entry *ce= sxe_class_entry;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &filename,
&filename_len) == FAILURE) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|s", &filename,
&filename_len, &classname, &classname_len) == FAILURE) {
return;
}
@@ -1233,8 +1236,16 @@
if (! docp) {
RETURN_FALSE;
}
+
+ if (classname_len) {
+ zend_class_entry **pce;
+ if (zend_lookup_class(classname, classname_len, &pce TSRMLS_CC) ==
FAILURE) {
+ php_error_docref(NULL TSRMLS_CC, E_ERROR, "Class %s does not
exist", classname);
+ }
+ ce = *pce;
+ }
- sxe = php_sxe_object_new(sxe_class_entry TSRMLS_CC);
+ sxe = php_sxe_object_new(ce TSRMLS_CC);
php_libxml_increment_doc_ref((php_libxml_node_object *)sxe, docp TSRMLS_CC);
sxe->nsmapptr = emalloc(sizeof(simplexml_nsmap));
sxe->nsmapptr->nsmap = xmlHashCreate(10);
@@ -1254,8 +1265,11 @@
char *data;
int data_len;
xmlDocPtr docp;
+ char *classname = "";
+ int classname_len = 0;
+ zend_class_entry *ce= sxe_class_entry;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &data, &data_len) ==
FAILURE) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &data, &data_len,
&classname, &classname_len) == FAILURE) {
return;
}
@@ -1264,7 +1278,15 @@
RETURN_FALSE;
}
- sxe = php_sxe_object_new(sxe_class_entry TSRMLS_CC);
+ if (classname_len) {
+ zend_class_entry **pce;
+ if (zend_lookup_class(classname, classname_len, &pce TSRMLS_CC) ==
FAILURE) {
+ php_error_docref(NULL TSRMLS_CC, E_ERROR, "Class %s does not
exist", classname);
+ }
+ ce = *pce;
+ }
+
+ sxe = php_sxe_object_new(ce TSRMLS_CC);
php_libxml_increment_doc_ref((php_libxml_node_object *)sxe, docp TSRMLS_CC);
sxe->nsmapptr = emalloc(sizeof(simplexml_nsmap));
sxe->nsmapptr->nsmap = xmlHashCreate(10);
@@ -1426,8 +1448,11 @@
zval *node;
php_libxml_node_object *object;
xmlNodePtr nodep = NULL;
+ char *classname = "";
+ int classname_len = 0;
+ zend_class_entry *ce= sxe_class_entry;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o", &node) == FAILURE) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o|s", &node, &classname,
&classname_len) == FAILURE) {
return;
}
@@ -1445,7 +1470,15 @@
}
if (nodep && nodep->type == XML_ELEMENT_NODE) {
- sxe = php_sxe_object_new(sxe_class_entry TSRMLS_CC);
+ if (classname_len) {
+ zend_class_entry **pce;
+ if (zend_lookup_class(classname, classname_len, &pce
TSRMLS_CC) == FAILURE) {
+ php_error_docref(NULL TSRMLS_CC, E_ERROR, "Class %s
does not exist", classname);
+ }
+ ce = *pce;
+ }
+
+ sxe = php_sxe_object_new(ce TSRMLS_CC);
sxe->document = object->document;
php_libxml_increment_doc_ref((php_libxml_node_object *)sxe, nodep->doc
TSRMLS_CC);
sxe->nsmapptr = emalloc(sizeof(simplexml_nsmap));
@@ -1532,7 +1565,7 @@
{
php_info_print_table_start();
php_info_print_table_header(2, "Simplexml support", "enabled");
- php_info_print_table_row(2, "Revision", "$Revision: 1.107 $");
+ php_info_print_table_row(2, "Revision", "$Revision: 1.108 $");
php_info_print_table_row(2, "Schema support",
#ifdef LIBXML_SCHEMAS_ENABLED
"enabled");
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php