nlopess Tue Apr 25 14:54:33 2006 UTC
Modified files:
/php-src/ext/tidy tidy.c
Log:
fix a bunch of tests in unicode mode by fixing the config array transverser
also fix the compiler warnings
# Andrey: is it possible to have a zend_convert_unicode_to_ascii() function
please? it would make this code much simpler
http://cvs.php.net/viewcvs.cgi/php-src/ext/tidy/tidy.c?r1=1.81&r2=1.82&diff_format=u
Index: php-src/ext/tidy/tidy.c
diff -u php-src/ext/tidy/tidy.c:1.81 php-src/ext/tidy/tidy.c:1.82
--- php-src/ext/tidy/tidy.c:1.81 Tue Apr 25 12:41:59 2006
+++ php-src/ext/tidy/tidy.c Tue Apr 25 14:54:33 2006
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: tidy.c,v 1.81 2006/04/25 12:41:59 nlopess Exp $ */
+/* $Id: tidy.c,v 1.82 2006/04/25 14:54:33 nlopess Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -90,9 +90,13 @@
} else { \
convert_to_string_ex(&_val); \
TIDY_OPEN_BASEDIR_CHECK(Z_STRVAL_P(_val)); \
- if (tidyLoadConfig(_doc, Z_STRVAL_P(_val)) < 0) { \
+ switch (tidyLoadConfig(_doc, Z_STRVAL_P(_val))) { \
+ case -1: \
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not load
configuration file '%s'", Z_STRVAL_P(_val)); \
- RETURN_FALSE; \
+ break; \
+ case 1: \
+ php_error_docref(NULL TSRMLS_CC, E_NOTICE, "There were errors
while parsing the configuration file '%s'", Z_STRVAL_P(_val)); \
+ break; \
} \
} \
}
@@ -462,16 +466,7 @@
/* We can't use TIDY_APPLY_CONFIG_ZVAL() here, it uses RETURN_FALSE */
if (ZEND_NUM_ARGS() > 1) {
- if(Z_TYPE_P(config) == IS_ARRAY) {
- _php_tidy_apply_config_array(doc, HASH_OF(config)
TSRMLS_CC);
- } else {
- convert_to_string_ex(&config);
- TIDY_OPEN_BASEDIR_CHECK(Z_STRVAL_P(config));
- if (tidyLoadConfig(doc, Z_STRVAL_P(config)) < 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,
"Could not load configuration file '%s'", Z_STRVAL_P(config));
- RETVAL_FALSE;
- }
- }
+ TIDY_APPLY_CONFIG_ZVAL(doc, config);
}
if(enc_len) {
@@ -522,7 +517,7 @@
if (!(stream = php_stream_open_wrapper(filename, "rb",
(use_include_path ? USE_PATH : 0), NULL))) {
return NULL;
}
- if ((*len = (int) php_stream_copy_to_mem(stream, &data,
PHP_STREAM_COPY_ALL, 0)) == 0) {
+ if ((*len = (int) php_stream_copy_to_mem(stream, (void**)&data,
PHP_STREAM_COPY_ALL, 0)) == 0) {
data = estrdup("");
*len = 0;
}
@@ -889,26 +884,51 @@
static int _php_tidy_apply_config_array(TidyDoc doc, HashTable *ht_options
TSRMLS_DC)
{
- char *opt_name = NULL;
+ zstr opt_name;
zval **opt_val;
ulong opt_indx;
-
+ uint opt_name_len;
+ UConverter *conv = NULL;
+ UErrorCode status = U_ZERO_ERROR;
+ zend_bool clear_str;
+
+ zend_set_converter_encoding(&conv, "ASCII");
+
for (zend_hash_internal_pointer_reset(ht_options);
zend_hash_get_current_data(ht_options, (void **)&opt_val) ==
SUCCESS;
zend_hash_move_forward(ht_options)) {
- if(zend_hash_get_current_key(ht_options, &opt_name, &opt_indx,
FALSE) == FAILURE) {
+ switch (zend_hash_get_current_key_ex(ht_options, &opt_name,
&opt_name_len, &opt_indx, FALSE, NULL)) {
+ case HASH_KEY_IS_STRING:
+ clear_str = 0;
+ break;
+
+ case HASH_KEY_IS_UNICODE:
+ zend_convert_from_unicode(conv, &(opt_name.s),
&opt_name_len, opt_name.u, opt_name_len, &status);
+ if (U_FAILURE(status)) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING,
"Could not convert key from the option array");
+ ucnv_close(conv);
+ return FAILURE;
+ }
+ clear_str = 1;
+ break;
+
+ case HASH_KEY_IS_LONG:
+ continue; /* ignore numeric keys */
+
+ default:
php_error_docref(NULL TSRMLS_CC, E_ERROR, "Could not
retrieve key from option array");
+ ucnv_close(conv);
return FAILURE;
}
- if(opt_name) {
- _php_tidy_set_tidy_opt(doc, opt_name, *opt_val
TSRMLS_CC);
- opt_name = NULL;
+ _php_tidy_set_tidy_opt(doc, opt_name.s, *opt_val TSRMLS_CC);
+ if (clear_str) {
+ efree(opt_name.s);
}
-
}
-
+
+ ucnv_close(conv);
return SUCCESS;
}
@@ -985,7 +1005,7 @@
php_info_print_table_start();
php_info_print_table_header(2, "Tidy support", "enabled");
php_info_print_table_row(2, "libTidy Release", (char
*)tidyReleaseDate());
- php_info_print_table_row(2, "Extension Version",
PHP_TIDY_MODULE_VERSION " ($Id: tidy.c,v 1.81 2006/04/25 12:41:59 nlopess Exp
$)");
+ php_info_print_table_row(2, "Extension Version",
PHP_TIDY_MODULE_VERSION " ($Id: tidy.c,v 1.82 2006/04/25 14:54:33 nlopess Exp
$)");
php_info_print_table_end();
DISPLAY_INI_ENTRIES();
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php