rrichards Wed Jul 19 18:32:19 2006 UTC
Modified files:
/php-src/ext/xmlreader php_xmlreader.c
/php-src/ext/xmlreader/tests 012.phpt 013.phpt
Log:
unicode support
update tests
http://cvs.php.net/viewvc.cgi/php-src/ext/xmlreader/php_xmlreader.c?r1=1.33&r2=1.34&diff_format=u
Index: php-src/ext/xmlreader/php_xmlreader.c
diff -u php-src/ext/xmlreader/php_xmlreader.c:1.33
php-src/ext/xmlreader/php_xmlreader.c:1.34
--- php-src/ext/xmlreader/php_xmlreader.c:1.33 Wed May 10 11:58:56 2006
+++ php-src/ext/xmlreader/php_xmlreader.c Wed Jul 19 18:32:19 2006
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_xmlreader.c,v 1.33 2006/05/10 11:58:56 rrichards Exp $ */
+/* $Id: php_xmlreader.c,v 1.34 2006/07/19 18:32:19 rrichards Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -92,9 +92,9 @@
switch (hnd->type) {
case IS_STRING:
if (retchar) {
- ZVAL_STRING(*retval, (xmlChar *) retchar, 1);
+ ZVAL_XML_STRING(*retval, (char *) retchar,
ZSTR_DUPLICATE);
} else {
- ZVAL_EMPTY_STRING(*retval);
+ ZVAL_EMPTY_TEXT(*retval);
}
break;
case IS_BOOL:
@@ -121,17 +121,17 @@
zend_object_handlers *std_hnd;
int ret = FAILURE;
- if (member->type != IS_STRING) {
+ if (member->type != IS_STRING && member->type != IS_UNICODE) {
tmp_member = *member;
zval_copy_ctor(&tmp_member);
- convert_to_string(&tmp_member);
+ convert_to_text(&tmp_member);
member = &tmp_member;
}
obj = (xmlreader_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);
+ ret = zend_u_hash_find(obj->prop_handler, Z_TYPE_P(member),
Z_UNIVAL_P(member), Z_UNILEN_P(member)+1, (void **) &hnd);
}
if (ret == FAILURE) {
std_hnd = zend_get_std_object_handlers();
@@ -155,10 +155,10 @@
zend_object_handlers *std_hnd;
int ret;
- if (member->type != IS_STRING) {
+ if (member->type != IS_STRING && member->type != IS_UNICODE) {
tmp_member = *member;
zval_copy_ctor(&tmp_member);
- convert_to_string(&tmp_member);
+ convert_to_text(&tmp_member);
member = &tmp_member;
}
@@ -166,7 +166,7 @@
obj = (xmlreader_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);
+ ret = zend_u_hash_find(obj->prop_handler, Z_TYPE_P(member),
Z_UNIVAL_P(member), Z_UNILEN_P(member)+1, (void **) &hnd);
}
if (ret == SUCCESS) {
ret = xmlreader_property_reader(obj, hnd, &retval TSRMLS_CC);
@@ -197,10 +197,10 @@
zend_object_handlers *std_hnd;
int ret;
- if (member->type != IS_STRING) {
+ if (member->type != IS_STRING && member->type != IS_UNICODE) {
tmp_member = *member;
zval_copy_ctor(&tmp_member);
- convert_to_string(&tmp_member);
+ convert_to_text(&tmp_member);
member = &tmp_member;
}
@@ -208,7 +208,7 @@
obj = (xmlreader_object *)zend_objects_get_address(object TSRMLS_CC);
if (obj->prop_handler != NULL) {
- ret = zend_hash_find((HashTable *)obj->prop_handler,
Z_STRVAL_P(member), Z_STRLEN_P(member)+1, (void **) &hnd);
+ ret = zend_u_hash_find(obj->prop_handler, Z_TYPE_P(member),
Z_UNIVAL_P(member), Z_UNILEN_P(member)+1, (void **) &hnd);
}
if (ret == SUCCESS) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot write to
read-only property");
@@ -233,8 +233,8 @@
int isFileUri = 0;
uri = xmlCreateURI();
- escsource = xmlURIEscapeStr(source, ":");
- xmlParseURIReference(uri, escsource);
+ escsource = xmlURIEscapeStr((xmlChar *) source, (xmlChar *) ":");
+ xmlParseURIReference(uri, (char *)escsource);
xmlFree(escsource);
if (uri->scheme != NULL) {
@@ -420,13 +420,19 @@
static void php_xmlreader_string_arg(INTERNAL_FUNCTION_PARAMETERS,
xmlreader_read_one_char_t internal_function) {
zval *id;
int name_len = 0;
- char *retchar = NULL;
+ xmlChar *retchar = NULL;
xmlreader_object *intern;
char *name;
+ UConverter *orig_runtime_conv;
+
+ orig_runtime_conv = ZEND_U_CONVERTER(UG(runtime_encoding_conv));
+ UG(runtime_encoding_conv) = UG(utf8_conv);
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &name,
&name_len) == FAILURE) {
+ UG(runtime_encoding_conv) = orig_runtime_conv;
return;
}
+ UG(runtime_encoding_conv) = orig_runtime_conv;
if (!name_len) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Argument cannot be
an empty string");
@@ -437,10 +443,10 @@
intern = (xmlreader_object *)zend_object_store_get_object(id TSRMLS_CC);
if (intern && intern->ptr) {
- retchar = internal_function(intern->ptr, name);
+ retchar = internal_function(intern->ptr, (xmlChar *)name);
}
if (retchar) {
- RETVAL_STRING(retchar, 1);
+ RETVAL_XML_STRING((char *)retchar, ZSTR_DUPLICATE);
xmlFree(retchar);
return;
} else {
@@ -472,7 +478,7 @@
/* {{{ php_xmlreader_no_arg_string */
static void php_xmlreader_no_arg_string(INTERNAL_FUNCTION_PARAMETERS,
xmlreader_read_char_t internal_function) {
zval *id;
- char *retchar = NULL;
+ xmlChar *retchar = NULL;
xmlreader_object *intern;
id = getThis();
@@ -482,7 +488,7 @@
retchar = internal_function(intern->ptr);
}
if (retchar) {
- RETVAL_STRING(retchar, 1);
+ RETVAL_XML_STRING((char *)retchar, ZSTR_DUPLICATE);
xmlFree(retchar);
return;
} else {
@@ -577,7 +583,7 @@
{
zval *id;
long attr_pos;
- char *retchar = NULL;
+ xmlChar *retchar = NULL;
xmlreader_object *intern;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &attr_pos) ==
FAILURE) {
@@ -591,11 +597,11 @@
retchar = xmlTextReaderGetAttributeNo(intern->ptr,attr_pos);
}
if (retchar) {
- RETVAL_STRING(retchar, 1);
+ RETVAL_XML_STRING((char *)retchar, ZSTR_DUPLICATE);
xmlFree(retchar);
return;
} else {
- RETURN_EMPTY_STRING();
+ RETURN_EMPTY_TEXT();
}
}
/* }}} */
@@ -607,11 +613,18 @@
zval *id;
int name_len = 0, ns_uri_len = 0;
xmlreader_object *intern;
- char *name, *ns_uri, *retchar = NULL;
+ xmlChar *retchar = NULL;
+ char *name, *ns_uri;
+ UConverter *orig_runtime_conv;
+
+ orig_runtime_conv = ZEND_U_CONVERTER(UG(runtime_encoding_conv));
+ UG(runtime_encoding_conv) = UG(utf8_conv);
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &name,
&name_len, &ns_uri, &ns_uri_len) == FAILURE) {
+ UG(runtime_encoding_conv) = orig_runtime_conv;
return;
}
+ UG(runtime_encoding_conv) = orig_runtime_conv;
if (name_len == 0 || ns_uri_len == 0) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Attribute Name and
Namespace URI cannot be empty");
@@ -622,14 +635,14 @@
intern = (xmlreader_object *)zend_object_store_get_object(id TSRMLS_CC);
if (intern && intern->ptr) {
- retchar = xmlTextReaderGetAttributeNs(intern->ptr, name,
ns_uri);
+ retchar = xmlTextReaderGetAttributeNs(intern->ptr, (xmlChar
*)name, (xmlChar *)ns_uri);
}
if (retchar) {
- RETVAL_STRING(retchar, 1);
+ RETVAL_XML_STRING((char *)retchar, ZSTR_DUPLICATE);
xmlFree(retchar);
return;
} else {
- RETURN_EMPTY_STRING();
+ RETURN_EMPTY_TEXT();
}
}
/* }}} */
@@ -688,10 +701,16 @@
int name_len = 0, retval;
xmlreader_object *intern;
char *name;
+ UConverter *orig_runtime_conv;
+
+ orig_runtime_conv = ZEND_U_CONVERTER(UG(runtime_encoding_conv));
+ UG(runtime_encoding_conv) = UG(utf8_conv);
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &name,
&name_len) == FAILURE) {
+ UG(runtime_encoding_conv) = orig_runtime_conv;
return;
}
+ UG(runtime_encoding_conv) = orig_runtime_conv;
if (name_len == 0) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Attribute Name is
required");
@@ -702,7 +721,7 @@
intern = (xmlreader_object *)zend_object_store_get_object(id TSRMLS_CC);
if (intern && intern->ptr) {
- retval = xmlTextReaderMoveToAttribute(intern->ptr, name);
+ retval = xmlTextReaderMoveToAttribute(intern->ptr, (xmlChar
*)name);
if (retval == 1) {
RETURN_TRUE;
}
@@ -749,11 +768,18 @@
int name_len=0, ns_uri_len=0, retval;
xmlreader_object *intern;
char *name, *ns_uri;
+ UConverter *orig_runtime_conv;
+
+ orig_runtime_conv = ZEND_U_CONVERTER(UG(runtime_encoding_conv));
+ UG(runtime_encoding_conv) = UG(utf8_conv);
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &name,
&name_len, &ns_uri, &ns_uri_len) == FAILURE) {
+ UG(runtime_encoding_conv) = orig_runtime_conv;
return;
}
+ UG(runtime_encoding_conv) = orig_runtime_conv;
+
if (name_len == 0 || ns_uri_len == 0) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Attribute Name and
Namespace URI cannot be empty");
RETURN_FALSE;
@@ -763,7 +789,7 @@
intern = (xmlreader_object *)zend_object_store_get_object(id TSRMLS_CC);
if (intern && intern->ptr) {
- retval = xmlTextReaderMoveToAttributeNs(intern->ptr, name,
ns_uri);
+ retval = xmlTextReaderMoveToAttributeNs(intern->ptr, (xmlChar
*)name, (xmlChar *)ns_uri);
if (retval == 1) {
RETURN_TRUE;
}
@@ -830,10 +856,16 @@
int retval, name_len=0;
xmlreader_object *intern;
char *name = NULL;
+ UConverter *orig_runtime_conv;
+
+ orig_runtime_conv = ZEND_U_CONVERTER(UG(runtime_encoding_conv));
+ UG(runtime_encoding_conv) = UG(utf8_conv);
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s", &name,
&name_len) == FAILURE) {
+ UG(runtime_encoding_conv) = orig_runtime_conv;
return;
}
+ UG(runtime_encoding_conv) = orig_runtime_conv;
id = getThis();
intern = (xmlreader_object *)zend_object_store_get_object(id TSRMLS_CC);
@@ -846,7 +878,7 @@
#endif
retval = xmlTextReaderNext(intern->ptr);
while (name != NULL && retval == 1) {
- if
(xmlStrEqual(xmlTextReaderConstLocalName(intern->ptr), name)) {
+ if
(xmlStrEqual(xmlTextReaderConstLocalName(intern->ptr), (xmlChar *)name)) {
RETURN_TRUE;
}
retval = xmlTextReaderNext(intern->ptr);
@@ -876,11 +908,18 @@
char *encoding = NULL;
char resolved_path[MAXPATHLEN + 1];
xmlTextReaderPtr reader = NULL;
+ UConverter *orig_runtime_conv;
+
+ orig_runtime_conv = ZEND_U_CONVERTER(UG(runtime_encoding_conv));
+ UG(runtime_encoding_conv) = UG(utf8_conv);
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|s!l", &source,
&source_len, &encoding, &encoding_len, &options) == FAILURE) {
+ UG(runtime_encoding_conv) = orig_runtime_conv;
return;
}
+ UG(runtime_encoding_conv) = orig_runtime_conv;
+
id = getThis();
if (id != NULL) {
if (! instanceof_function(Z_OBJCE_P(id), xmlreader_class_entry
TSRMLS_CC)) {
@@ -1059,7 +1098,7 @@
int resolved_path_len;
char *directory=NULL, resolved_path[MAXPATHLEN];
xmlParserInputBufferPtr inputbfr;
- xmlTextReaderPtr reader;
+ xmlTextReaderPtr reader = NULL;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|s!l", &source,
&source_len, &encoding, &encoding_len, &options) == FAILURE) {
return;
@@ -1210,7 +1249,8 @@
ce.create_object = xmlreader_objects_new;
xmlreader_class_entry = zend_register_internal_class(&ce TSRMLS_CC);
- zend_hash_init(&xmlreader_prop_handlers, 0, NULL, NULL, 1);
+ zend_u_hash_init(&xmlreader_prop_handlers, 0, NULL, NULL, 1,
(zend_bool)zend_ini_long("unicode.semantics", sizeof("unicode.semantics"), 1));
+
xmlreader_register_prop_handler(&xmlreader_prop_handlers,
"attributeCount", xmlTextReaderAttributeCount, NULL, IS_LONG TSRMLS_CC);
xmlreader_register_prop_handler(&xmlreader_prop_handlers, "baseURI",
NULL, xmlTextReaderConstBaseUri, IS_STRING TSRMLS_CC);
xmlreader_register_prop_handler(&xmlreader_prop_handlers, "depth",
xmlTextReaderDepth, NULL, IS_LONG TSRMLS_CC);
http://cvs.php.net/viewvc.cgi/php-src/ext/xmlreader/tests/012.phpt?r1=1.1&r2=1.2&diff_format=u
Index: php-src/ext/xmlreader/tests/012.phpt
diff -u php-src/ext/xmlreader/tests/012.phpt:1.1
php-src/ext/xmlreader/tests/012.phpt:1.2
--- php-src/ext/xmlreader/tests/012.phpt:1.1 Thu Mar 30 21:45:27 2006
+++ php-src/ext/xmlreader/tests/012.phpt Wed Jul 19 18:32:19 2006
@@ -4,7 +4,7 @@
<?php if (!extension_loaded("xmlreader")) print "skip"; ?>
--FILE--
<?php
-/* $Id: 012.phpt,v 1.1 2006/03/30 21:45:27 helly Exp $ */
+/* $Id: 012.phpt,v 1.2 2006/07/19 18:32:19 rrichards Exp $ */
$xmlstring =<<<EOF
<?xml version="1.0" encoding="UTF-8"?>
@@ -67,3 +67,14 @@
string(0) ""
string(0) ""
===DONE===
+--UEXPECT--
+unicode(0) ""
+NULL
+unicode(0) ""
+unicode(0) ""
+===FILE===
+unicode(0) ""
+NULL
+unicode(0) ""
+unicode(0) ""
+===DONE===
http://cvs.php.net/viewvc.cgi/php-src/ext/xmlreader/tests/013.phpt?r1=1.1&r2=1.2&diff_format=u
Index: php-src/ext/xmlreader/tests/013.phpt
diff -u php-src/ext/xmlreader/tests/013.phpt:1.1
php-src/ext/xmlreader/tests/013.phpt:1.2
--- php-src/ext/xmlreader/tests/013.phpt:1.1 Fri Mar 31 20:50:29 2006
+++ php-src/ext/xmlreader/tests/013.phpt Wed Jul 19 18:32:19 2006
@@ -5,7 +5,7 @@
<?php if (!method_exists('XMLReader','setSchema')) die('skip
XMLReader::setSchema() not supported');?>
--FILE--
<?php
-/* $Id: 013.phpt,v 1.1 2006/03/31 20:50:29 helly Exp $ */
+/* $Id: 013.phpt,v 1.2 2006/07/19 18:32:19 rrichards Exp $ */
$xml =<<<EOF
<?xml version="1.0" encoding="UTF-8" ?>
@@ -50,3 +50,10 @@
Warning: XMLReader::read(): Element 'foo': %s
===DONE===
+--UEXPECTF--
+unicode(3) "123"
+unicode(3) "456"
+===FAIL===
+
+Warning: XMLReader::read(): Element 'foo': %s
+===DONE===
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php